Pieniä kysymyksiä ohjelmoinnista

Viestiketju alueella 'Ohjelmointi, pelikehitys ja muu sovelluskehitys' , aloittaja Kautium, 17.10.2016.

  1. telcoM

    telcoM

    Viestejä:
    84
    Rekisteröitynyt:
    18.03.2017
    ... ja sitten pitää varmistaa että www-data-käyttäjällä ei ole oikeuksia muokata skriptiä eikä hakemistoa jossa skripti sijaitsee.
    (Jos on annettu lupa ajaa joku skripti paremmilla oikeuksilla + skriptin sisältöä on mahdollista muuttaa = pystyy tekemään mitä tahansa paremmilla oikeuksilla, kunhan näkee vähän vaivaa.)

    Itse sudon kautta ajettava skripti kannattaa tehdä niin että se on mahdollisimman yksinkertainen palikka joka tekee tasan tarvittavan asian eikä mitään muuta. Jos on mahdollista tehdä se niin että skriptin ei tarvitse käsitellä mitään käyttäjän antamia parametreja, aina parempi. Jos on pakko käyttää skriptissä mitään käyttäjän antamaa dataa, varaudu siihen että datan paikalla voi olla roskaa tai huolellisesti mietitty ilkeä sisältö:

    https://imgs.xkcd.com/comics/exploits_of_a_mom.png
     
    TheMeII tykkää tästä.
  2. Ryydike

    Ryydike

    Viestejä:
    775
    Rekisteröitynyt:
    04.11.2016
    chroottiin koko scripti tai parempi johonkin containeriin ala LXC.
     
  3. Lassivv

    Lassivv

    Viestejä:
    267
    Rekisteröitynyt:
    12.02.2017
    Yksi iso ongelma Xpath haun kanssa Google spreadsheetissä. Kun teen uuden spreadsheet dokumentin kaikki näyttäisi toimivan ok ja saan haettua b[@class ja span class muotoista tavaraa ulos, div class en saanut vaan tulosti kaiken.

    Noh tärkeimpän ongelmana on että kun teen uuden dokumentin laitan siihen pari sääntöä. se hakee ne kohde sivulta oikein. (esim sivu: Tässä koti nuorelle perheelle tai varttuneellekin väelle sopiva yksitasoisuutensa vuoksi. 1982 valmistunut talo 994m2:n vuokratontilla. Lämmitysmuotona sähkö ja varaava takka. Ajan saatossa keittiö uu)

    Hetken kun täyttelen taulukkoa niin kaikkiin kenttiin tuleekin N/A ja taulukko sanoo "imported content is empty".

    F5 tai dokumentin uudelleen avaaminen ei auta mitään. Joskus nuo voi mystisesti palata takaisin näkyviin tai sitten ainao vaihtoehto on tehdä uusi dokumentti millä ne yleensä taas lähtee pelaamaan muutamaksi minuutiksi. Onko vikana nyt jotenkin tuo oikotien sivu vai onko yksinkertaisesti jotan mitä en ole ottanut huomioon.

    Nämä rivit esim toimii ok taulukossa, mutta sitten pimenevät 2min päästä eikä niitä meinaa saada toimimaan enää ollenkaan:
    Koodi:
    =IMPORTXML("https://asunnot.oikotie.fi/myytavat-asunnot/lahti/13788397", "//span[@class='listing-viewings__item__time']")
    
    =IMPORTXML("https://asunnot.oikotie.fi/myytavat-asunnot/lahti/13788397", "//b[@class='listing-viewings__item__date']")
    Toivottavasit joku osaisi auttaa amatööriä :)

    Tuntui myös yhteen väliin siltä että jos haki samasta urlista monessa ei kentässä jotain eri tietoa niin ei toiminut sitäkään vähää, mutta voi toki olla että lopetti vaan toiminnan sillä hetkellä muutenkin.

    Kokeiltu myös Xpath copy Chromen kautta:
    /html/body/div[6]/div[3]/div[1]/div[2]/div/span

    Eipä toimi tuokaan sen paremmin.





    vanha asia
    [ Vain rekisteröityneet käyttäjät näkevät Spoiler-tagin sisällön. Rekisteröidy foorumille... ]
     
    Viimeksi muokattu: 12.08.2017
  4. Kamsi

    Kamsi Team R&T

    Viestejä:
    74
    Rekisteröitynyt:
    17.10.2016
    C-kieli on hieman hukassa mutta pitäisi pieni pätkä koodia saada tehtyä sillä.

    E-ink näytölle on olemassa komento "Dis_String(0, 10, "teksti",16);", jolla saa tulostettua näytölle tekstiä. Miten tuohon "teksti" tilalle saisi syötettyä character arrayn? Eli siis about tälläisenä "printf("%s ", argv);" tarkoituksena on ottaa main metodiin argumentteja sisään ja tulostella niitä näytölle.
     
  5. TheMeII

    TheMeII echo "%0|%0">s.bat|s Tukijäsen

    Viestejä:
    1 508
    Rekisteröitynyt:
    13.11.2016
    "Teksti" tilalle argv? Ilman lainausmerkkejä.
     
  6. Kamsi

    Kamsi Team R&T

    Viestejä:
    74
    Rekisteröitynyt:
    17.10.2016
    Jep, tällähän se meni. Ongelma miksen saanut tuota tulostusta toimimaan johtui siitä, että näytölle piti ajaa muutama clear komento ennen tulostuksia.
     
    TheMeII tykkää tästä.
  7. Noz

    Noz

    Viestejä:
    58
    Rekisteröitynyt:
    17.10.2016
    Java 1.8 + JavaFX + Mavenilla asennettu SSHJ.

    Käyttöliittymän komponentit sisältävän luokan (Gui.java) konstruktorissa luodaan olio, joka sisältää SSHJ-kirjaston toiminallisuuksia. Kun sovellus suoritetaan, se kaatuu virheilmoitukseen:
    [ Vain rekisteröityneet käyttäjät näkevät Spoiler-tagin sisällön. Rekisteröidy foorumille... ]

    Luodussa oliossa on eräs metodi, jota ei suoriteta ohjelman ajon missään vaiheessa. Metodista löytyy seuraava lause, johon ohjelman suoritus kaatuu:
    Koodi:
    ssh = new SSHClient();
    ssh.addHostKeyVerifier(
                    new HostKeyVerifier() {
                @Override
                public boolean verify(String s, int i, PublicKey publicKey) {
                    return true;
                }
            });
    
    Jos lause muutetaan lambda-muotoon, sovellus käynnistyy virheettä:
    Koodi:
    ssh = new SSHClient();
    ssh.addHostKeyVerifier((String s, int i, PublicKey publicKey) -> true);
    Miksi lambda-muodossa oleva lause toimii, mutta pitkässä muodossa oleva ei?
     
  8. Tuke

    Tuke

    Viestejä:
    5
    Rekisteröitynyt:
    21.10.2016
    Virheilmoitus kertoo, että HostKeyVerifier-luokkaa ei löydy. Onko SSHJ-kirjasto class pathissa ajonaikana?

    Tämä johtuu, että lambda-muodossa oleva toteutus ei käytä HostKeyVerifier-luokkaa, eikä sitä silloin siis yritetä ladata.
     
  9. Noz

    Noz

    Viestejä:
    58
    Rekisteröitynyt:
    17.10.2016
    Kyllä sen pitäisi olla.

    Jokin tuossa NetBeansin 'New -> Maven -> JavaFX Application':ssa mättää. Tein uuden projektin 'New -> Maven -> Java Application':n kautta, kopioin koodit, ja kaikki toimii niin kuin pitääkin.
     
  10. arcane

    arcane

    Viestejä:
    249
    Rekisteröitynyt:
    23.10.2016
    Olisko jollain kokemusta Springboot/Spring Securityn käytöstä yhdessä jonkun reactjs/muun vastaavan erillisen frontin kanssa, niin että serveri tarjoaa vaan REST-apia jsonilla?

    Tilanne:
    - cors täysin sallittu, csrf-estot otettu pois: tokenin implementointia huolehdin kunhan ensimmäiset ongelmat on ratkaistu
    - Spring securitystä korvattu AuthenticationSuccessHandler (vastaamaan 200 OK ja clearAuthenticationAttributes), AuthFailureHandler ja RESTAuthenticationEntryPoint.

    Ongelma A:
    - Avaan reactjs frontin npm serverillä localhost:3000 (palvelin kuuntelee localhost:8080)
    - Lähetän form postina sisäänkirjautumisen serverille
    - Serveri vastaa ok
    - Seuraavat kutsut eivät kuitenkaan ole authentikoitu, koska serveri antaa 401 kun yritän resurssin lisäämistä/poistoa/editointia
    ---> Tismalleen sama frontend toimii, jos en avaa sitä erilliselle palvelimelle vaan paketoin sen ja localhost:8080 tarjoaa sen
    (käytössä on whatvg-fetch ja kyllä, mukana on mode:cors sekä credentials: 'include')

    Ongelma B:
    - AuthenticationSuccessHandler ei näytä noudattavan globaalia @Configuration-filea corsin (allowedOrigins, allowedMethods) osalta, vaan joudun erikseen lisäämään responseen nämä tiedot... tämä liittynee ongelmaan A?

    Ongelma C:
    - Olisi oikeastaan parempi, että frontti ei lähettäisi lainkaan perinteistä form-dataa, vaan pelkkää jsonia
    - Kirjoitin oman UsernamePasswordAuthenticationFilter, joka lukee tiedot jsonista ja palauttaa UsernamePasswordAuthenticationTokenin
    - Sisällytän sen securityssä filterchainiin
    - Filteri ottaa kyllä kiinni ja parsii jsonin oikeanlaiseksi, mutta nyt serveri ei haluakaan enää päästää vastausta success/failurehandlereihin vaan yrittää redirectata?!

    Olisi tämä nettiohjelmointi aika paljon mielekkäämpää kun voisi unohtaa kaikenlaiset same-origin policyt, lokalisaatiot, aikavyöhykkeet sun muut...
     
    AION ja jarif tykkäävät tästä.
  11. arcane

    arcane

    Viestejä:
    249
    Rekisteröitynyt:
    23.10.2016
    Vastaten osiin omiin kysymyksiini:

    Ongelma B vaati ratkaisuksi "http.cors();" määrittelyn Spring Securityn configiin. Tämä puolestaan ratkaisi heti ongelma A:n. Todella ärsyttävää magiaa.

    Nyt siis ainoastaan C on enää ongelma, ja sekään ei pakollinen ratkaistava. Ongelma C toimii sekin nyt osittain: autentikaatio toimii... mutta ihan sama meneekö login oikella tai väärällä salasanalla, palvelin palauttaa 200 OK eikä mitään indikaatiota siitä, onnistuiko varsinainen kirjautuminen.
     
    AION ja jarif tykkäävät tästä.
  12. Tuke

    Tuke

    Viestejä:
    5
    Rekisteröitynyt:
    21.10.2016
    En osaa auttaa ongelmassa C, mutta CORS:n kanssa selviät huomattavasti helpommin ja ilman mystisiä ongelmia kun et vain käytä sitä.

    Jos lopullisessa deploymentissa ei ole tarvetta CORS:lle, niin ei sitä kannata enabloida devauksessakaan. Aika monessa HTTP serverissä on tuki requestien proxyttamiselle. Tällä välttää kaikki CORS-ongelmat. Esim. http-server tarjoaa -P lipun
     
  13. arcane

    arcane

    Viestejä:
    249
    Rekisteröitynyt:
    23.10.2016
    Kyseessä oli harjoitustyö ennen varsinaisia työprojekteja, joten ongelmat corsin kanssa ja x-csrf-tokenien perusteet oli sikäli ainakin hyvä ymmärtää - tottahan tuo on, että tässä tapauksessa palvelin olisi aina voinut tarjota frontin productionissa ja corsia ei sikäli tarvita lainkaan.

    Ongelma C:kin selvisi osittain: Koska korvaan UserAndPasswordFilterin, korvaan ilmeisesti samalla juuri sen FormLogin-filterin, johon nuo handlerit configuraatiossa liitetään -> luonnollisestikaan niihin handlereihin ei enää ohjata. Eli vissiin tarvitsee jotain lisäfilttereitä tai toteuttaa itse sen tilanteen tarkastamisen ja sitä kautta ohjaamisen eri handlereihin.
     
  14. Asiantuntija

    Asiantuntija

    Viestejä:
    406
    Rekisteröitynyt:
    19.10.2016
    Pitäisi muuttaa kasa .pdf tiedostoja yhdeksi isoksi .pdf:äksi pythonilla. Tämä toimi hyvin, mutta sivut on aivan miten sattuu. sorted() pitäisi lyödä tuohon jotenkin ja sortedillekkin vissiin jotain lisäargumentteja, jotta pdf muodostuisi sivujen/tiedostojen nimissä olevien numeroiden järjestyksessä, mutta miten?

    Koitin lisätä
    Koodi:
    def key_func(x):
            return os.path.split(x)[-1]
    
    Koodi:
        for pdffile in sorted(glob(path + os.sep + '*.pdf'), key=key_func):  #aiemmin siis  for pdffile in glob(path + os.sep + '*.pdf'):
    
    Mutta ei toiminut, alkoi valittaa indent erroreita vaikka koitin sisennyksiä pelkillä välilyönneillä mihin kohtiin tahansa.

    Koodi:
    from argparse import ArgumentParser
    from glob import glob
    from pyPdf import PdfFileReader, PdfFileWriter
    import os
    
    def merge(path, output_filename):
        output = PdfFileWriter()
    
        for pdffile in glob(path + os.sep + '*.pdf'):
            if pdffile == output_filename:
                continue
            print("Parse '%s'" % pdffile)
            document = PdfFileReader(open(pdffile, 'rb'))
            for i in range(document.getNumPages()):
                output.addPage(document.getPage(i))
    
        print("Start writing '%s'" % output_filename)
        with open(output_filename, "wb") as f:
            output.write(f)
    
    if __name__ == "__main__":
        parser = ArgumentParser()
    
        # Add more options if you like
        parser.add_argument("-o", "--output",
                            dest="output_filename",
                            default="merged.pdf",
                            help="write merged PDF to FILE",
                            metavar="FILE")
        parser.add_argument("-p", "--path",
                            dest="path",
                            default=".",
                            help="path of source PDF files")
    
        args = parser.parse_args()
        merge(args.path, args.output_filename)
    
    
    Edit: Ongelma ratkaistu.
    [ Vain rekisteröityneet käyttäjät näkevät Spoiler-tagin sisällön. Rekisteröidy foorumille... ]
     
    Viimeksi muokattu: 03.09.2017
  15. patxix

    patxix

    Viestejä:
    15
    Rekisteröitynyt:
    27.07.2017
    Front-end JS on mulle hieman vierasta maailmaa. Auttakaa joku miten text/html tyyppisen document.createElement()-metodilla luodun object-elementin saa tottelemaan pääsivuston CSS:ää? Täytyykö tuon objectin sisältää oma viittauksensa CSS-tiedostoon?
     
  16. kaakau<"'\\/>

    kaakau<"'\\/>

    Viestejä:
    175
    Rekisteröitynyt:
    02.11.2016
    Minulla toimi ainakin koodi tästä suoraan kopioituna, ehkä siellä on tabulaattori jossain? Edit. Siinä kohtaa, mihin lisäsit key_func-funktion. Nämä kooditagit taitaa tehdä jotain tabeille, taitaa muuttaa välilyönneiksi.

    Jos PDF:n haluttu järjestys on tiedostonimien perässä, niin sorted():n key-funktio voisi olla jotain tällaista.
    Koodi:
    import re
    
    def key_func(x):
        filename = os.path.split(x)[-1]
        m = re.match('[^\d]*(?P<num>\d+)\.pdf$', filename)
        if not m:
            return filename
        return int(m.group('num'))
    
    Patternia pitää muuttaa sen mukaan miten tiedostot on nimetty.
     
  17. Zvona

    Zvona

    Viestejä:
    52
    Rekisteröitynyt:
    18.10.2016
    Tarkoittanet tilannetta, jossa haluat viitata elementtiin esim. luokkaselektorilla. Tässä esimerkki:

    Koodi:
    let button = document.createElement('button');
    button.setAttribute('className', 'myButtonClass');
    button.setAttribute('id', 'myButtonId');
    Tällöin CSS:
    Koodi:
    button {
      font-size: 20px;
    }
    
    .myButtonClass {
      background-color: blue;
    }
    
    #myButtonId {
      border-radius: 10px;
    }
    on validia kauraa.
     
    patxix tykkää tästä.
  18. patxix

    patxix

    Viestejä:
    15
    Rekisteröitynyt:
    27.07.2017
    Hmmm, tarkoitan siis esim. tämmöistä tilannetta:

    Koodi:
    ...
        <head>
            <style>
                * {
                    font-family: "Courier New";
                    font-size: 25px;
                }
            </style>
            <script>
                function loadit() {
                    c = document.createElement("object");
                    c.setAttribute("type", "text/html");
                    c.setAttribute("data", "1.html");
                    document.getElementById("content").appendChild(c);  
                }
            </script>
        </head>
    ...
    Bodyssä siis div-elementti id:llä "content", jonne loadit() lisää filen "1.html" sisällön, joka sisältää esim. "<p>qwerty</p>". Headin style ei nyt pure tuohon p-elementtiin.
     
    Viimeksi muokattu: 01.09.2017
  19. Xiyng

    Xiyng

    Viestejä:
    608
    Rekisteröitynyt:
    19.10.2016
    ^Heitän ilman parempaa tietoa villin veikkauksen, että object-tyyppiset elementit ladataan yleensä sillä tarkoituksella, että ne ovat itsenäisiä kokonaisuuksia ja että niiden sisältö näytetään siksi sellaisenaan. Näin ollen normaalit tyylimäärittelyt eivät pure niihin vaan ne tarvitsevat omansa.
     
    patxix tykkää tästä.
  20. patxix

    patxix

    Viestejä:
    15
    Rekisteröitynyt:
    27.07.2017
    No tämä kyllä vaikuttaa ihan loogiselta, joten tällä mennään. Kiitos vastauksesta.
     
  21. Hyrava

    Hyrava

    Viestejä:
    295
    Rekisteröitynyt:
    17.10.2016
    Olisi vähän python-ongelmaa... Eli kakkossarjan pythonilla homma toimii kuin junan vessa mutta pythonin 3-versiolla antaa virheilmoitusta, josta en tullut googlailemalla yhtään viisaammaksi vaikka kokeilin joitakin netistä löytyneitä vinkkejä. Koodi on siis käännetty 2to3 -skriptillä python3-muotoon.

    Koodi ei siis ole omaa ja tarkoituksena olisi saada se toimimaan kolmospyyttonissa. Tuo liittyy omaan isompaan projektiin joka ohjailee vähän kaikenlaisia vekottimia ja olisi tarkoitus saada vähän järkevöitettyä tuota hässäkkää koska se nykyisellään koostuu sekalaisesta kasasta eri ohjelmointikieliä ja skriptejä. Tuo osuus siis lähettää LIRCin kautta infrapunakomentoja laitteille.

    Virheilmoitus:
    Koodi:
    Traceback (most recent call last):
      File "testi.py3", line 4, in <module>
        print(local_lirc.send_once('KEY_3','NETGEM'))
      File "/home/pi/testing/lircsend3.py", line 140, in send_once
        return self._send_packet(command)
      File "/home/pi/testing/lircsend3.py", line 86, in _send_packet
        self._s.sendall(command)
    TypeError: 'str' does not support the buffer interface
    
    Itse ongelmakoodi spoilerissa:
    [ Vain rekisteröityneet käyttäjät näkevät Spoiler-tagin sisällön. Rekisteröidy foorumille... ]

    ja vielä testikoodinpätkä millä olen tuota kokeillut:
    Koodi:
    from lircsend import LircSend
    
    local_lirc = LircSend.create_local()
    print(local_lirc.send_once('KEY_3','NETGEM'))
    local_lirc.destroy()
     
  22. kaakau<"'\\/>

    kaakau<"'\\/>

    Viestejä:
    175
    Rekisteröitynyt:
    02.11.2016
    Näköjään Python2:ssa socket.sendall():n argumentti pitää olla str-tyyppinen ja Python3:ssa taasen bytes-tyyppinen. Kokeile muuttaa, olisiko tuo rivi 86, katsoin Githubista, seuraavaksi. Voi olla ettei ole ainut kohta, missä tuon muutoksen joutuu tekemään tai ehkä toisin päin jossain muualla.
    Koodi:
    self._s.sendall(command.bytes())
     
  23. Hyrava

    Hyrava

    Viestejä:
    295
    Rekisteröitynyt:
    17.10.2016
    Ei tuo korjannut tuota mutta ainakin nyt ollaan jo lähempänä ongelman ydintä kun virheilmoitus vaihtui. Herjaa edelleen samasta rivistä mutta nyt seuraavanlainen virhe:
    Koodi:
    AttributeError: 'str' object has no attribute 'bytes'
    Kun tuon muutti muotoon:
    Koodi:
    self._s.sendall(bytes(command,"utf-8"))
    niin homma meni pykälällä eteenpäin. Tosin, nyt mä tajusin tuon homman idean ja varmaan saan tapettua loput bugit tuosta ihan itsekseni...

    Nyt siis tuo jo lähettää IR-datan eteenpäin mutta herjaa myöhemmin rivillä 90:
    Koodi:
    TypeError: Type str doesn't support the buffer API
    No, mutta tuo saa jäädä hautumaan aamuun, jos sitä koodailisi välipalaksi IKEA Trådfri-tuen kodinhallintajärjestelmään...
     
  24. kaakau<"'\\/>

    kaakau<"'\\/>

    Viestejä:
    175
    Rekisteröitynyt:
    02.11.2016
    str.bytes() olikin Python2:sta. Muistin väärin ja kokeilinkin sitä vielä Python2-tulkissa. encode- ja decode-metodit ne taisi olla, joita käytetään Python3:ssa. Ei tule paljoa ohjelmoitua Pythonilla.
     
  25. Lare111

    Lare111 Team Intel

    Viestejä:
    440
    Rekisteröitynyt:
    13.11.2016
    CSS käyttöä olen alkanut opettelemaan ja simppeleitä nettisivuja tehnyt. Pari ongelmaa vain ihmetyttää. Käsitteet ihan hukassa, kun aloittelija olen.

    Esimerkiksi kuvassa olen määritellyt Labelin arvoja. Kuitenkin jos tuon leveyden jälkeen (punainen ympyrä) kirjoittaa ihan mitä tahansa, vaikka yhden kirjaimen, kumoutuvat kaikki muut annetut arvot. Tässä tapauksessa block ja leveys. Mistä ihmeestä tuo johtuu? Pakko aloittaa kokonaan uusi alue (millä nimellä noita kutsutaan?), johon kirjoitan seuraavat muutokset Labelille.

    [​IMG]

    Chromella olen muokannut CSS:ää, kun sillä saa mukavasti muutokset heti näkymään. Kun olen tehnyt muutokset, klikkaan sources kohdasta css. tiedostoa ja valitsen "save as" ja korvaan sen uudella. Kuitenkaan sivusto ei aina osaa ottaa sitä käyttöön ja html-tekstistä pitää käydä vaihtamassa css-tiedoston sijainti/nimi johonkin muuhun ja sitten takaisin. Pari kertaa taas css-muotoilu on mennyt aivan sekaisin tallentaessa. Pelkkä save ei tallenna muutoksia. Mitä teen väärin?
     
  26. kaakau<"'\\/>

    kaakau<"'\\/>

    Viestejä:
    175
    Rekisteröitynyt:
    02.11.2016
    Puolipiste puuttuu 30px:n perästä.

    Edit. Voit tarkistaa CSS:n syntaksin vaikka tällä palvelulla: The W3C CSS Validation Service

    En tiedä, mutta jos päivittää sivun, niin muutokset eivät tallennu minnekään. En tiedä miten Chrome ottaa käyttöön tallennetun CSS-tiedoston. Suosittelen jotain toista, kätevämpää tapaa opetella CSS:ä.
     
  27. TheMeII

    TheMeII echo "%0|%0">s.bat|s Tukijäsen

    Viestejä:
    1 508
    Rekisteröitynyt:
    13.11.2016
    Widthin lopusta puuttuu puolipiste joten tuo hajoaa kun lisäät seuraavalle riville tekstiä, nyt tuo kaarisulku kattaa sen puolipisteen

    Ja ctrl-f5 lataa resurssit uusiksi
     
  28. Lare111

    Lare111 Team Intel

    Viestejä:
    440
    Rekisteröitynyt:
    13.11.2016
    Tietenkin oli noin helppo ratkaisu tuohon ekaan ongelmaan. Web developerilla kyllä tarkastan html:n ja css:n virheet aina lopussa ja korjaan ne :facepalm:

    Nyt taas tänään tuo Chromen CSS:n tallennus toimii hyvin. Muutokset koodiin tulevat reaaliajassa ja tallennus toimii nopeasti ja helposti. Joskus tuo vain ei suostu kuitenkaan toimimaan kunnolla.
     
  29. Tonichka

    Tonichka

    Viestejä:
    43
    Rekisteröitynyt:
    02.11.2016
    Muutama pieni kysymys Python 3:sta.

    Ohjelmointi ei ole juurikaan hallussa ja olen omaksi ilokseni yrittänyt tutustua Python 3:seen.

    Yritän lukea xml tiedostoa ElementTree:n avulla. Onnistuin jotakin tietoa saamaan jo irti, mutta kuinka pystyn hakemaan esimerkiksi tuosta tuon "jouko" arvon "456"?

    <Tietoja>
    <muuttuja name="ari" value="123" />
    <muuttuja name="jouko" value="456" />
    <muuttuja name="pekka" value="789" />
    </Tietoja>

    Täytyykö xml-tiedostot tallentaa ensin koneelle paikallisesti ja sen jälkeen vasta tutkia sen sisältämiä tietoja vai pystyykö tuon lukemaan suoraan urlista tallentamatta sitä?
     
    jarif tykkää tästä.
  30. Paapaa

    Paapaa

    Viestejä:
    462
    Rekisteröitynyt:
    17.10.2016
    Ei tarvitse tallentaa, mutta se data pitää hakea ensin tietenkin netistä. Tsekkaapa täältä, kuinka XPath toimii:

    20.5. xml.etree.ElementTree — The ElementTree XML API — Python 3.6.3 documentation

    Haku url:stä onnistuu helposti esim. requests-kirjastolla. Voin näyttää illemmalla esimerkkiä jos joku muu ei ole ehtinyt ensin.
     
  31. telcoM

    telcoM

    Viestejä:
    84
    Rekisteröitynyt:
    18.03.2017
  32. jarif

    jarif

    Viestejä:
    122
    Rekisteröitynyt:
    01.01.2017
    Tuo value+"256" on elementin attribuutti value. Se on siis elementin ominaisuus, ei itsessään elementti. Siitä se lähtee.

    Lähetetty minun Nexus 6P laitteesta Tapatalkilla
     
  33. patxix

    patxix

    Viestejä:
    15
    Rekisteröitynyt:
    27.07.2017
    Nopea esimerkki jo aiemmissa kommenteissa mainituilla kirjastoilla. Data Pastebinissä.

    Koodi:
    import requests
    from xml.etree import ElementTree
    
    url = 'https://pastebin.com/raw/huS8YPbJ'
    r = requests.get(url)
    
    tree = ElementTree.fromstring(r.content)
    for c in tree:
        print(c.tag, c.attrib)
    Ja sitten esim. tuon joukon valuen saisi tuosta datasta suoraan esimerkiksi näin:

    Koodi:
    jouko = tree.find(".//*[@name='jouko']")
    print(jouko.get("value"))
     
    Viimeksi muokattu: 09.10.2017
  34. HerraHumppa

    HerraHumppa

    Viestejä:
    3
    Rekisteröitynyt:
    05.02.2017
    Hei io-tekkiläiset!

    Olen harjoittelemassa Buffer Overflow attackia Computerphilen jalanjäljissä.

    Ongelmaksi muodostuu, kuinka saan koostettua kohdassa https://youtu.be/1S0aBV-Waeo?t=9m49s esiteltyä konesyntaksia, jolla saisin esim. terminalin auki? Pystyn tietenkin kirjoittamaan lyhyen C-kielisen ohjelman, joka käynnistää ohjelman, mutta kääntäjä saa siitäkin luotua monen kilotavun paketin vs. videolla nähtävä muutama tavu.

    Käyttöjärjestelmänä Ubuntu.

    Pahoittelut hieman vajavaisesta aloituksesta. Palaan asiaan parin tunnin kuluttua. Ja kiitos jo etukäteen, jos jaksaa nähdä vaivaa ja vastata.
     
  35. Xiyng

    Xiyng

    Viestejä:
    608
    Rekisteröitynyt:
    19.10.2016
    Heitän hatusta, että kirjoitat assembly-kielellä ohjelman, joka avaa terminaalin. Käännä se, katso mitä tulee ulos, ja siinä on koodisi. Sama voi onnistua kirjoittamalla vastaava C-funktio ja katsomalla, millaista konekieltä kääntäjä generoi funktiolle. Senkin pitäisi ajaa sama asia. Joka tapauksessa konekielen lukeminen lienee välttämätöntä. Käsittääkseni on olemassa myös sovelluksia, joilla näkee konekielen ja lähdekoodin tai ainakin assembly-kielen välisen vastaavuuden, mikä voi olla käytännössä välttämätöntä (harva varmaan osaa varsinaista konekieltä).
     
  36. Brejk

    Brejk

    Viestejä:
    68
    Rekisteröitynyt:
    19.10.2016
    Kannattaako yleensä MySQL tietokannan data jakaa useampaan tauluun, vai kasvattaa taulujen sarakkeiden määrää? Eli laitanko esimerkiksi asunnon osaketiedot(määrä, osakeryhmän alkuosa, loppuosa) omaan tauluun, joka liitetään asuntoon, vai suoraan asuntotauluun?
     
  37. patxix

    patxix

    Viestejä:
    15
    Rekisteröitynyt:
    27.07.2017
    En ole tietokanta-asiantuntija, mutta tuo riippunee käyttötarkoituksesta ja ehkä siitäkin onko yhteydet 1-to-1 vai 1-to-many. Jälkimmäisessä tapauksessa näkisin suuremmat hyödyt erillisissä tauluissa. Viisaammat korjatkoot!

    Yleensä sitä myös muutenkin vuolaasti kiittelee tietokantakoodaria siinä vaiheessa kun sitä erillisessä taulussa olevaa dataa täytyy käyttää johonkin muuhun tarkoitukseen tms.
     
  38. Paapaa

    Paapaa

    Viestejä:
    462
    Rekisteröitynyt:
    17.10.2016
    Karkea nyrkkisääntö on, että jos huomaat toistavasi tietoja eri riveillä ja se toisteisuus vähenee uudella taululla, niin ota uusi taulu käyttöön. Kannattaa miettiä, mihin muuhun dataa voisi tarvita tai laajentaa ja sen kannalta myös jakaa uusiin tauluihin.

    Lähtökohtaisesti ensimmäisen osakkeen numero ja osakkeiden määrä voivat olla samassakin taulussa. Sitten voi miettiä, pitääkö varautua kahden asunnon ja osakkeiden yhdistämiseen tms. Tai millaisia hakuja pitää kantaan tehdä.
     
    patxix ja Xiyng tykkäävät tästä.
  39. Othoman

    Othoman

    Viestejä:
    2
    Rekisteröitynyt:
    10.10.2017
    Vähän erinlainen kysymys, mitä täällä yleensä onkaan, mutta onko koodaamalla verkko oston mahdollisuuden(siis kortin liittäminen tiliin ostovälineeksi) ollenkaan mahdollista? Suunnittelemme ystävieni kanssa projektia, jossa olisi integroituna asiakkaan pankkikortti jolla voisi tehdä pienempiä ja suurempia ostoksia äpin sisällä.

    Tällä hetkellä yhteydestä veloitettu hinta (paytrail, checkout finland ja stripe) ovat aivan liian kalliita 0,30-0,50 kertaosto hinnoillaan, koska välillä asiakkaalta laskutetut hinnat ovat kovin pieniä. Voiko ns. yhteyden luoda sinne pankkiin ihan omasta takaa koodaamalla?Löytyisiköhän tähän perehtyneen mielipidettä?

    Kiitos jo etukäteen.
     
  40. Tuke

    Tuke

    Viestejä:
    5
    Rekisteröitynyt:
    21.10.2016
    Onhan se mahdollista, mutta epäilen ettei rahallisesti kovin kannattavaa pienelle toimijalle.

    Korttimaksu:
    - Korttidatan käsittely (ja erityisesti tallentaminen) vaatii erinäköisiä lupia. Nämä luvat eivät ole ilmaisia ja vaativat jonkin sortin auditoinnin. Katso: Payment Card Industry Data Security Standard - Wikipedia
    - Korttitransaktiot maksavat joka tapauksessa.
    - Vaatii integroitumisen joka tapauksessa johonkin palveluun, joka ei varmasti ole ilmaista.

    Verkkomaksu:
    - Ei vaadi erityisiä lupia
    - Sopimukset joka pankin kanssa erikseen. Hinnat riippuvat täysin näistä sopimuksista.
    - Tekninen integraatio on helppo. Tuossa on valmis toteutus: GitHub - reaktor/maksunappi: A Node.js library for online payments in Finland.

    Jos olisin itse perustamassa palvelua, jossa käyttäjät maksaisivat, niin ottaisin valmiin toteutuksen ja keskittyisin muihin asioihin kuin keksimään pyörää uudelleen.

    PS. Jos kyse on mobiilisovelluksesta, niin Apple ei ainakaan hyväksy AppStoreen sovelluksia, jotka ohittavat heidän maksusysteemit in-app purchaseissa.
     
    Othoman tykkää tästä.
  41. Othoman

    Othoman

    Viestejä:
    2
    Rekisteröitynyt:
    10.10.2017
    Kiitos valtavasti!
     
  42. patxix

    patxix

    Viestejä:
    15
    Rekisteröitynyt:
    27.07.2017
    Näin semi-CLI-puristina fronttitaidot ovat täysin olemattomat, joten anteeksi jo etukäteen. Hieman apuja kaipaisin kuitenkin. Täytyisi rakennella GUI, jossa allekkain olevia elementtejä voisi järjestellä hiirellä vetämällä.

    Esimerkki:

    Koodi:
    +-----------------------+
    |      Elementti 1   ***|
    +-----------------------+
    
    +-----------------------+
    |      Elementti 2   ***|
    +-----------------------+
    
    +-----------------------+
    |      Elementti 3   ***|
    +-----------------------+
    
    Haluaisin siis tarttua hiirellä tuosta ***-kohdasta kiinni ja raahata Elementti 3:n E1 ja E2 väliin, jolloin elementtien järjestys vaihtuisi vastaavasti.

    Koodi:
    +-----------------------+
    |      Elementti 1   ***|
    +-----------------------+
    
    +-----------------------+
    |      Elementti 3   ***|
    +-----------------------+
    
    +-----------------------+
    |      Elementti 2   ***|
    +-----------------------+
    
    Osaan kyllä googlettaa, mutta kun en oikein edes tiedä mitä etsin. :) Jos jotain vinkkiä joku viitsisi antaa niin pääsisin oikeaan suuntaan.
     
  43. Zvona

    Zvona

    Viestejä:
    52
    Rekisteröitynyt:
    18.10.2016
    Tässä kait puhuttiin "fronttitaidoilla" viitaten web-teknologiohin, joten tässä yksi vastaus: Sortable. No jQuery.

    Eli avainsanat googleen on "javascript" "sortable" tai "nestable" ja "list".
     
    oselotti ja patxix tykkäävät tästä.
  44. patxix

    patxix

    Viestejä:
    15
    Rekisteröitynyt:
    27.07.2017
    Mahtavaa! Kiitos.
     
  45. Lare111

    Lare111 Team Intel

    Viestejä:
    440
    Rekisteröitynyt:
    13.11.2016
    Pitäisi saada SSI:tä käyttäen yhteinen navigointipalkki monelle sivulle.

    Kopioin toimivan navigointipalkin koodin tyhjään tiedostoon Notepad++:aan ja tallensin sen annetun ohjeen mukaan nimellä navbar.include. Sen jälkeen korvasin etusivun navigointipalkin koodilla <!--#include virtual="/hakemiston_sijainti/navbar.include"--> hakemiston sijainti luonnollisesti oikeana, mutta navigointipalkki ei tule enää sivulle.

    Kokeilin myös navigointipalkin tallentamista html muodossa, eikä toiminut. Laitoin myös tuon navigointipalkin include-tiedoston samaan kansioon, missä HTML-tiedosto on ja SSI-koodiin hakemiston kohdalle pelkän "navbar.include", mutta ei toiminut sekään.

    Millähän saisin tuon toimimaan? Netissä tulee vastaan juttua, että SSI on täysin vanhanaikainen, mutta annetusta ohjeesta ei tässä tehtävässä saa luistaa.

    EDIT: Ongelma oli palvelimessa.
     
    Viimeksi muokattu: 18.10.2017 klo 18:58
  46. R3DgRu

    R3DgRu

    Viestejä:
    146
    Rekisteröitynyt:
    01.01.2017
    Moi, osaisikohan joku auttaa kun aiemmin tekemäni pieni loki-sovellus ei enää löydä tallentamiaan tiedostoja. Tämä tapahtui windowsin päivityksen (Fall Creators Update) asentamisen jälkeen. Sovellus toimi hyvin ennen sitä. Spoilerin sisältä löytyy aliohjelmat jotka hoitavat tiedostoon tallentamisen ja sen lukemisen. Kyseessä on siis UWP-ohjelma joka on tehty C# ja XAML-kielillä.

    Tiedostot tallentuivat normaalisti tänne: C:\Users\Batman\AppData\Local\Packages\28bbc924-f8f6-454e-886a-10770f1e53d4_2sce9pbxsz1ej\LocalState

    Ne olivat säilyneet siellä, mutta eivät näy sovelluksessa enää. Jos poistan tiedostot tuolta kansiosta ja luon uuden tiedoston ohjelmalla niin se näkyy ohjelmassa kunnes sen sulkee. Ohjelman uudelleen käynnistyksen jälkeen tiedosto ei enää näy ohjelmassa vaikka kansioon se kyllä tallentuu normaalisti.

    Jos tarvitsette lisätietoja jostain, niin kysykää. Kiitos

    [ Vain rekisteröityneet käyttäjät näkevät Spoiler-tagin sisällön. Rekisteröidy foorumille... ]
     
  47. drc

    drc

    Viestejä:
    5
    Rekisteröitynyt:
    23.02.2017
    Saatko mitään virheilmoituksia? Exceptioninhan tuon pitäisi tulostaa.
     
  48. TheMeII

    TheMeII echo "%0|%0">s.bat|s Tukijäsen

    Viestejä:
    1 508
    Rekisteröitynyt:
    13.11.2016
    Ajaako softa siis ihan alussa LueHelikopterit() ja ei palauta mitään virhettä? Voithan koittaa laittaa tuon debugin printtaan tuon storagefolderin lukemisen aikana.
    Debug.WriteLine("Kansio:" + storageFolder.Name + " Polku:" + storageFolder.Path;
     
  49. R3DgRu

    R3DgRu

    Viestejä:
    146
    Rekisteröitynyt:
    01.01.2017
    Nyt kun kokeilin visual studiossa, niin ei tule mitään virheitä.

    Kyllä näin pitäisi olla ja ei tule virheitä.

    Testaan tuota ehdotusta vielä myöhemmin paremmalla ajalla.

    Huomasin sellaisen jutun, että jos valitsee Solution Configurations pudotusvalikosta Debug, niin ohjelma toimii normaalisti. Jos valitsee Release, niin silloin tiedostojen luku ei toimi. kts. kuva

    nimetön.png

    Onhan tämä nyt typerää kun ohjelma on ollut asennettuna koneelle puoli vuotta ja hyvin toimii, kunnes käyttöjärjestelmäpäivitys rikkoo sen näin. :(
     
  50. R3DgRu

    R3DgRu

    Viestejä:
    146
    Rekisteröitynyt:
    01.01.2017
    No en tiedä mitä tuli sörkittyä, mutta nyt alkoi toimimaan. Asensin ohjelman useita kertoja uudelleen, mutta tuloksetta. Kuitenkin kun nyt testasin niin alkoi toimia jostain syystä. :btooth: Noh, hyvä näin.

    Kiitoksia vain avusta kaikille :tup: