Pieniä kysymyksiä ohjelmoinnista

Liittynyt
03.07.2018
Viestejä
347
Joo, joku API Gateway + Lambda lienee oikea teknologiavalinta AWS:ssä, jos tarvii saada pienemmällä vaivalla jotain kevyttä palvelua ajoon ja ei halua ylläpitää palvelimia. Pitäs skaalautua ihan riittävästi kaikkeen tavanomaiseen tarpeeseen. muoks. toki, niin kuin jo sanottukin, tää on vähän tällaista heittelyä, kun ei tiedä todellista tarvetta.

ECS-palvelu sit toinen, minne voi pukata kontti-imagea ajoon ja kun ajaa Fargatena, niin ei tarvitse sielläkään palvelimia nostella, mutta tuohon sais sitten väsätä VPC:n, säännöt verkkoliikenteelle, loadbalancerin ja kaikkea sellaista, mihin menee äkkiä useampi päivä aikaa ja ihmettelyä, jos ei oo tuttua. Tulee myös huomattavasti kalliimmaksi kuin tuo eka vaihtoehto.

Kubernetes (AWS:ssä EKS-palvelu) kaikkein raskain, vaatii osaamista ja säännöllistä ylläpitoa versionnostoineen. Ei kannata minusta miettiä, jos ei ole oikeasti tarvetta raskaammalle konttiorkestraatiolle. Pesee kyllä raskaammassa käytössä sit minun makuuni ECS:n osapuilleen kaikessa, jos hallintaan ja ylläpitoon löytyy vaan aikaa ja osaamista.
Kiitos näistä. Tuli törmättyä myös tähän Plans and pricing : PythonAnywhere
mikä saattaisi olla hyvä tai ehkä jopa paras vaihtoehto omiin tarpeisiin
 
Liittynyt
16.11.2020
Viestejä
2 587
Tuokin näköjään pyörii konepellin alla AWS-infran päällä.

Vaikea noin muuten sanoa enempää, kun ei jaksa ruveta kahlaan dokumentaatiota tarkemmin. Halpojahan nuo pienimmät tierit on ja jos resurssit vaan riittää ja palvelu on tuota kautta fiksusti konffittavissa myös omavalintaisella domainilla, niin mikä jottei.
 
Liittynyt
27.10.2017
Viestejä
1 852
Minulla on csv-tiedosto, jonka lukaisen Pythonilla Pandasin avulla dataframeksi. Csv:n kentissä on sekalaisessa formaatissa olevia tietoja, eli käytännössä kokonaislukuja, liukulukuja ja prosenttiarvoja, jotka Pandas tyrkkää ilmeisesti merkkijonoksi. Kysymys kuuluukin, miten nuo prosenttiarvot saisi sellaiseen muotoon, että Pandasilla voisi ottaa näppärästi keskiarvon niistä, esimerkki alla.

Itselle ongelmaksi muodostui esim. se, että sarakkeiden määrä vaihtelee, joten en voi muuttaa formaattia pelkästään nimen avulla. Dataframen muuttaminen listaksi ja iteroimalla for-loopilla ei sekään kuulosta yhtään järkevältä, lisäksi se taitaa hukata otsikot.

Python:
log_content = pd.read_csv(filename, sep=",", decimal=".")
log_content = log_content.iloc[:-4,11:-9]
average = log_content.describe().loc['mean']
 
Liittynyt
27.10.2017
Viestejä
1 852
Tein nyt tällaisen viritelmän, tuntuisi toimivan yhdellä tapauksella, toinen vaatii vielä tuunausta. Nuo kaksi otsikkotason korjausta on vähän omituinen juttu, csv-tiedostossa otsikot on ihan oikein, mutta read_csv ei tuo niitä sellaisenaan dataframeen vaan muuttaa ne ja korjaan ne takaisin oikeiksi. En löytänyt mitään syytä tuohon :rolleyes:

Python:
import pandas as pd
import os
import sys

filename = os.path.abspath(sys.argv[1])

log_content = pd.read_csv(filename, sep=",", decimal=".", header=0)
log_content = log_content.iloc[:-4,11:-9]
log_content.columns = log_content.columns.str.replace('.1', '', regex=True)
log_content.columns = log_content.columns.str.replace('66', ' 16x16', regex=True)
log_content.columns = log_content.columns.str.replace('AMP6', 'AMP 16', regex=True)
log_content = log_content.replace('%', '', regex=True).astype(float)
average = log_content.describe().loc['mean'].to_string()

print (average)
with open(filename+str('.log'), mode='w') as outputfile:
    outputfile.write(str(average))
    outputfile.close()
 
Liittynyt
17.01.2018
Viestejä
2 074
Tein nyt tällaisen viritelmän, tuntuisi toimivan yhdellä tapauksella, toinen vaatii vielä tuunausta. Nuo kaksi otsikkotason korjausta on vähän omituinen juttu, csv-tiedostossa otsikot on ihan oikein, mutta read_csv ei tuo niitä sellaisenaan dataframeen vaan muuttaa ne ja korjaan ne takaisin oikeiksi. En löytänyt mitään syytä tuohon :rolleyes:
Yleensä otsikot muuttuvat lukiessa jos luettava tiedosto on eri merkistössä kuin lukija olettaa tai välissä saattaa olla outoja merkkejä.

Äkkiä testattuna:
1. pastebin sisältö selaimesta copy-paste tiedostoon (ansi)
=> read_csv lukee sarakkeet oikein mutta suurimman osan ensimmäiseksi merkiksi tulee välilyönti.
2. sama mutta tiedosto muutettu utf-8 +BOM
=> sama tulos.

Testi pitäisi ajaa alkuperäisellä tiedostolla ilman sisällön kopiointia koska selain/jne saattavat muuttaa merkkejä matkan varrella.

Jos haluaa "kaikkien numeroita sisältävien sarakkeiden keskiarvot" niin pitää käydä koko csv läpi sarake kerrallaan (kaikki rivit) ja ottaa mukaan sellaiset sarakkeet joissa on vain numeroita (%- merkin poiston jälkeen). Käydä läpi siksi että dataa käsittelevät jutut yleensä kaatuvat .as(float) ja vastaaviin muunnoksiin jos data ei olekaan numeroita.

Jos on tiedossa minkä nimisiä sarakkeita voi käsitellä niin sitten pitää valita sen mukaan ja jättää loput pois, ehkä jotain tähän tyyliin:
Python:
import pandas as pd
import os
import sys

filename = os.path.abspath(sys.argv[1])
log_content = pd.read_csv(filename, sep=",", decimal=".", header=0)

col_count = len(log_content.columns)
sel_cols = []
for i in range(0, col_count):
    col_name = log_content.columns[i]
    col_type = log_content.dtypes[i]
    print("col {}: '{}', type = '{}'".format(i, col_name, col_type))
    if "Intra" in col_name or "AMP" in col_name:
        sel_cols.append(col_name)

print("Sarakkeet joiden nimessä esiintyy 'Intra' tai 'AMP':")
print(sel_cols)
selected_columns = log_content[sel_cols]
print(selected_columns)
# Tiedetään että valitussa setissä on vain numeroita % poiston jälkeen, muutos object -> float
result = selected_columns.replace('%', '', regex=True).astype(float)
print("Valittujen sarakkeiden keskiarvot:")
# Lasketaan valituille sarakkeille
for column in result.columns:
    average = result[column].mean()
    print("'{}': average = {}".format(column, average))
    # Tulosten kirjoitus ulos...
Oliko edes sinne päin mitä ehkä olit hakemassa ?
 

Ploro

Tukijäsen
Liittynyt
18.10.2016
Viestejä
481
Koitan tässä harjoitella pyyttonia, olen tehnyt pienen UI:n (kivy) ja siirtelen json dataa websocketilla. Nyt minulla on siis client ja UI jossa myös wbesocket serveri, tämä toimii.

Seuraavaksi haluaisin koittaa tehdä UI:sta myös clientin (helppo homma) ja siirtää serverin omaan .py tiedostoon.

Mitenkä pistän pystyyn simppelin serverin jossa:

Serveri loggaa client1 ja client2 json dataa omiin listoihin (client1_data[], client2_data[]). Clientit voivat hakea dataa "valitsemastaan" listasta.

Tuleepa tästä epäselvä teksti... pahoittelut siitä.

Eli miten voin luoda clienteillä ID:n jotta voisin tallettaa datan oikeaan listaan ja lähettää vain tietylle clientille. Lisäänkö json dataan ID:n ja parsin sen sieltä ja talletan sen ID:n mukaan?

Olen koittanut etsiä esimerkkejä, mutta en oikein tiedä mitä hakea.
 
Liittynyt
07.01.2021
Viestejä
685
Vastaus riippuu ensinnäkin siitä, missä ympäristössä työskentelet ja toiseksi siitä, pyöriikö sovellukset samassa koneessa. Linux-puolella jälkimmäisessä tapauksessa paras vastaus on yleensä socketit. Jos taas haluat lähettää koneelta toiselle, niin homma menee vähän mutkaisemmaksi.

 

Ploro

Tukijäsen
Liittynyt
18.10.2016
Viestejä
481
Vastaus riippuu ensinnäkin siitä, missä ympäristössä työskentelet ja toiseksi siitä, pyöriikö sovellukset samassa koneessa. Linux-puolella jälkimmäisessä tapauksessa paras vastaus on yleensä socketit. Jos taas haluat lähettää koneelta toiselle, niin homma menee vähän mutkaisemmaksi.

Nyt pyörii lokaalisti Windows koneella, jos nyt vaikka saan ensin tässä toimimaan.
Minulla siis on jo toimiva yhden clientin ja serverin välinen kommunikointi, käytän websockets kirjastoa.
Nyt siis koitan etsiä esimerkkejä miten pitää ”kirjaa” eri clienteista ja siitä miten tietylle clientille lähetetään dataa.
 
Liittynyt
07.01.2021
Viestejä
685
Jokaisella clientillä on oma socketinsa. Lähetät dataa tiettyyn socketiin niin se menee sille clientille. Jos clientit pitää tunnistaa, niin clientin pitää sitten lähettää jonkun sortin tunniste serverille. Jos palvelut on samanlaisia eri clienteille eikä tarvita mitään kirjautumista niin tämä on sinällään turhaa. Esimerkiksi vaikka weppipalvelin: clientit kyselee dataa ja serveri lähettää, serverin ei tarvitse tietää tai pitää sen enempää kirjaa kuka minkäkin socketin takana on.
 

Ploro

Tukijäsen
Liittynyt
18.10.2016
Viestejä
481
Jokaisella clientillä on oma socketinsa. Lähetät dataa tiettyyn socketiin niin se menee sille clientille. Jos clientit pitää tunnistaa, niin clientin pitää sitten lähettää jonkun sortin tunniste serverille. Jos palvelut on samanlaisia eri clienteille eikä tarvita mitään kirjautumista niin tämä on sinällään turhaa. Esimerkiksi vaikka weppipalvelin: clientit kyselee dataa ja serveri lähettää, serverin ei tarvitse tietää tai pitää sen enempää kirjaa kuka minkäkin socketin takana on.
Oikein paljon kiitoksia, koitan googletella yleisesti socketeista ja kyselen sitten lisää tyhmiä.
 
Liittynyt
31.12.2016
Viestejä
443
Palvelimella luo listan käyttäjistä ja tarkistaa onko jo listalla. Clientilta voi lähettää idn esim
jsonnissa ja URL parametrinakin onnistunee. Palvelimella luo jokaiselle id lle oman listan/sanakirjan.
 
Liittynyt
21.01.2017
Viestejä
230
Miten lasketaan pisteen ja kolmion välinen etäisyys? Pitäsi löytää pisteelle lähin kolmio, kolmoita voi olla tuhansia. Piste ei ole minkään kolmion päällä.
2D vai 3D? Ilmeisesti pelkkä 2D.

Kolmion sivu (kulmat A ja B) on suoralla, jonka kulmakerroin tiedetään. "Suorakulmaisen etäisyyden" (Vd), joka on suoran normaali, kulmakerroin tiedetään siis myös.
Pisteestä A pääsee siis pisteeseen P: P = A + k*(B-A) + Vd (jossa Vd on "vasemmalle" tai "oikealle")
Jos tuosta saa ratkaistua k:n ja sen arvo on välillä [0..1], on lähin piste A:n ja B:n välillä. Muuten etäisyys on lähempi A:sta ja B:stä.
 

Starglazer

Tukijäsen
Liittynyt
17.10.2016
Viestejä
3 096
Peruskauraa varmasti asiaa ymmärtävälle mutta kun itse en juuri ymmärrä web devauksesta joten kysyn täältä.
Löysin kerrassaan erinomaisen APIn sähkön pörssihinnan hakemiseen:
Täältä saa haettua päivän hinnat rajapinnasta:
Tulevat siistissä JSON formaatissa:
Koodi:
[
  {
    "Rank": 3,
    "DateTime": "2022-11-23T00:00:00+02:00",
    "PriceNoTax": 0.1600,
    "PriceWithTax": 0.1985
  },
  {
    "Rank": 5,
    "DateTime": "2022-11-23T01:00:00+02:00",
    "PriceNoTax": 0.1799,
    "PriceWithTax": 0.2231
  },
Mutta kun tekee koneelle html tiedostoon Javasrciptillä kutsun rajapintaan ja avaa tiedoston selaimella:

Koodi:
async function getData() {
    const response = await fetch(
    'https://api.spot-hinta.fi/Today');
Ei toimi vaan tulee virhe

Koodi:
Access to fetch at 'https://api.spot-hinta.fi/Today' from origin 'null' has been blocked by CORS policy: 
No 'Access-Control-Allow-Origin' header is present on the requested resource. 
If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.
Google ei tuota oikein selkokielistä vastausta.
 
Liittynyt
19.10.2016
Viestejä
1 562
@Starglazer: Tuuppaa URL:n perään tällainen parametri, niin lähtee toimimaan:

JavaScript:
{
    mode: 'no-cors'
}
Dokumentaatio tälle löytyy vaikka MDN:stä: fetch() - Web APIs | MDN CORS-asiaa siellä ei ole sen enempää avattu, joten sitä kannattaa lueskella itse, mutta ainakin mode on siellä dokumentoitu "jollain tasolla".
 

Starglazer

Tukijäsen
Liittynyt
17.10.2016
Viestejä
3 096
@Starglazer: Tuuppaa URL:n perään tällainen parametri, niin lähtee toimimaan:

JavaScript:
{
    mode: 'no-cors'
}
Dokumentaatio tälle löytyy vaikka MDN:stä: fetch() - Web APIs | MDN CORS-asiaa siellä ei ole sen enempää avattu, joten sitä kannattaa lueskella itse, mutta ainakin mode on siellä dokumentoitu "jollain tasolla".
Kiitos, menihän se rivin eteenpäin vaan jostain syystä ei taida tulla dataa palvelusta tuon jälkeen.
Laitan koko koodin pätkän tähän. Otin pohjaksi koodin täältä:
Ja yritän piirtää pylväsdiagrammin päivän sähkön hinnoista. Eli funktion koodi:
JavaScript:
        async function getData() {
            const response = await fetch(
//'https://datausa.io/api/data?drilldowns=Nation&measures=Population', method: 'GET');
            'https://api.spot-hinta.fi/Today',
                {   
                    mode: 'no-cors'
                }
            );
            console.log(response);
            const data = await response.json();
            console.log(data);
            length = data.data.length;
            console.log(length);
 
            labels = [];
            values = [];
            for (i = 0; i < length; i++) {
                labels.push(data.data[i].DateTime);
                values.push(data.data[i].PriceNoTax);
            }
 
 
            new Chart(document.getElementById("bar-chart"), {
                type: 'bar',
                data: {
                    labels: labels,
                    datasets: [
                        {
                            label: "Hinta eur / kwh",
                            backgroundColor: ["#3e95cd",
                                              "#8e5ea2",
                                              "#3cba9f",
                                              "#e8c3b9",
                                              "#c45850",
                                              "#CD5C5C",
                                              "#40E0D0"],
                            data: values
                        }
                    ]
                },
                options: {
                    legend: { display: false },
                    title: {
                        display: true,
                        text: 'Sähkön markkinahinta'
                    }
                }
            });
Nyt tökkää siis riville "const data = await response.json();". Selaimen konsolissa näkyy virheilmoitus
Uncaught (in promise) SyntaxError: Unexpected end of input (at index.html:33:41)
at getData (index.html:33:41)
 
Liittynyt
17.10.2016
Viestejä
14 643
Kiitos, menihän se rivin eteenpäin vaan jostain syystä ei taida tulla dataa palvelusta tuon jälkeen.
Ei tuo `no-cors` toimi kuten oletat. Sen käyttämisen jälkeen et voi lukea requestin bodyä, eli dataa. Se ei siis ole ratkaisu. Ajatus on, että tuota APIa kutsutaan serveriltä, ei suoraan selaimesta. Eli pystytä serveri, joka tuota kutsuu ja tarjoilee datan selaimelle. Serveri ei aiheuta samaa ongelmaa. Tuo on siis selaimen ominaisuus.

On muitakin tapoja, mutta tuo lienee perustapa.
 

Starglazer

Tukijäsen
Liittynyt
17.10.2016
Viestejä
3 096
Ei tuo `no-cors` toimi kuten oletat. Sen käyttämisen jälkeen et voi lukea requestin bodyä, eli dataa. Se ei siis ole ratkaisu. Ajatus on, että tuota APIa kutsutaan serveriltä, ei suoraan selaimesta. Eli pystytä serveri, joka tuota kutsuu ja tarjoilee datan selaimelle. Serveri ei aiheuta samaa ongelmaa. Tuo on siis selaimen ominaisuus.

On muitakin tapoja, mutta tuo lienee perustapa.
Kiitos, tähän minäkin päädyin ennen kuin täältä asiaa kysyin että "CORSin ohittaminen" ei ole oikea tapa tätä hoitaa. Menee vaan vähän idea helpon APIn käyttämisestä kun sitä ei voi näin helposti käyttää suoraan web sivulla :D Mutta tätähän tämä koodaaminen on, mikään ei ole niin helppoa kuin ensin luulee.
Menee vähän turhan monimutkaiseksi kun suunnittelin web sivua jossa voisi näyttää esimerkiksi seuraavan kahdeksan tunnin pörssisähkön hinnan. Tätä voisi näyttää vaikka vanhassa tabletissa josta voisi äkkiä tarkistaa milloin pesukone kannattaa käynnistää.
 
Liittynyt
06.11.2016
Viestejä
1 783
Kiitos, tähän minäkin päädyin ennen kuin täältä asiaa kysyin että "CORSin ohittaminen" ei ole oikea tapa tätä hoitaa. Menee vaan vähän idea helpon APIn käyttämisestä kun sitä ei voi näin helposti käyttää suoraan web sivulla :D Mutta tätähän tämä koodaaminen on, mikään ei ole niin helppoa kuin ensin luulee.
Menee vähän turhan monimutkaiseksi kun suunnittelin web sivua jossa voisi näyttää esimerkiksi seuraavan kahdeksan tunnin pörssisähkön hinnan. Tätä voisi näyttää vaikka vanhassa tabletissa josta voisi äkkiä tarkistaa milloin pesukone kannattaa käynnistää.
Eikö joku tuollainen cors proxy toimisi tässä, kuten vaikkapa tämä crossorigin.me
edit: CORS Proxy
 
Viimeksi muokattu:
Liittynyt
16.11.2020
Viestejä
2 587
Menee vähän turhan monimutkaiseksi kun suunnittelin web sivua jossa voisi näyttää esimerkiksi seuraavan kahdeksan tunnin pörssisähkön hinnan. Tätä voisi näyttää vaikka vanhassa tabletissa josta voisi äkkiä tarkistaa milloin pesukone kannattaa käynnistää.
En tiedä sun taustojasi, mutta noin niinku kivuttomin tapa tehdä tuo vois ehkä olla Python + Flask.

Pythonissa on requests-kirjasto, jolla toi API-kutsu on oikeasti rivi koodia ja Flaskilla taas saa hyvin pienellä määrällä koodia tehdyksi weppipalvelimen ja renderöityä HTML:n sekaan tosta API-kutsusta haetut datat.

Siinä on tietty oma miettimisensä, miten tuota haluaa ajaa, jos siis tarttis olla koko ajan päällä, mutta tuollai nyt sais ainakin haetuksi aina API:sta datat ja näytettyä ne menemällä johonkin localhostin osoitteeseen tai missä tuo nyt sitten pyöriskään.
 
Liittynyt
17.10.2016
Viestejä
14 643
Eikö joku tuollainen cors proxy toimisi tässä,
Tollanen vaikuttaa näppärältä ja säästää sen oman serverin pystyttämisen. Mutta en kyllä saanut toimimaan tuon kanssa. Edes omalta serveriltä. Ja muutoinkin noi näyttää olevan melkoisia purkkakasoja, joten kelpaavat lähinnä omaan töhöstelyyn.

Suosittelen OP:lle hyvän harrastuksen laajentamista ja Node/Express-serverin pystyttämisen opettelua :) (Ei ole oikeasti vaikeaa.)
 
Liittynyt
07.01.2021
Viestejä
685
Curlilla ainakin toimi datan hakeminen suoraan, eli vaihtoehtona voisi olla vaikka skripti joka käy säännöllisesti hakemassa tuolla datan ja kirjoittaa johonkin tiedostoon.
 
Liittynyt
06.11.2016
Viestejä
1 783
" It appears the domain has been grabbed by someone and is now parked via parkingcrew.net. "
Ei tullut testattua tuota, kun puhelimella kirjotin tuon. Mutta joskus vuosia sitten käytin tuota johonkin räpellykseen ja löytyyhän noita muita vastaaviakin.
Muokkasin alkuperäistä viestiäni.
 
Viimeksi muokattu:
Liittynyt
03.07.2018
Viestejä
347
Koodi toimii kun muokkaa alun näin:
Koodi:
getData();
              async function getData() {
                        const response = await fetch('https://api.allorigins.win/get?url=https%3A%2F%2Fapi.spot-hinta.fi%2FToday',
                            {   

                            }
                        );
                        //console.log(response);
                        const data = await response.json();
                        console.log('data', data);
                        data.contents = JSON.parse(data.contents);
                        length = data.contents.length;
                        console.log(length);
                        console.log('data.contents', data.contents);
            
                        labels = [];
                        values = [];
                        for (i = 0; i < length; i++) {
                            console.log('i: ',i, data.contents[i]);

                            labels.push(data.contents[i].DateTime);
                            values.push(data.contents[i].PriceNoTax);
                        }
xcorsit saa muuten pois chromesta tietyllä käynnistysparametrillä, en nyt muista mikä se oli.
 

Starglazer

Tukijäsen
Liittynyt
17.10.2016
Viestejä
3 096
Koodi toimii kun muokkaa alun näin:
Koodi:
getData();
              async function getData() {
                        const response = await fetch('https://api.allorigins.win/get?url=https%3A%2F%2Fapi.spot-hinta.fi%2FToday',
                            {  

                            }
                        );
                        //console.log(response);
                        const data = await response.json();
                        console.log('data', data);
                        data.contents = JSON.parse(data.contents);
                        length = data.contents.length;
                        console.log(length);
                        console.log('data.contents', data.contents);
           
                        labels = [];
                        values = [];
                        for (i = 0; i < length; i++) {
                            console.log('i: ',i, data.contents[i]);

                            labels.push(data.contents[i].DateTime);
                            values.push(data.contents[i].PriceNoTax);
                        }
xcorsit saa muuten pois chromesta tietyllä käynnistysparametrillä, en nyt muista mikä se oli.
Kiitos! Tällähän se toimii! Tästä on hyvä jatkaa.
1669296626615.png
 
Liittynyt
18.10.2016
Viestejä
520
Hei , törmäsin pythonissa johki hämärään mitä en vain itse tajua jos esim vscodiumissa laitan tälläsen koodin:
Koodi:
temp = 3.19
tempint = int(temp)
ld = temp - tempint
print(tempint)
print(ld)
saan vastaukseksi:
3
0.18999999999999995
mistä ihmeestä tuo 0.19 desimaali muuttuu tuollaiseksi.
tää on harjoittelu tehtävä jossa tähän törmäsin mutta en vain käsitä miten tuollainen voi palauttaa jotain ihan puuta heinää.
ja tehtävä on jo kyllä tehty ettei kyse ole siitä :)
 

Zigh

Tittelitön
Liittynyt
17.10.2016
Viestejä
4 613
Hei , törmäsin pythonissa johki hämärään mitä en vain itse tajua jos esim vscodiumissa laitan tälläsen koodin:
Koodi:
temp = 3.19
tempint = int(temp)
ld = temp - tempint
print(tempint)
print(ld)
saan vastaukseksi:
3
0.18999999999999995
mistä ihmeestä tuo 0.19 desimaali muuttuu tuollaiseksi.
tää on harjoittelu tehtävä jossa tähän törmäsin mutta en vain käsitä miten tuollainen voi palauttaa jotain ihan puuta heinää.
ja tehtävä on jo kyllä tehty ettei kyse ole siitä :)
Perusongelma monissa kielissä.

Kevyt ratkaisu on käyttää pyöristystä tai jos pitää saada varmasti tarkkoja arvoja kuten valuuttoja / rahaa laskettaessa, niin jotain kirjastoa, esim. decimal — Decimal fixed point and floating point arithmetic — Python 3.11.0 documentation
 
Liittynyt
18.10.2016
Viestejä
520
Ok no olipa nopea vastaus :) ja jep pyöristyksellä tuon tein tehtävään mutta jäi vain vaivaamaan että tälläsiä ongelmia on , ja opettaja ei osannut kommentoida miksi tuo koodi tekee mitä tekee ja täältä vastaus löyty todella nopeesti kiitos siitä :)
 
Liittynyt
15.10.2021
Viestejä
17
0.18999999999999995
mistä ihmeestä tuo 0.19 desimaali muuttuu tuollaiseksi.
Virhe johtuu tosiaan lukujärjestelmien erosta. Digitaalitekniikalla on helpointa käyttää laskennassa sisäisesti binäärilukujärjestelmää (kantaluku 2) kun taas suurin osa ihmisistä on tottunut desimaalilukujärjestelmän käyttöön (kantaluku 10). Kokonaisluvuilla eroja ei vielä pääse syntymään. Esimerkiksi 42 eli 4*10¹ + 2*10⁰ = 40 + 2 on binäärilukuna 101010 eli 1*2⁵ + 1*2³ + 1*2¹ = 32 + 8 + 2
1670229842598.png

Kun siirrytään desimaalipilkun toiselle puolelle niin eroja voi huomata jo kohtalaisen yksinkertaisilla luvuilla. Binäärijärjestelmässä pilkun jälkeiset osat jatkuvat vastaavasti negatiivisina kantaluvun potensseina kuten kymmenjärjestelmässäkin. 10⁻¹ = 0,1, 10⁻² = 0,01, 10⁻³ = 0,001 ja vastaavasti 2⁻¹ = 0,5, 2⁻² = 0,25, 2⁻³ = 0,125. Kymmenjärjestelmässä joidenkin murtolukujen desimaaliesitys on päättymätön luku. Esimkerksi 1/11 = 0,909090909... Binäärijärjestelmässä jo usein käytetty desimaaliluku 0,1 on päättymätön 0,000110011001100110011... Näissä molemmissa tilanteissa luku on käytännöllisistä syistä katkaistava johonkin kohtaan, jolloin loppu jää virheeksi. Esimerkiksi jos binääriluku katkaistaan niin että 2⁻¹⁵ on pienin jäljelle jäävä bitti niin desimaalilukuna tulos on 0.0999755859375 ja virhe näkyy jo viidennessä desimaalissa (pyöristämällä oikein olisi päästy vähän lähemmäs).
1670232827501.png

Katkaisusta johtuva epätarkkuus ei koske vain päättymättömiä esityksiä vaan suurimpaan osaan laskujen tuloksista tulee jonkinlaista numeerista virhettä.

Tietokoneissa käytetään yleisesti IEEE 754 standardia desimaaliosan sisältävien lukujen esitykseen. Python taitaa käyttää standardin binary64 formaattia, joka tunnetaan myös float64 tai double nimillä. Tuo standardi määrittää kuinka monta merkitsevää bittiä lukuun tulee mukaan (53) ja millä skaalalla ensimmäisen merkitsevän bitin eksponentti voi olla (-1022 ... 1023). Koska tuo exponentti eli "pilkun paikka" voi tuossa standardissa liikkua joustavasti niin puhutaankin liukuluvuista. Standaridssa on myös vähemmän tarkkoja formaatteja kuten binary32 ja binary16. Usein jos alempi tarkkuus on omaan käyttöön riittävä voidaan sitä käyttämällä päästä suurempiin laskentanopeuksiin. Esimerkiksi yhden binary64 laskennan aikana voidaan usein tehdä kaksi binary32 laskentaa.
Sama standardi määrittää myös desimaalilukuihin perustuvia formaatteja kuten decimal64. Näillä laskenta ei ole tietokoneella yhtä nopeaa kuin binääri formaateilla, mutta niille on omat käyttökohteensa niin kuin @Zigh mainitsikin.
 
Viimeksi muokattu:
Liittynyt
19.12.2016
Viestejä
231
Virhe johtuu tosiaan lukujärjestelmien erosta. Digitaalitekniikalla on helpointa käyttää laskennassa sisäisesti binäärilukujärjestelmää (kantaluku 2) kun taas suurin osa ihmisistä on tottunut desimaalilukujärjestelmän käyttöön (kantaluku 10). Kokonaisluvuilla eroja ei vielä pääse syntymään. Esimerkiksi 42 eli 4*10¹ + 2*10⁰ = 40 + 2 on binäärilukuna 101010 eli 1*2⁵ + 1*2³ + 1*2¹ = 32 + 8 + 2

Kun siirrytään desimaalipilkun toiselle puolelle niin eroja voi huomata jo kohtalaisen yksinkertaisilla luvuilla. Binäärijärjestelmässä pilkun jälkeiset osat jatkuvat vastaavasti negatiivisina kantaluvun potensseina kuten kymmenjärjestelmässäkin. 10⁻¹ = 0,1, 10⁻² = 0,01, 10⁻³ = 0,001 ja vastaavasti 2⁻¹ = 0,5, 2⁻² = 0,25, 2⁻³ = 0,125. Kymmenjärjestelmässä joidenkin murtolukujen desimaaliesitys on päättymätön luku. Esimkerksi 1/11 = 0,909090909... Binäärijärjestelmässä jo usein käytetty desimaaliluku 0,1 on päättymätön 0,000110011001100110011... Näissä molemmissa tilanteissa luku on käytännöllisistä syistä katkaistava johonkin kohtaan, jolloin loppu jää virheeksi. Esimerkiksi jos binääriluku katkaistaan niin että 2⁻¹⁵ on pienin jäljelle jäävä bitti niin desimaalilukuna tulos on 0.0999755859375 ja virhe näkyy jo heti ensimmäisessä desimaalissa (pyöristämällä oikein olisi päästy vähän lähemmäs).

Katkaisusta johtuva epätarkkuus ei koske vain päättymättömiä esityksiä vaan suurimpaan osaan laskujen tuloksista tulee jonkinlaista numeerista virhettä.

Tietokoneissa käytetään yleisesti IEEE 754 standardia desimaaliosan sisältävien lukujen esitykseen. Python taitaa käyttää standardin binary64 formaattia, joka tunnetaan myös float64 tai double nimillä. Tuo standardi määrittää kuinka monta merkitsevää bittiä lukuun tulee mukaan (53) ja millä skaalalla ensimmäisen merkitsevän bitin eksponentti voi olla (-1022 ... 1023). Koska tuo exponentti eli "pilkun paikka" voi tuossa standardissa liikkua joustavasti niin puhutaankin liukuluvuista. Standaridssa on myös vähemmän tarkkoja formaatteja kuten binary32 ja binary16. Usein jos alempi tarkkuus on omaan käyttöön riittävä voidaan sitä käyttämällä päästä suurempiin laskentanopeuksiin. Esimerkiksi yhden binary64 laskennan aikana voidaan usein tehdä kaksi binary32 laskentaa.
Sama standardi määrittää myös desimaalilukuihin perustuvia formaatteja kuten decimal64. Näillä laskenta ei ole tietokoneella yhtä nopeaa kuin binääri formaateilla, mutta niille on omat käyttökohteensa niin kuin @Zigh mainitsikin.
Nyt oli kyllä sellaista faktatiedon tykitystä, että ei voi kuin ottaa virtuaalisesti hatun pois päästä ja kumartaa kunnioituksen merkiksi.
 

pAy

Liittynyt
15.08.2020
Viestejä
78
Löytyisikö apuja nettisivun koodin muokkaamiseen, sivun koodi hakee joka kansiosta uusimman kuvan, nyt pitäisi muokata niin, että pystyn vaihtamaan kuvien järjestystä. Nyt menee siis cam1, cam2...cam13 numerojärjestyksessä, miten saisi helposti näkymään esim. cam1, cam4, cam5, cam2 jne.


PHP:
<?php
class ImageFilterIterator extends FilterIterator {
  public function accept(): bool {
    return $this->isFile() && in_array(strtolower($this->getExtension()), ["jpg", "png", "webp"]);
  }
}

$images = [];
foreach (range(1, 13) as $i) {
  $dir = __DIR__ . "/cam" . $i;
  [$images[$i], $ctime] = [null, 0];
  foreach (new ImageFilterIterator(new FilesystemIterator($dir)) as $info) {
    if ($info->getCTime() > $ctime) {
      [$images[$i], $ctime] = [$info->getFilename(), $info->getCTime()];
    }
  }
}

header("Refresh: 300");
?>
<!DOCTYPE html>
<html lang="fi">
<head>
  <meta charset="utf-8">
  <title>Uusimmat kuvat</title>
  <style>
    img { width: 65%; }
    a { display: block; margin: 0.5rem; }
  </style>
</head>
<body>
<?php
foreach ($images as $i => $img) {
  $src = $img ? "cam$i/" . htmlspecialchars($img) : "data:,x";
  echo "<a href='cam$i'><img src='$src' alt='Kamera $i' /></a>";
}
?>
</body>
</html>
 

Overij

Tukijäsen
Liittynyt
14.12.2016
Viestejä
257
Löytyisikö apuja nettisivun koodin muokkaamiseen, sivun koodi hakee joka kansiosta uusimman kuvan, nyt pitäisi muokata niin, että pystyn vaihtamaan kuvien järjestystä. Nyt menee siis cam1, cam2...cam13 numerojärjestyksessä, miten saisi helposti näkymään esim. cam1, cam4, cam5, cam2 jne.


PHP:
<?php
class ImageFilterIterator extends FilterIterator {
  public function accept(): bool {
    return $this->isFile() && in_array(strtolower($this->getExtension()), ["jpg", "png", "webp"]);
  }
}

$images = [];
foreach (range(1, 13) as $i) {
  $dir = __DIR__ . "/cam" . $i;
  [$images[$i], $ctime] = [null, 0];
  foreach (new ImageFilterIterator(new FilesystemIterator($dir)) as $info) {
    if ($info->getCTime() > $ctime) {
      [$images[$i], $ctime] = [$info->getFilename(), $info->getCTime()];
    }
  }
}

header("Refresh: 300");
?>
<!DOCTYPE html>
<html lang="fi">
<head>
  <meta charset="utf-8">
  <title>Uusimmat kuvat</title>
  <style>
    img { width: 65%; }
    a { display: block; margin: 0.5rem; }
  </style>
</head>
<body>
<?php
foreach ($images as $i => $img) {
  $src = $img ? "cam$i/" . htmlspecialchars($img) : "data:,x";
  echo "<a href='cam$i'><img src='$src' alt='Kamera $i' /></a>";
}
?>
</body>
</html>
Riviltä 8 alkaen muokkaisin näin:
PHP:
$images = [];
$cams = [1, 4, 5, 2]; // Tähän kamerat haluttuun järjestykseen
foreach ($cams as $i) {
 
  • Tykkää
Reactions: pAy
Liittynyt
05.02.2017
Viestejä
176
CSS ongelma:
Minulla on 100% viewport levyinen <div> elementti, korkeus 50%. Tämän sisällä haluaisin näyttää <svg> elementin, joka on diviä isompi, niin että grafiikkaa ei piirretä parentin boxin ulkopuolelle, vaan se leikkautuisi <div> elementin rajoihin. Kuinka tämä oikein pakotetaan?



HTML:
<div id="synthGroundPlane">
        <svg height="200%" width="200%" id="synthGroundGrid" class="groundArea">
            <<defs>
                <pattern id="synthGroundGridLines" width="100" height="100"
                    patternUnits="userSpaceOnUse">
                    <path d="M 100 0 L 0 0 0 100"
                         fill="none" />
                </pattern>
            </defs>
    
            <<rect x="-50%" y="-50%" width="500%" height="200%" fill="url(#synthGroundGridLines)"/>
            Sorry, your browser does not support inline SVG.
        </svg>
    </div>
CSS:
  #synthGroundPlane {
    width: 100%; height: 50%;
    background-color: darkmagenta;
    position: absolute;
    bottom: 0%;
    left: 0%;
    -webkit-perspective: 500px;
    -webkit-perspective-origin: 50%;
  }

  #synthGroundGrid {
    position: relative;
    left: -50%;
    stroke: turquoise;
    stroke-width: "1.5rem";
    background-color: lightslategray;
    -webkit-transform: rotateX(30deg);
  }
 
Liittynyt
17.10.2016
Viestejä
985
CSS ongelma:
Minulla on 100% viewport levyinen <div> elementti, korkeus 50%. Tämän sisällä haluaisin näyttää <svg> elementin, joka on diviä isompi, niin että grafiikkaa ei piirretä parentin boxin ulkopuolelle, vaan se leikkautuisi <div> elementin rajoihin. Kuinka tämä oikein pakotetaan?



HTML:
<div id="synthGroundPlane">
        <svg height="200%" width="200%" id="synthGroundGrid" class="groundArea">
            <<defs>
                <pattern id="synthGroundGridLines" width="100" height="100"
                    patternUnits="userSpaceOnUse">
                    <path d="M 100 0 L 0 0 0 100"
                         fill="none" />
                </pattern>
            </defs>
    
            <<rect x="-50%" y="-50%" width="500%" height="200%" fill="url(#synthGroundGridLines)"/>
            Sorry, your browser does not support inline SVG.
        </svg>
    </div>
CSS:
  #synthGroundPlane {
    width: 100%; height: 50%;
    background-color: darkmagenta;
    position: absolute;
    bottom: 0%;
    left: 0%;
    -webkit-perspective: 500px;
    -webkit-perspective-origin: 50%;
  }

  #synthGroundGrid {
    position: relative;
    left: -50%;
    stroke: turquoise;
    stroke-width: "1.5rem";
    background-color: lightslategray;
    -webkit-transform: rotateX(30deg);
  }
overflow: hidden;

Tosin en oo 100% toimiiko position relativen kanssa ja pääse nyt testaamaan.
 
Liittynyt
17.10.2016
Viestejä
14 643
Minulla on 100% viewport levyinen <div> elementti, korkeus 50%. Tämän sisällä haluaisin näyttää <svg> elementin, joka on diviä isompi, niin että grafiikkaa ei piirretä parentin boxin ulkopuolelle, vaan se leikkautuisi <div> elementin rajoihin. Kuinka tämä oikein pakotetaan?
Pääsetkö tällä vauhtiin:

Koodi:
.container {
  width: 70vw;
  height: 50vh;
  background: red url('https://www.svgrepo.com/show/433965/weary-face.svg') center no-repeat;
  background-size: 120%;
}
Arvot valittu että näet mitä tossa tapahtuu. Pointtina se, että käytä svg:tä divin taustana. Se on keskitetty, ei vuoda yli ja muutoinkin toi on aika näppärä tapa.
 
Viimeksi muokattu:
Liittynyt
05.02.2017
Viestejä
176
overflow: hidden;

Tosin en oo 100% toimiiko position relativen kanssa ja pääse nyt testaamaan.
Pääsetkö tällä vauhtiin:

Koodi:
.container {
  width: 70vw;
  height: 50vh;
  background: red url('https://www.svgrepo.com/show/433965/weary-face.svg') center no-repeat;
  background-size: 120%;
}
Arvot valittu että näet mitä tossa tapahtuu. Pointtina se, että käytä svg:tä divin taustana.
Kerkesin jo lopettaa, mutta jatkan illemmalla, kiitos jo etukäteen!
 
Liittynyt
05.02.2017
Viestejä
176
overflow: hidden;

Tosin en oo 100% toimiiko position relativen kanssa ja pääse nyt testaamaan.
Tämä ratkaisi ongelman. Tuli upea, kiitos!
HTML:
<body>
    
<div id="syntCanvasPlane">
    
    <div id="synthSkyPlane">

    </div>

    <div id="synthGroundPlane">
        <svg width="2000%" height="200%" id="synthGroundGrid" class="groundArea">
            <<defs>
                <pattern id="synthGroundGridLines" width="100" height="100"
                    patternUnits="userSpaceOnUse">
                    <path d="M 100 0 L 0 0 0 100"
                            fill="none" />
                </pattern>
            </defs>
    
            <<rect x="-50%" y="0%" width="200%" height="200%" fill="url(#synthGroundGridLines)"/>
            Sorry, your browser does not support inline SVG.
        </svg>
    </div>
</div>

</body>
CSS:
#synthGroundPlane {
    width: 100%; height: 50%;
    background-color: darkmagenta;
    position: absolute;
    bottom: 0%;
    left: 0%;
    overflow: hidden;
    -webkit-perspective: 500px;
    -webkit-perspective-origin: 50%;
  }

  #synthGroundGrid {
    position: relative;
    left: -50%;
    stroke: turquoise;
    stroke-width: "1.5rem";
    /* background-color: lightslategray; /* DEBUG */
    /* -webkit-transform: rotateX(30deg); */
    animation: flowing_ground_grid 3s linear infinite;
  }

  #synthGroundGridLines {
    stroke-width: 2.5rem;
  }

@keyframes flowing_ground_grid {
  from {
    -webkit-transform: translateY(-250px) rotateX(30deg) translateY(-10%);
  }
  to {
    -webkit-transform: translateY(-250px) rotateX(30deg) translateY(10%);
  }
}
On vain yllättävän raskas pyörittää, vanhan läppärin i3 iGPU:lla 30% rasitus o_O
 
Liittynyt
03.07.2018
Viestejä
347
Yleensä nettisivuille on lisätty toisella palvelimella oleva lomake tms. miniapplikaatio iframen avulla.
Mikä tähän olisi nykyaikainen tekniikka / tapa jos haluaisi vähän paremmin responsiivisen mitä iframe?
Kyseessä olisi erillisellä palvelimella hostattu vuejs lomake jonka pitäisi myös pystyä postaamaan tietoa palvelimelle ja se tulisi käyttöön useammalle eri sivustolle/domainiin
 
Liittynyt
21.10.2016
Viestejä
9 175
Yleensä nettisivuille on lisätty toisella palvelimella oleva lomake tms. miniapplikaatio iframen avulla.
Mikä tähän olisi nykyaikainen tekniikka / tapa jos haluaisi vähän paremmin responsiivisen mitä iframe?
Kyseessä olisi erillisellä palvelimella hostattu vuejs lomake jonka pitäisi myös pystyä postaamaan tietoa palvelimelle ja se tulisi käyttöön useammalle eri sivustolle/domainiin
Mikähän tässä on taustalla miksi noin pitäisi tehdä? Tietoturva tulee aika jyrkästi vastaan. Nykyaikainen tapa olisi se, että se toinen palvelin/palvelu tarjoaisi APIn, jolla voisi tietoja välittää. Tai sit ihan vain linkki ko. lomakkeeseen APIn uupuessa on myöskin selkeesti parempi ratkaisu tietämättä miksi ei olisi.
 
Viimeksi muokattu:
Liittynyt
18.10.2016
Viestejä
272
Yleensä nettisivuille on lisätty toisella palvelimella oleva lomake tms. miniapplikaatio iframen avulla.
Mikä tähän olisi nykyaikainen tekniikka / tapa jos haluaisi vähän paremmin responsiivisen mitä iframe?
Kyseessä olisi erillisellä palvelimella hostattu vuejs lomake jonka pitäisi myös pystyä postaamaan tietoa palvelimelle ja se tulisi käyttöön useammalle eri sivustolle/domainiin
En tiedä moderneista tavoista, sillä mielestäni tähän ei ole olemassa konventiota. Aiemmassa vastauksessa todettu, erillisen rajapinnan käyttö lienee loogisinta. Mutta jos se ei ole mahdollista, niin:

miten uuteen ikkunaan aukeava lomake, josta sitten postMessage APIa käyttäen kommunikaatio? Tämä voisi olla käyttäjällekin selkein vaihtoehto, tyyliin:
"avaa lomake (siirtyy ulkoiseen palveluun)" --> uusi ikkuna / välilehti, jossa lomake sijaitsee --> lomakkeen lähettäminen ja ikkunan sulkeminen --> isäntäikkuna kertoo lomakkeen lähteneen ja kiittää
 
Liittynyt
02.11.2016
Viestejä
1 176
Mulla on selainlisäosa, jossa browser actionissa, eli selaimen osoiterivin vieressä olevasta napista painamalla aukeavassa ikkunassa on buttoneita ja jos teksti on jossain liian pitkä ettei mahdu, niin sitten lyhennettäisiin ellipsisillä. Tämä toimii Firefoxissa ok, mutta Chromessa pisin teksti lyhennetään aina, vaikka se olisi lyhyt. Aika spesifi kysymys, en tiedä tekeekö kukaan muu täällä lisäosia. Tässä linkki lisäosaan, voi olla, ettei pelkästä koodista pysty päättelemään mikä on vialla. Redirect Link

HTML:
<!doctype html>
<html>
  <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width,initial-scale=1.0" />
    <link rel="stylesheet" type="text/css" href="popup.css" />
  </head>
  <body>
    <div id="redirections"></div>
    <script src="../common/browser-polyfill.js"></script>
    <script src="popup.js" type="module"></script>
  </body>
</html>
Buttonit tulevat tuonne #redirectionsiin.

CSS:
#redirections {
  text-align: center;
}

button {
  width: 100%;
  text-overflow: ellipsis;
  overflow: hidden;
  white-space: nowrap;
}

body.mobile button {
  height: 40px;
  margin-bottom: 5px;
}
JavaScript lisää buttonit tuonne.

Kuvat vielä miltä näyttää eri selaimissa.

chrome.pngfirefox.png
 
Liittynyt
03.07.2018
Viestejä
347
Mikähän tässä on taustalla miksi noin pitäisi tehdä? Tietoturva tulee aika jyrkästi vastaan. Nykyaikainen tapa olisi se, että se toinen palvelin/palvelu tarjoaisi APIn, jolla voisi tietoja välittää. Tai sit ihan vain linkki ko. lomakkeeseen APIn uupuessa on myöskin selkeesti parempi ratkaisu tietämättä miksi ei olisi.
Hain tässä sitä ajatusta että mitä olen mainospalveluiden koodeja katsonut, niin kohdesivuun lisätään ainoastaan .js tiedostoon viittaus ja ehkä yksi tyhjä div tietyllä id:llä. js sitten injektoi käyttöliittymän diviin ilman iframea..luulisin
mutta toimiiko tolllasessa esim post -metodi toiseen domainiin?
 
Liittynyt
02.11.2016
Viestejä
1 176
Mulla on selainlisäosa, jossa browser actionissa, eli selaimen osoiterivin vieressä olevasta napista painamalla aukeavassa ikkunassa on buttoneita ja jos teksti on jossain liian pitkä ettei mahdu, niin sitten lyhennettäisiin ellipsisillä. Tämä toimii Firefoxissa ok, mutta Chromessa pisin teksti lyhennetään aina, vaikka se olisi lyhyt. Aika spesifi kysymys, en tiedä tekeekö kukaan muu täällä lisäosia. Tässä linkki lisäosaan, voi olla, ettei pelkästä koodista pysty päättelemään mikä on vialla. Redirect Link

HTML:
<!doctype html>
<html>
  <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width,initial-scale=1.0" />
    <link rel="stylesheet" type="text/css" href="popup.css" />
  </head>
  <body>
    <div id="redirections"></div>
    <script src="../common/browser-polyfill.js"></script>
    <script src="popup.js" type="module"></script>
  </body>
</html>
Buttonit tulevat tuonne #redirectionsiin.

CSS:
#redirections {
  text-align: center;
}

button {
  width: 100%;
  text-overflow: ellipsis;
  overflow: hidden;
  white-space: nowrap;
}

body.mobile button {
  height: 40px;
  margin-bottom: 5px;
}
JavaScript lisää buttonit tuonne.

Kuvat vielä miltä näyttää eri selaimissa.

JavaScriptillä sain levennettyä popupia, olisin vain halunnut löytää puhtaan CSS-keinon, mutta käy se noinkin.
 

Vee

Liittynyt
27.10.2016
Viestejä
351
Onko kellään kokemusta tuosta googlen kirjautumisesta omalla sivulla? (Google Cloud Platform)

Se on toiminu iohan hyvin mutta loppuvuodesta se ei ole päästänyt enään kuin index.php sivulle. Eli kirjautuminen ei toimi toisella sivulla vaan herjaa
Forbidden
You don't have permission to access this resource.


En millään keksi mistä lähteä vikaa etsimään, olen googlen consolissa käynyt laittamasssa mm. Authorized redirect URIs mutta ei auta
 
Liittynyt
19.10.2016
Viestejä
1 924
Nonih, apua taas kaipaillaan ja tämä ketju ei ole ikinä tuottanut pettymystä. Eventghostilla yritän lähettää https-urlia ajaakseni automaatiota, mutta en tiedä mitä Eventghostin python script komennoksi pitää kirjottaa.

jos url on vaikkapa https://kylonkivaa.com , niin mitä tuohon ruutuun pitää naputella.
1673461727759.png


Tätä jo yritin kun kaivoin eventghostin hajonneelta foorumilta välimuistista keskusteluja:

import urllib; urllib.urlopen('https jotain jotain jotain')

Mutta ei toimi.
 
Toggle Sidebar

Uusimmat viestit

Statistiikka

Viestiketjut
239 267
Viestejä
4 189 375
Jäsenet
70 716
Uusin jäsen
ileesu

Hinta.fi

Ylös Bottom