Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Yleisohjeita nettisivujen turvallisuudesta

Sivun loppuun

AkeMake [13.01.2011 14:10:40]

#

Sain nyt tuollaisen parin kuukauden mittaisen projektini valmiiksi, jossa samalla lähdin opiskelemaan php:tä ja MySQL:ää täysin nollasta. Täytyy sanoa, että tekemällä oppii. :)
Nyt haluaisin teiltä kokeneilta koodareilta mielipiteitä ja neuvoja siitä onko tämä sivustoni tehty "hyvin" vai löytyykö sieltä joitain tietoturva-aukkoja tai vastaavia. Sivut löytyvät osoitteesta http://www.suviranta.com. Ja jos/kun sieltä niitä aukkoja löytyy niin toivoisin, ettette laita sivuja ihan täysin sekaisin. ;)
Haluaisin tietää ainakin, että onko sivulta toiselle siirtyminen toteutettu järkevästi sekä onko tekstikoon muuttaminen toteutettu oikeaoppisesti ja jos ei niin miten pitäisi + missä niitä mahdollisia tieturva-aukkoja on.
Entä minkähän vuoksi W3C:n validaattori herjaa noista sivustoni osoitteista (index.php?jotain&jotainlisaa=1 yms.)?


Nyt alan pikkuhiljaa siirtyä erääseen suurempaan projektiin ja ennen sen aloittamista haluaisin saada hiukan yleisluontoista opastusta sivuston turvallisuudesta.
1. Yleisiä ohjeita turvallisen nettisivun tekemiseen?
2. Miten kannattaa toteuttaa käyttäjien rekisteröityminen ja heidän antamiensa tietojen käyttö ilman riskiä tietovuodosta (edellisessä projektissa kopsasin rekisteröitymisen/kirjautumisen koodivinkistä 885 muuttamalla tietokantayhteyden PDO:n kautta toimivaksi. Onko tämä tapa järkevä/turvallinen)?
3. Tulen käyttämään tietokantaa sivuston teossa, sillä sivustolle on parhaimmillaan odotettavissa huomattava määrä dataa. Onko tältä osin jotain muistettavaa, joka pitää alussa muistaa, jottei myöhemmin tule suuren tietomäärän kanssa ongelmia?
4. Mikäli sivusto tulee menestymään, on odotettavissa, että se halutaan toimimaan parilla/useilla kielillä. Miten sivusto kannattaa toteuttaa, jotta siitä olisi myöhemmin helppo tehdä eri kieliversioita?
5. Kuinkahan paljon pitää opetella / käyttää .htaccess:iä sivujen turvallisuuden kannalta?

Siinä nyt jokunen kysymys. Toivottavasti saan edes osaan vastauksen, jotta uskallan tätä projektiani pikkuhiljaa aloitella. :)

Metabolix [13.01.2011 15:40:24]

#

On hidasta ja epävarmaa vain kokeilla satunnaisesti erilaisia toimintoja ja arvailla, minkälaisia aukkoja koodissa edes voisi olla. Jos oikeasti haluat palautetta sivuston turvallisuudesta, laita sen lähdekoodi näkyviin.

Validi koodi on yksi hyvän nettisivun kulmakivistä, ja mm. mainitsemasi linkkiongelma on siinä aika perustavanlaatuinen. Entiteetteihin kuulumattomat &-merkit pitää HTML-koodissa kirjoittaa entiteetteinä &amp;, aivan kuten tagiin kuulumaton <-merkki on &lt; ja >-merkki on &gt; sekä attribuutin arvon osana oleva "-merkki on &quot;.

Minusta tuollaiset tekstin koon säätimet ovat naurettavia: fonttikokoa voi säätää selaimen asetuksista, usein joko parin klikkauksen päästä tai näppäinyhdistelmällä Control-+.

Muilta osin en viitsi edes ottaa kantaa sivun toteutukseen. Sanotaan nyt vain, että kömpelöltä purkalta näyttää ja virheitä piisaa. Älä kuvittele, että yksi vuosi tai yksi harjoitussivusto riittäisi nettiohjelmoinnin kattavaan oppimiseen. Kannattaa tutustua oikein kunnolla perusajatuksiin tagien oikeaoppisesta (semanttisesta) käytöstä ja sisäistää asia niin hyvin, ettei sitä tarvitse miettiä. Useimpiin asioihin ei tarvitse edes mitään oppimateriaalia, vaan paljon voi päätellä ihan omalla järjellä. Oletko koskaan miettinyt esimerkiksi, mitä varten tagit h1, h2, h3 jne. ovat ja miten niitä loogisesti pitäisi käyttää?

Turvallisuusohjeita: Käytä tietokantaa oikein (PDO:n kanssa siis aina parametrit ?-merkkien avulla äläkä suoraan kyselyyn) ja tulosta data sivulle oikein (htmlspecialchars-funktion läpi).

Tietokantaohjeita: Käytä InnoDB-moottoria ja laita relaatiot kuntoon. Älä tallenna samaa tietoa (esim. henkilön nimeä) kahteen eri tauluun vaan käytä id-viittauksia. Datamäärä ei luultavasti tule olemaan ongelma; miljoona riviä ei vielä ole kovin monta.

Kieliversioista: Toteutus riippuu sivuston luonteesta ja siitä, miten yleensäkin ajattelit toteuttaa sivun HTML-puolen: tulostamalla suoraan PHP:llä vai esimerkiksi jollain kirjastolla, joka asettaa valmiiksi puitteet toteutukselle. Hyvin yleinen ratkaisu on joka tapauksessa antaa teksteille nimiä (usein englanninkielisten käännösten mukaan) ja ylläpitää käännöksiä tiedostoissa (tai tietokannassa) näiden nimien eli avainten perusteella. Koodissa sitten haetaan teksti jollain funktiolla. Yksi valmis kirjasto tähän on gettext.

Apachen asetukset (ja siten myös htaccess) eivät ole millään tavalla välttämättömiä sivustolla. On olemassa muitakin palvelinohjelmistoja.

Loppuun vielä yleinen ohje: Jos mitenkään voit vaikuttaa asiaan, älä tee yhtään isoa projektia PHP:llä! >_> Jos et ole ohjelmoinut paljon etkä oikein tunne kieliä, PHP saattaa tuntua tosi kivalta ja näppärältä, mutta voin vakuuttaa, että PHP:n kanssa tulet käyttämään merkittävän osan ajastasi debuggaukseen ja päänsärkyyn sellaisten yksinkertaisten asioiden takia, joista esimerkiksi Javassa jo kääntäjä ilmoittaisi suoraan.

-tossu- [13.01.2011 15:42:29]

#

AkeMake kirjoitti:

Nyt haluaisin teiltä kokeneilta koodareilta mielipiteitä ja neuvoja siitä onko tämä sivustoni tehty "hyvin" vai löytyykö sieltä joitain tietoturva-aukkoja tai vastaavia.

Jos haluat, että joku huvikseen tutkii sivujesi tietoturva-aukkoja, kannataa lähdekoodit laittaa näkyville.

AkeMake kirjoitti:

Entä minkähän vuoksi W3C:n validaattori herjaa noista sivustoni osoitteista (index.php?jotain&jotainlisaa=1 yms.)?

&-merkki pitää HTML-koodissa korvata merkinnällä &amp;. Kyllä pelkkä &:kin toimii useimmissa selaimissa, mutta se on silti väärin.

AkeMake kirjoitti:

Tulen käyttämään tietokantaa sivuston teossa, sillä sivustolle on parhaimmillaan odotettavissa huomattava määrä dataa. Onko tältä osin jotain muistettavaa, joka pitää alussa muistaa, jottei myöhemmin tule suuren tietomäärän kanssa ongelmia?

Mikä on mielestäsi suuri määri dataa? Yleensä aloittelijat tuntuvat luulevan pientäkin tietokantaa todella suureksi.

Edit: Metabolix ehtikin vastata ensin.

awly [13.01.2011 16:53:20]

#

Kannattaa ajaa käyttäjän lähettämät tiedot htmlspecialchars-funktion läpi ennen tulostusta.

Tämän koodin voi tunkea vaikka vieraskirjaa ja nimeen:

<script>alert(/xss/);</script>

AkeMake [13.01.2011 19:08:35]

#

Metabolix kirjoitti:

On hidasta ja epävarmaa vain kokeilla satunnaisesti erilaisia toimintoja ja arvailla, minkälaisia aukkoja koodissa edes voisi olla. Jos oikeasti haluat palautetta sivuston turvallisuudesta, laita sen lähdekoodi näkyviin.

Ei varmaan ole järkevää laittaa tähän jok'ikisen tiedoston lähdekoodia, kun matskua on sivuilla kuitenkin 'ihan riittävästi'. Kaipa ne aukot on välttävästi tukittu, kun noille sivuille tuskin mitään kunnon hakkereita eksyy eikä noiden sivujen täydelliset tarvitse ollakaan.. Tosin tuo awlyn löytämä virhe pitää fiksata.

lainaus:

Entiteetteihin kuulumattomat &-merkit pitää HTML-koodissa kirjoittaa entiteetteinä &amp;

Tottakai tiesin tuon, mutten ole ennen joutunut linkkien yhteydessä käyttämään &-merkkiä, joten luulin, ettei linkki toimi, jos se merkki on korvattu &amp; -merkkijonolla. Nytpä tuli noinkin simppeli asia sitten opittua..

lainaus:

fonttikokoa voi säätää selaimen asetuksista, usein joko parin klikkauksen päästä tai näppäinyhdistelmällä Control-+

No juu, mutta en henk. koht. pidä tekstin koon muuttamisesta selaimen asetuksissa, sillä kokoa pitää joka vierailukerralla muuttaa uudestaan. Ideana tuossa lähinnä on se, että osa sivuilla käyvistä henkilöistä on niin kokemattomia netin käyttäjiä, ettei heillä ole hajuakaan tuollaisesta tavasta muuttaa selaimen tekstikokoa. Tässä on se etu, että rekisteröityneillä käyttäjillä tekstikoko jää muistiin, joten kirjautuneena ollessa tekstin koko pysyy samana kuin sen on aikaisemmilla kerroilla määritellyt.

Metabolix kirjoitti:

Sanotaan nyt vain, että kömpelöltä purkalta näyttää ja virheitä piisaa.

Melkoiset on vaatimuksesi sinulla ennen kuin sivusto pääsee purkkakoodi-leimastaan, kun W3C validaattoristakin pääsee helpommin läpi. Etkä sitten antanut edes yhtä esimerkkiä missä kohtaa mennään purkan puolelle..

Metabolix kirjoitti:

Älä kuvittele, että yksi vuosi tai yksi harjoitussivusto riittäisi nettiohjelmoinnin kattavaan oppimiseen.

En todellakaan kuvittelekaan. Sen vuoksi täällä olen asioista kyselemässäkin, jotta oppisin lisää.

lainaus:

Oletko koskaan miettinyt esimerkiksi, mitä varten tagit h1, h2, h3 jne. ovat ja miten niitä loogisesti pitäisi käyttää?

Oliko tämä nyt sitten esimerkki koodini purkkamaisuudesta? Missähän käytän otsikointia väärin? HTML:n kanssa olen pelaillut kuitenkin nyt sellaiset 7 vuotta, joten en usko sieltä löytyvän suuria virheitä.

lainaus:

Käytä tietokantaa oikein (PDO:n kanssa siis aina parametrit ?-merkkien avulla äläkä suoraan kyselyyn)

Tästä tulikin mieleeni, että tuo ?-merkkien käyttäminen ei varmaankaan päde LIMIT tapauksessa? En ainakaan saanut kyselyä toimimaan, kun oli LIMIT ?, ?

lainaus:

Kieliversioista: Toteutus riippuu sivuston luonteesta ja siitä, miten yleensäkin ajattelit toteuttaa sivun HTML-puolen

No, tuolla aikaisemmalla sivustollani hain pitemmät tekstit tietokannasta ja lyhyemmät tulostin vain PHP:llä. Tämä tuskin on kuitenkaan kannattavaa tulevassa projektissa, joten kannattaa varmaan käyttää tuota gettext -kirjastoa.

lainaus:

Loppuun vielä yleinen ohje: Jos mitenkään voit vaikuttaa asiaan, älä tee yhtään isoa projektia PHP:llä! >_>

Millä se sitten kannattaisi tehdä? Ainakin Joomla!, jolla joskus tein sivuja, on rakenneltu kokoon PHP:llä ja JavaScriptillä. Olisiko antaa vaihtoehtoista tapaa tehdä sivusto, jos ei PHP käy?

-tossu- kirjoitti:

Mikä on mielestäsi suuri määrä dataa? Yleensä aloittelijat tuntuvat luulevan pientäkin tietokantaa todella suureksi.

Riippuu tietysti täysin sivuston menestymisestä, mutta olisin tyytyväinen jo Metabolixin mainitsemaan "miljoonaan riviin". Menestyessään parhaalla mahdollisella tavalla rivejä voi tulla monin verroin enemmänkin, mutten usko, että siinä vaiheessa enää itse olisin tämän projektin puikoissa..

Pete2 [13.01.2011 19:25:48]

#

AkeMake kirjoitti:

lainaus:

Oletko koskaan miettinyt esimerkiksi, mitä varten tagit h1, h2, h3 jne. ovat ja miten niitä loogisesti pitäisi käyttää?

Oliko tämä nyt sitten esimerkki koodini purkkamaisuudesta? Missähän käytän otsikointia väärin? HTML:n kanssa olen pelaillut kuitenkin nyt sellaiset 7 vuotta, joten en usko sieltä löytyvän suuria virheitä.

Eikös tuossa etusivulla ole ainoat otsikot yksi h2 ja kaksi h5:ta?

Metabolix [13.01.2011 19:54:01]

#

AkeMake kirjoitti:

Ei varmaan ole järkevää laittaa tähän jok'ikisen tiedoston lähdekoodia, kun matskua on sivuilla kuitenkin 'ihan riittävästi'.

Ei tietenkään tähän vaan sinne sivuille jotenkin, eikä sisältösivujen koodia vaan pelkät PHP-koodit. Hyvä tietoturvaharjoitus olisikin tehdä sivu, jolta voisimme lukea noiden sivujen lähdekoodit mutta emme palvelimen muita tiedostoja (emmekä esim. tietokannan salasanaa).

AkeMake kirjoitti:

Melkoiset on vaatimuksesi sinulla ennen kuin sivusto pääsee purkkakoodi-leimastaan, kun W3C validaattoristakin pääsee helpommin läpi.

Miten niin? Validaattorista pääsee läpi sillä, että kirjoittaa rakenteellisesti kelvollista koodia, aivan kuten PHP-tulkista pääsee ensi tilassa läpi sillä, että kirjoittaa syntaksiltaan kelvollista PHP:tä.

Karrikoitu esimerkki, joka ei suoranaisesti liity asiaan: Täyttääkö sinusta seuraava PHP-koodi mitään laatuvaatimuksia?

<?php
$a=    intval($_REQUEST["x"]);
$mikataaon  =(int)$_POST["y"];
    if($a==1&&$mikataaon==3)  $tulos=4;else if ($a==2&&
$mikataaon==7)$tulos = 9; else
  $tulos=$a+$mikataaon;

Eikö? Sehän menee tulkista läpi ja toimii! Melkoiset on vaatimuksesi!

Eli "hyvä koodi" on eri asia kuin "toimiva koodi".

AkeMake kirjoitti:

Etkä sitten antanut edes yhtä esimerkkiä missä kohtaa mennään purkan puolelle..

Käytät taulukkoa ja erityisesti br-tagia epäsemanttisesti. Yhden taulukon voi vielä saada anteeksi mutta siinä eräällä td:llä olevaa height-attribuuttia ei. Ilmoitustaulu on myös epäsemanttisesti toteutettu.

Suunnilleen ensimmäinen asia, joka sivuilla tuli vastaan ihmetellessäni tuota fonttikokoa (joka ei edes muuttunut, kun en ole sallinut evästeitä), on tuo html-elementin fonttikoko 65% ja sitä seuraava body-elementin fonttikoko 1.3em. Mikä idea tässä viritelmässä on?

Ja vielä yksi semantiikkavirhe ovat nuo otsikkotagit. Sivulla olisi lähtökohtaisesti hyvä olla yksi pääotsikko h1, seuraavaksi suurimman otsikon kuuluisi olla h2 jne. Sinun sivullasi sen sijaan näyttäisi olevan sivun pääotsikkona h2 (Esipuhe) ja sivupalkissa h5, ja esimerkiksi Sukupuu-sivulla on kaksi yhtä isoa otsikkoa, vaikka niistä jälkimmäinen olisi minun logiikallani ensimmäisen alaotsikko.

AkeMake kirjoitti:

No, tuolla aikaisemmalla sivustollani hain pitemmät tekstit tietokannasta ja lyhyemmät tulostin vain PHP:llä.

Suoraan koodiin ei tosiaan kannata tunkea eri kieliversioita, vaan varsinaisten sivun osien käännökset on syytä pitää yhdessä paikassa, jotta ulkopuoliselle kääntäjälle voi helposti lähettää yhden tiedoston käännettäväksi.

Tietokannassa sijaitsevat tekstit (eli sivujen dynaaminen sisältö) eivät tietenkään kuulu tämän käännösprosessin piiriin. Jos niitä halutaan monella kielellä, versiot pitää tallentaa tietokantaan ja kääntäminen on tallentajan vastuulla.

AkeMake kirjoitti:

Olisiko antaa vaihtoehtoista tapaa tehdä sivusto, jos ei PHP käy?

Montako haluat? Esimerkiksi Java ja Python tulevat äkkiä mieleen; molemmissa on PHP:hen nähden huomattavana etuna vahva tyypitys ja kunnollinen virheenkäsittely. Javan mukana tulevat lisäksi kaikki käännetyn kielen edut (erityisesti muuttujien ja funktioiden nimien ja tyyppien tarkistus jo käännösvaiheessa sekä nopeus) ja haitat (hankala tehdä nopeasti pieniä hätäkorjauksia).

Kunnolliset Java-jutut ovat aika raskaita eivätkä luonnollisestikaan toimi useimmissa webhotelleissa, mutta sillä on äärimmäisen paljon mukavampi ohjelmoida. Itse olen vähäsen käyttänyt JBoss-palvelinta, tietokantaan Hibernatea ja käyttöliittymään Apache Wicket -kirjastoa.

AkeMake kirjoitti:

Menestyessään parhaalla mahdollisella tavalla rivejä voi tulla monin kerroin enemmänkin, mutten usko, että siinä vaiheessa enää itse olisin tämän projektin puikoissa..

Kannattaa silti koodata ja suunnitella se kunnolla. Tiedän nimittäin, miten kivaa sillä seuraavaksi puikoissa olevalla muuten on.

jimi-kimi [13.01.2011 20:24:40]

#

Ei pitäisi vastata, mutta vastaan kuitenkin..

Seitsemän vuotta M$ FrontPagea? Seitsemässä vuodessa on realistista oppia kirjoittamaan validia HTML / XHTML höttöä.

Jokin syy käyttää ' ja " sekaisin?

Omat tiedot antavat käyttää hassuja merkkejä, joilla saa tagit kivasti rikottua. Vieraskirjaa ei ilmeisesti tagit hirveästi ahdista.
<script>alert("XSS");</script>
^-- Mitä tapahtuu, kun vieraskirja ohjaakin feikkisivustolle ja pyydetään käyttäjää kirjautumaan uudelleen random virheen takia? Tai vaikkapa lähettää pelkät kirjautumistiedot? Istunto mitenkään suojattu? Injektiota en kehtaa edes yrittää..

Zend Framework, Code Igniter, WordPress, Joomla, Drupal.. Google is your friend.. Wikipediasta kannattaa kattoa tosiaan ainakin SQL injektio & XSS.

AkeMake [13.01.2011 21:22:24]

#

Auts.. Kylläpä on tullut nyt monelta taholta lokaa niskaan ja paljon, ja sieltä sivuiltakin näytti noita aukkoja löytyvän, vaikka muille jakaa. Ehkä olen sitten ansainnut nämä haukut. :-/
Korjautuisiko jimi-kimi:n mainitsemat vieraskirjan ongelmat yksinkertaisesti tuolla htmlspecialchars-funktiolla?

Metabolix kirjoitti:

Ei tietenkään tähän vaan sinne sivuille jotenkin, eikä sisältösivujen koodia vaan pelkät PHP-koodit.

Tässä suviranta.com projektissani taitaa olla se huono puoli, että sisältösivut ja PHP-koodi ovat ihan sama asia..... Mitenkähän saisin helposti nuo PHP-koodit näkymään? Olen kyllä lähes satavarma siitä, että tietokannan salasanat yms. ovat varmassa turvassa, koska ne sijaitsevat public_html kansion ulkopuolella.

lainaus:

Eli "hyvä koodi" on eri asia kuin "toimiva koodi".

Selvä, mutta onko tuo xhtml-koodini muka sitten samanlaista purkkaa kuin esimerkkisi PHP-koodi? Lähdekoodista kyllä löytyy riviväleja ja tabulaattoreita selkeyttämään koodia, joten selkeydestä ei ainakaan pitäisi olla kiinni.

lainaus:

Käytät taulukkoa ja erityisesti br-tagia epäsemanttisesti. Yhden taulukon voi vielä saada anteeksi mutta siinä eräällä td:llä olevaa height-attribuuttia ei. Ilmoitustaulu on myös epäsemanttisesti toteutettu.

Ääh.. Juuri nämä jokunen kohta joissa olen törkeästi oikonut.. br-tagien semantiikasta en taida olla riittävästi perillä. Tähän mennessä niillä on vain ollut niin helppo saada välityksiä aikaiseksi, mutta kai niistä pitää viimeistään nyt seitsemän vuoden jälkeen alkaa luopua.. Mutta missä olen käyttänyt td:llä height-attribuuttia? css:n puolella td:lle on kyllä annettu korkeusarvoja, mutta ei html:n puolella. Onko sekin väärin?

lainaus:

tuo html-elementin fonttikoko 65% ja sitä seuraava body-elementin fonttikoko 1.3em. Mikä idea tässä viritelmässä on?

Tässä täytyy myöntää, että tuon kopsasin suoraan Joomla!:n css-tiedostojen puolelta ja itsekin ihmettelin, että mitä järkeä tuossa on. Joko Joomla!:ssa sillä on jokin älykäs tarkoitus, jota en tajua tai sitten Joomla!:n kehittäjät eivät ole jaksaneet paneutua css-tiedostoihinsa kovin syvällisesti. Epäilen vahvasti ensimmäistä.

lainaus:

Ja vielä yksi semantiikkavirhe ovat nuo otsikkotagit.

Juu, myönnetään, että tässä(kin) on virhettä. Mutta onko koodi purkkaa niin kauan kunnes se on kaikin puolin täydellistä? Eikö koodini ole kuitenkin helppolukuista, vaikka se 'viliseekin' noita semantiikkavirheitä?

lainaus:

Tietokannassa sijaitsevat tekstit (eli sivujen dynaaminen sisältö) eivät tietenkään kuulu tämän käännösprosessin piiriin.

Tietokannan tekstejä ei toki tarvitse kääntää muille kielille, sillä en sinne enää aio sijoittaa näitä pidempiä tekstisisältöjä, niin kuin tein tässä aikaisemmassa projektissa.

Miksihän en tajua miten kokonaisen nettisivun saisi rakennettua Javalla? Tosin se ei varmaan ole yllätys, sillä Javaosaamista minulla on takana vasta yliopiston yhden ohjelmointi-kurssin verran.. Toimiiko tuo siis niin, että rakennan sivun ihan html-tiedostoista ja ne kohdat, jotka vaativat älykkäämpää sisältöä hoidan hakemalla halutun Java-tiedoston paikalle (eli niin kuin olisi tämä aikaisempi sivusto kai kuulunut PHP:n kanssa tehdä)?

lainaus:

Kannattaa silti koodata ja suunnitella se kunnolla. Tiedän nimittäin, miten kivaa sillä seuraavaksi puikoissa olevalla muuten on.

Tiedän. Ja juuri sen (sekä sivuston turvallisuuden) vuoksi täällä asioista kyselenkin enkä halua lähteä suoraan heittämään jotain ihme purkkaviritelmiä paikoilleen, jotka lopulta osoittautuvat kykenemättömiksi jatkojalostukseen tai mihinkään muuhun kuin suoraan roskiin. Ei varmasti ole kenenkään kannalta kiva, että siinä vaiheessa kun tämä projekti siirtyisi ylemmälle taholle niin viritelmäni osoittautuvat niin mahdottomiksi, että ne heitetään suoraan roskiin ja aloitetaan koko projekti alusta.
Tähän mennessä saamieni palautteiden perusteella olen jo oppinut yhtä sun toista. Kiitoksia vain siitä. :)

jimi-kimi kirjoitti:

Seitsemässä vuodessa on realistista oppia kirjoittamaan validia HTML / XHTML höttöä.

Jaa.. Mistäs sieltä html:ää löytyi? Onko koodi todellakin niin huonon näköistä, että siitä on oikeutettua käyttää termejä "purkkakoodi" ja "höttö"?

lainaus:

Jokin syy käyttää ' ja " sekaisin?

Kyllä sille perustelu löytyy, muttei pätevä sellainen. Johtuu typerästi taas näistä oikopoluistani.. Joissain paikoissa olen tulostanut esim. linkkejä PHP:llä, jolloin on ollut vain helpompi heittää ' &quot; :n sijaan.

echo "<a href='#' title='Linkki'>Linkki</a>";

lainaus:

Zend Framework, Code Igniter, WordPress, Joomla, Drupal.. Google is your friend..

Meinaatko, että minun pitäisi tehdä tämä sivustoni jollain noista? Ei onnistu, sillä vaikka noihin on kaikenlaisia komponentteja ladattavissa, en saisi sivustoa sellaiseksi kuin haluan. Koko sivuston käyttötarkoitus on sellainen, ettei siihen täydellisesti sopivaa komponenttia ole olemassa. Koko sivusto tulee pohjautumaan tämän yhden idean ympärille, joten on parempi koodata koko sivu itse.

Eikös SQL-injektioiden pitäisi olla kurissa, kun otan oikeaoppisen tietokantayhteyden PDO:lla (eli ne ?-merkit oikeilla paikoillaan)?


Edit: Hei alkaa riittää jo tuo sivuston aukkojen näyttäminen. Vaikka se helppoa onkin laittaa tuo sivu sekaisin niin pyytäisin, ettette kuitenkaan tekisi sitä. Olen jo huomannut, että se on melko täynnä aukkoja, kiitoksia vain.. :-/

Metabolix [13.01.2011 22:05:52]

#

AkeMake kirjoitti:

Auts.. Kylläpä on tullut nyt monelta taholta lokaa niskaan ja paljon, ja sieltä sivuiltakin näytti noita aukkoja löytyvän, vaikka muille jakaa. Ehkä olen sitten ansainnut nämä haukut. :-/

Älä ota sitä raskaasti. :)

AkeMake kirjoitti:

Korjautuisiko jimi-kimi:n mainitsemat vieraskirjan ongelmat yksinkertaisesti tuolla htmlspecialchars-funktiolla?

Joo, sillä korjaantuu suunnilleen kaikki tulostukseen liittyvä, ja sitä kannattaa varmuuden vuoksi käyttää ihan aina, jos ei ole aivan erityistä syytä olla käyttämättä tai pitäviä todisteita siitä, ettei sitä tarvita.

AkeMake kirjoitti:

Tässä suviranta.com projektissani taitaa olla se huono puoli, että sisältösivut ja PHP-koodi ovat ihan sama asia.

Kannattaa tutustua MVC-malliin, tosin kannattaa suorittaa tutustuminen jostain lähteestä, jonka kirjoittaja on itse ymmärtänyt kyseisen mallin edes suunnilleen oikein, mikä voi ollakin jo suurempi haaste.

Yksinkertaisesti mallia voisi soveltaa niin, että laitetaan tiedon haku- ja tallennusfunktiot ("malli") yhteen paikkaan ja lomakkeiden käsittely ("kontrolleri") toiseen paikkaan, jolloin varsinaiset sivut ("näkymä") tulevat tällaisiksi:

<?php
include("malli.php");
include("sivufunktiot.php");

ylaosa("Uutiset");

echo '<h1>Uutiset</h1>';

foreach (hae_uutiset() as $uutinen) {
    printf(
        '<h2>%s</h2>'.
        '<p>%s</p>'.
        '<p><a href="uutinen.php?id=%d">%s</a></p>',
        htmlspecialchars($uutinen["otsikko"]),
        htmlspecialchars($uutinen["lyhyesti"]),
        $uutinen["id"],
        htmlspecialchars(gettext("Lisää"))
    );
}

alaosa();

AkeMake kirjoitti:

Mitenkähän saisin helposti nuo PHP-koodit näkymään?

Esimerkiksi lisäämällä joka tiedoston alkuun näin:

<?php
if (isset($_GET["lahdekoodi"])) {
    highlight_file(__FILE__);
    die();
}

(Tulee tosin epävalidia koodia, kun puuttuu HTML:n alku ja loppu...)

AkeMake kirjoitti:

onko tuo xhtml-koodini muka sitten samanlaista purkkaa kuin esimerkkisi PHP-koodi?

Ei onneksi aivan.

AkeMake kirjoitti:

br-tagien semantiikasta en taida olla riittävästi perillä. Tähän mennessä niillä on vain ollut niin helppo saada välityksiä aikaiseksi

Kyseinen tagi on tarkoitettu rivinvaihdon tekemiseen tekstin seassa. Sitä voisi semanttisesti käyttää vaikkapa runon, lähdekoodin tai matemaattisen kaavan rivittämiseen tai jos tekstissä pitää muusta syystä katkaista rivi. (Kappalejako tehdään kuitenkin p-tageilla.)

AkeMake kirjoitti:

Mutta missä olen käyttänyt td:llä height-attribuuttia?

Onko noin vaikea klikata sivulta "näytä lähdekoodi" ja kirjoittaa hakuun "<td"? Etusivulta löytyy vain viisi kohtaa, ja viimeisessä niistä on height.

AkeMake kirjoitti:

Mutta onko koodi purkkaa niin kauan kunnes se on kaikin puolin täydellistä?

Minusta on, jos siinä on vikoja, jotka olisi voinut välttää painamalla eri numeroa.

AkeMake kirjoitti:

Eikö koodini ole kuitenkin helppolukuista, vaikka se 'viliseekin' noita semantiikkavirheitä?

Joo, voisi se paljon pahempaakin olla. Tapanani ei vain ole onnitella sellaisista "hyvistä" puolista, joita pidän itsestäänselvyyksinä. "Hienoa, onnistuit tänäänkin solmimaan kengännauhasi!"

AkeMake kirjoitti:

Miksihän en tajua miten kokonaisen nettisivun saisi rakennettua Javalla?

Siksi, että et ole perehtynyt asiaan. Nettisivujahan voi tehdä melkein millä tahansa kielellä. Monille on PHP:n tyyppisiä ratkaisuja, joissa joko kirjoitetaan HTML:ää ja muuta koodia sekaisin tai tulostetaan HTML-koodi echo-riveillä. (Javalle on JSP, jos samanlainen ohjelmointityyli kiinnostaa.)

Mainitsemani Apache Wicket sen sijaan toimii hieman mutkikkaammin: Sivut (tai niiden osat kuten navigointipalkki) tehdään XHTML:llä. Dynaamiset osat merkitään erityisillä attribuuteilla (esim. wicket:id="juttu"), joiden perusteella Wicket sitten osaa yhdistää ne vastaaviin kohtiin Java-koodissa. Toiminnallisuus ja esim. linkkien klikkausten käsittelijät kirjoitetaan Javalla lähes samalla tavalla kuin Javan graafiset ohjelmat (AWT, Swing), ja Wicket sitten lataa XHTML-palaset ja tulostaa käyttäjälle niistä muodostetun lopullisen version.

Massiivisen frameworkin tuottama lisävaiva olisi tuolla nykyisellä sivullasi tarpeeton, mutta mitä enemmän erilaisia toimintoja sivulle tulee, sitä enemmän hyötyä on kielestä, jolla on helppo ohjelmoida juuri niitä toimintoja.

AkeMake [13.01.2011 22:59:25]

#

Nyt tuli Metabolix:lta sellaista palautetta, jota olen toivonutkin. Kysymyksiin saa vastauksen suoraan eikä siinä piikitellä kysyjän tietämättömyydellä. Oli huomattavasti mukavampi lukea suoria vastauksia, kuin niitä aikaisempia tyyliin: "Kun et näin yksinkertaista asiaa tajua ja muutenkaan et osaa, niin enpä viitsi kunnolla selittääkään."
Kiitos tästä. :)

lainaus:

Älä ota sitä raskaasti. :)

Yleensä otan kovankin kritiikin vastaan ja yritän oppia siitä, mutta tässä tapauksessa meinasin todellakin masentua. Kiitoksia siis lohdutuksen sanoista. Kyllä minä nämä jutut vielä opin. :)

lainaus:

Joo, sillä korjaantuu suunnilleen kaikki tulostukseen liittyvä, ja sitä kannattaa varmuuden vuoksi käyttää ihan aina

Pistänkin tuon heti muistiin. Joku otti noiden aukkojen etsimisen sivuilta tosissaan ja heittele vaikka mitä koodia vieraskirjaan. Siinä vaiheessa säikähdin tosissaan, kun vieraskirjaan mennessä sivu heitti minut homoporno-sivulle. Tässä vaiheessa viimeistään laitoin htmlspecialchars-funktioita joka paikkaan..

Metabolix kirjoitti:

AkeMake kirjoitti:

Mitenkähän saisin helposti nuo PHP-koodit näkymään?

Esimerkiksi lisäämällä joka tiedoston alkuun näin:

Laittelen tuota koodia pikkuhiljaa kaikkiin käyttämiini tiedostoihin.. Toivon, että kun sieltä niitä tietoturva-aukkoja alkaa paljastua, niin ette laittaisi sivua ihan sekaisin niin kuin joku näyttää jo nyt yrittävän.. tai siis tekevän. :)

lainaus:

Kyseinen tagi on tarkoitettu rivinvaihdon tekemiseen tekstin seassa.

Kyllähän minä sen oikeastaan tiesinkin, mutta sillä vain on ollut aina niin helppo rivittää monia eri paikkoja. Kyllä siitä tavasta pitää jo nyt vihdoin luopua..

lainaus:

Onko noin vaikea klikata sivulta "näytä lähdekoodi" ja kirjoittaa hakuun "<td"? Etusivulta löytyy vain viisi kohtaa, ja viimeisessä niistä on height.

Kyllähän minä nyt lähdekoodia osaan katsoa ja sieltä hakea. Ei minulla vain silti etusivulta mitään taulukoita löydy. Ellen väärin muista niin olen käyttänyt taulukkoa ainoastaan kuvagallerian hakulomakkeen yhteydessä sekä joidenkin muiden lomakkeiden kanssa enkä niihin mihinkään ole asettanut td:lle height-attribuuttia.

lainaus:

Siksi, että et ole perehtynyt asiaan.

Niin vähän arvelinkin.. Suositteletko itse, että tekisin tämän projektini tuon antamasi mallin mukaisesti PHP:llä vai sitten kuitenkin opiskelen Javaa lisää ja teen sivut sillä. Kuulostaa vain melko vaikealta ja erikoiselta tehdä sivut Javalla (vaikka käymästäni Java-kurssista tulikin 5), kun Java-kurssin aikana ei puhuttu sanallakaan Java:n soveltamisesta nettiympäristössä. Se oli kai Javan alkeiskurssi (Jyväskylän yliopiston Ohjelmointi 1 -kurssi) ja tänä keväänä käyn sitten Ohjelmointi 2 -kurssin, jossa pääsee syvemmälle Javaan. Jokohan siellä oppisi soveltamaan opittua netissä..

lainaus:

Massiivisen frameworkin tuottama lisävaiva olisi tuolla nykyisellä sivullasi tarpeeton, mutta mitä enemmän erilaisia toimintoja sivulle tulee, sitä enemmän hyötyä on kielestä, jolla on helppo ohjelmoida juuri niitä toimintoja.

Eli sellaisen ison projektin toteuttamiseen mihin olen ryhtymässä suosittelet siis mitä kieltä? Millä on helppo ohjelmoida niitä erilaisia toimintoja?

reca [13.01.2011 23:09:09]

#

En muista sanoiko joku tästä.. mutta galleria ilmoittaa ettei näytä kaikkia kuvia.. oletko varma etteivät "salassa" olevat kuvat näy suoraan täältä:
http://suviranta.com/pictures/

AkeMake [13.01.2011 23:11:32]

#

heh.. Tämä on se yksi seikka missä olen myös oikonut. Kuvien salaus kun ei ole äärimmäisen tärkeää; ainoastaan suotavaa, joten en ole tuota kansiota salannut mitenkään. Kuvat on siis "salattu" ainoastaan siellä sivun puolella ja niihin pääsee kuitenkin helposti käsiksi suoraan kansion kautta.
Mitenkähän saisin tuon kansionkin salattua, ettei sieltäkään löydy salaisiksi asetettuja kuvia (tai mieluusti vaikka kaikki piilossa..)?

Metabolix [13.01.2011 23:22:19]

#

AkeMake kirjoitti:

Ei minulla vain silti etusivulta mitään taulukoita löydy.

Löytyisi, jos katsoisit lopullista sivua etkä PHP:tä. Kyseessä on sivupalkin kirjautumislomake.

AkeMake kirjoitti:

Java-kurssin aikana ei puhuttu sanallakaan Java:n soveltamisesta nettiympäristössä

Eikä luultavasti yliopistossa tulla puhumaankaan, ellei siellä sattumalta ole kurssia, jossa käsitellään aivan erityisesti vain tuota nettisivujen tekoa. Kannattaa kuitenkin päästä yli tuosta "ei ole opetettu" -ongelmasta: luultavasti et tule kouluissa oppimaan kovin merkittävästi käytännön tekniikoita, koska vaihtoehtoja on niin paljon eikä niistä voi järkevästi valita muutamaa opetettavaa. Kursseilla voi päästä alkuun ohjelmoinnissa ja saada vähän vinkkejä joihinkin kielen ominaisuuksiin, mutta todellinen oppiminen tapahtuu vain ahkerasti opettelemalla. Erityisesti kannattaa opetella selvittämään asioita kokeellisesti (perusteellisemminkin kuin vain "oho tää toimii"!) ja lukemaan myös vaikeaselkoisempaa dokumentaatiota ja etsimään sieltä sopivia funktioita omiin tarkoituksiin.

AkeMake kirjoitti:

Suositteletko itse, että tekisin tämän projektini tuon antamasi mallin mukaisesti PHP:llä vai sitten kuitenkin opiskelen Javaa lisää ja teen sivut sillä.

Lähtökohtaisesti suosittelen mihin tahansa asiaan jotain kelvollista kieltä; PHP itsessään on jo paljon pahempi purkkaviritelmä kuin sinun koodisi. ;) Sopiva ratkaisu riippuu projektistasi, ja siitä et ole vielä kertonut mitään. Mutta kuten sanoin, Javaa varten tarvitsisit luultavasti jotain järeämpää kuin tavallisen webhotellin.

Jos täytyy sinnitellä PHP:llä, kannattaa tehdä niin tarkka suunnitelma, ettei mitään kohtaa koodista tarvitse jälkikäteen muuttaa. Toinen tärkeä asia on funktioiden (ehkä luokkienkin) ahkera käyttö, jotta koodi pysyy hallittavana.

AkeMake kirjoitti:

Mitenkähän saisin tuon kansionkin salattua

Voit laittaa sinne tyhjän index-tiedoston, niin listausta ei näy.

reca [13.01.2011 23:23:05]

#

Varmaan helpoin jippo on lisätä kyseiseen hakemistoon index.html-tiedosto, jolla ohjataan käyttäjä sivuston pääsivulle. Lisäksi kansion voi pitää pois hakutuloksista robots.txt-tiedostolla.

Kuviin pääsee silti käsiksi jos tietää kuvatiedoston nimen. Robots.txt on myös luettavissa kenen tahansa toimesta.

http://www.activejump.com/o-6.shtml
http://www.robotstxt.org/robotstxt.html

edit: tyhmästi kirjoitettua tekstiä...
edit2: lisää tekstiä:

Rekisteröitymisestä
- tarkista, että nimessä on muutakin kuin tyhjää esim. empty()-funktio pitäis toimia (?)
- tarkista, että käyttäjätunnus tai salasana ei ole vain yhtä merkkiä (esim. aaaa)
- pakota viestiin rivivaihdot ja mielellään hylkää viestit joissa ei ole välilyöntiä liian pitkään aikaan. (eli sivuston hajoittavat viestit)

ei tässä nyt muuta..

edit3: kirjotellaan sitte päällekkäin :P

Metabolix [13.01.2011 23:34:50]

#

reca kirjoitti:

tarkista, että nimessä on muutakin kuin tyhjää esim. empty()-funktio pitäis toimia (?)

Suosittelen nimen trimmausta ja sen jälkeen esimerkiksi kolmen merkin vähimmäispituutta ja ehkäpä pakollista aakkosmerkkiä nimen alussa.

lainaus:

pakota viestiin rivivaihdot ja mielellään hylkää viestit joissa ei ole välilyöntiä liian pitkään aikaan. (eli sivuston hajoittavat viestit)

Tai tavuta ne viestit &shy;-merkillä. Ei ole vaikea tavuttaa esimerkiksi säännöllisillä lausekkeilla VK*KV-muotoisia kohtia (V on vokaali, K on konsonantti), ja sillä saakin luultavasti kelvolliset sanat niin moneen osaan, että voi huoletta katkaista loput pitkät pätkät mielivaltaisesti vaikka aina kymmenen merkin välein.

AkeMake [13.01.2011 23:41:37]

#

Metabolix kirjoitti:

Löytyisi, jos katsoisit lopullista sivua etkä PHP:tä. Kyseessä on sivupalkin kirjautumislomake.

Äsh! Tyhmä minä. Katsoin etusivua tietysti sisäänkirjautuneena, jolloin kirjautumislomake ei näkynyt.. Sinne on sitten lipsahtanut tuollainen height -arvo.. Pitää korjata pikimmiten.
Harmittaa, kun piti tulla tänne pyytämään teitä etsimään sivuston aukot, joten nyt joku otti oikein elämäntehtäväkseen löytää kaikki mahdolliset virheet sivustolta. Nyt en sitten pääse etusivulle ollenkaan enkä ihmettelisi, vaikka koko sivusto kohta kaatuisi. Hei, jotain suhteellisuudentajua! >:(

lainaus:

Voit laittaa sinne tyhjän index-tiedoston, niin listausta ei näy.

Jaa sen takia Joomla!:ssa on jokaisessa kansiossa tyhjä index-tiedosto. Johan olen sitä ihmetellytkin.. :D

Metabolix kirjoitti:

reca kirjoitti:

tarkista, että nimessä on muutakin kuin tyhjää esim. empty()-funktio pitäis toimia (?)

Suosittelen nimen trimmausta ja sen jälkeen esimerkiksi kolmen merkin vähimmäispituutta ja ehkäpä pakollista aakkosmerkkiä nimen alussa.

Selvä. Teenpä nämä..

reca kirjoitti:

Rekisteröitymisestä
- tarkista, että nimessä on muutakin kuin tyhjää esim. empty()-funktio pitäis toimia (?)
- tarkista, että käyttäjätunnus tai salasana ei ole vain yhtä merkkiä (esim. aaaa)
- pakota viestiin rivivaihdot ja mielellään hylkää viestit joissa ei ole välilyöntiä liian pitkään aikaan. (eli sivuston hajoittavat viestit))

- Selvä.
- En ymmärrä miksi, mutta teenpä näin.
- Miksi rivivaihdot pitää pakottaa? Huomasin tosiaan, että liian pitkä merkkijono rikkoo sivuston (kun näitä kokeili), joten korjaanpa senkin..

Edit: Ratkaisu, etten päässyt etusivulle oli siinä, että joku oli päässyt tietokannan teksteihin käsiksi ja koodannut siellä etusivulla näkyvään tekstiin jonkin koodinpätkän, joka ohjasi toiselle sivulle. Miten näin pääsi käymään? Hankkiko hän väliaikaiset moderaattorin tai adminin oikeudet itselleen, jonka avulla pääsi muuttamaan tekstejä vai murtautuiko suoraan tietokannan tauluihin?

Edit2:

Metabolix kirjoitti:

AkeMake kirjoitti:

Suositteletko itse, että tekisin tämän projektini tuon antamasi mallin mukaisesti PHP:llä vai sitten kuitenkin opiskelen Javaa lisää ja teen sivut sillä.

Lähtökohtaisesti suosittelen mihin tahansa asiaan jotain kelvollista kieltä; PHP itsessään on jo paljon pahempi purkkaviritelmä kuin sinun koodisi. ;) Sopiva ratkaisu riippuu projektistasi, ja siitä et ole vielä kertonut mitään. Mutta kuten sanoin, Javaa varten tarvitsisit luultavasti jotain järeämpää kuin tavallisen webhotellin.

Eli et suosittele PHP:tä koska se on 'purkkakieli' etkä Javaa, koska se vaatii "jotain järeämpää kuin tavallisen webhotellin"? Tämä tarkoittaa silloin sitä, että joudun opiskelemaan jonkin minulle täysin uuden ohjelmointikielen, koska en muita osaa kuin PHP:tä sekä hiukan Javaa..
En tiedä paljonko minun kärsii tästä projektista puhua, koska se on alunperin isoveljen tuttavan keksimä idea ja siitä olisi tarkoitus kehitellä jotain suurtakin 'bisnestä'. Perusidea on kuitenkin se, että kaikki sivuilla käyvät kävijät luovat sitä tietokannassa olevaa dataa ja kyseistä dataa pitäisi sitten osata käsitellä mahdollisimman laajasti ja monella tavalla. Eli sitä dataa pitäisi sitten pystyä hyödyntämään koko sivustossa mahdollisimman hyvin. Paras ohjelmointikieli tällaiseen olisi??

jimi-kimi [14.01.2011 07:38:44]

#

Zend Framework, Code Igniter..

Tylyjä kommentteja tulee satavarmasti tuolla kysymyksellä. Opettelemalla jonkin isohkon frameworkin ("raamit") helpotat omaa urakkaasi huomattavasti. Jos kuitenkin olio-ohjelmointi on yleensäkin hukassa, tai sana luokka herättää harmaita hiuksia niin kannattaa varmaan aloittaa homma alusta tai palkata asiansa osaava koodari tekemään ne vaikeat hommat. Internet on täynnä harmaahattuisia freelance koodareita ja hintakaan ei nyt "niin hirveä" ole, jos tuolla bisneksellä rahaakin ollaan tekemässä.

1. Frameworkki
2. Palkkaa ohjelmoija

Niin ja vielä yleisesti.. Jos on isohko projekti tulossa, niin suosittelen ERITTÄIN vahvasti projektinhallintaa ja sen projektin suunnittelua kunnolla. Todennäköisyydet on puolellani, kun veikkaan että tulevassa projektissasi mennään kuitenkin enemmän tai vähemmän perse edellä puuhun. Eikö kuitenkin olisi kivempi mennä vähemmän?

Jos ollaan kehittelemässä "jotain suurta", niin silloin muutaman sadan rahan säästö tuskin on enää kovin merkittävässä asemassa.. Edes suunnitteluvaiheessa. Java on kiva vaikkakin konfigurointi yhtä helvettiä (kuin myös frameworkeissa yleensäkin kielestä riippumatta.)

http://www.stripesframework.org/display/stripes/Home

eq [14.01.2011 09:07:26]

#

Alla yksityiskohtaisempia (pienempiä) huomioita:

AkeMake kirjoitti:

Haluaisin tietää ainakin, että onko sivulta toiselle siirtyminen toteutettu järkevästi sekä onko tekstikoon muuttaminen toteutettu oikeaoppisesti ja jos ei niin miten pitäisi + missä niitä mahdollisia tieturva-aukkoja on.
Entä minkähän vuoksi W3C:n validaattori herjaa noista sivustoni osoitteista (index.php?jotain&jotainlisaa=1 yms.)?

Tekstin koosta: miksi juuri valitsimessa koko on "kovakoodattu" pikseleinä, tyylimääreet HTML:n sekaan upotettuina?

W3C:n tarkistustyökalu herjaa yllämainituista syistä; käytettävyydestä puhuttaessa valitus seuraa eri lähtökohdista: perinteinen query_string on käytettävyydeltään huono. Ongelman voisi käsittää koskevan myös kysymystä sivulta toiselle siirtymisestä. Varsinkin jos tarkoitus on huomioida tietotekniikka-lukutaidoton yleisö, kannattaa osoitteet ehdottomasti kaunistaa (ei sillä, että tämä välttämättä kannustaisi heitä oikeasti kirjoittamaan osoitteita osoitepalkkiin - mutta sivuhistoriasta sivulle tulo saattaa helpottua kun sivujen osoite mukailee sisältöä (riippuen selaimesta)). Aiheesta lisää alla.

AkeMake kirjoitti:

3. Tulen käyttämään tietokantaa sivuston teossa, sillä sivustolle on parhaimmillaan odotettavissa huomattava määrä dataa. Onko tältä osin jotain muistettavaa, joka pitää alussa muistaa, jottei myöhemmin tule suuren tietomäärän kanssa ongelmia?

Tässä kohtaa pitää melkeinpä määritellä huomattava, sekä käytössä olevat (tietokone)resurssit. (En ole viime aikoina tilannetta seurannut) Tietokantahaut kannattaa suunnitella hyvin - tai siis, ei idioottimaisesti. Ns. N+1-algoritmit syövät resursseja helposti tieto- ja käyttäjämäärän kasvaessa.

AkeMake kirjoitti:

5. Kuinkahan paljon pitää opetella / käyttää .htaccess:iä sivujen turvallisuuden kannalta?

.htaccess ei ole olennainen sivuston turvallisuuden kannalta. Jos käytät Apachea, .htaccess:in mahdollisesti hyödyllisin ominaisuus sinulle on mod_rewrite, ja se, miten sillä saat aikaiseksi käytettävyydeltään hyvät WWW-osoitteet.

--

HTML:stä: <br>:n käyttötarkoitus onkin tullut jo pariin kertaan esille, joten sanon vain kerran: sitä ei ole tarkoitettu vertikaalisten välien luontiin. Tarvitsetko todella taulukkotaittoa nykyisen ulkoasun luomiseen kaikkien lomakkeiden kanssa? Kai ymmärrät, ettei <h*>-tagien tarkoitus ole "sopivan" kirjasinkoon valinta? Semanttisten virheiden vuoksi sivusi on haasteellinen, ja mahdollisesti hyvin vaikeaselkoinen ei-visuaalisille selaimille.

Sisällön kätkeminen javascript-komentosarjojen taakse ei ole käytettävyyttä.

XHTML:stä: Erinäisten selainvalmistajien ja epäpätevien HTML-"artistien" kollektiivisen massan vuoksi XHTML on menetetty tapaus. (jätän tästä pois pitkän ja offtopicin puolelle menevän rantin HTML:n nykytilasta ja tulevaisuuden "kehityksestä")

Mitä tästä seuraa? Selaimissa ei oleellisesti ole - eikä niihin ole koskaan tulossa - "moottoria" joka hyötyisi XHTML:n tarjoamista mahdollisuuksista (tässä on tietysti otettava huomioon se seikka, että entiteetti-virheiden takia sivujasi ei voisi käyttää ollenkaan jos ne tulkattaisiin standardinmukaisella XHTML-jäsentäjällä). Tästä syystä XHTML:n kanssa ei, todella, kannata vaivautua (olen tässä - ikään kuin - paraskin puhuja); jos (ja kun) tarjoilet sivut HTML:nä, tee ne HTML:llä (tässä tapauksessa viimeisimmällä versiolla, eli HTML 4.01:llä - se on myös universaalisti "tuetuin", siinä määrin tämä nyt kannattaa määritellä).

Kannattaa kuitenkin lainata ns. "HTML5"-doctype (eli versioton HTML-doctype), ihan vain siitä syystä että siinä on vähemmän kirjoitettavaa (ja sen voi ulkomuististakin osata..)

Antti Laaksonen [14.01.2011 10:57:26]

#

AkeMake kirjoitti:

Eli et suosittele PHP:tä koska se on 'purkkakieli' etkä Javaa, koska se vaatii "jotain järeämpää kuin tavallisen webhotellin"? Tämä tarkoittaa silloin sitä, että joudun opiskelemaan jonkin minulle täysin uuden ohjelmointikielen, koska en muita osaa kuin PHP:tä sekä hiukan Javaa..

Metabolix ei suosittele PHP:tä, mutta tämä ei tarkoita, että sitä ei voisi käyttää. Mille tahansa kielelle löytyy sekä kannattajia että vastustajia. Esimerkiksi minun mielestäni PHP on yksi parhaimmista ohjelmointikielistä (ja olen ohjelmoinut paljon ja käyttänyt monia kieliä). Näinkin erilaiset näkemykset selittyvät sillä, että ohjelmointikielen hyvyys on mielipideasia eikä mikään tieteellinen totuus.

kaviaari [14.01.2011 11:04:24]

#

AkeMake kirjoitti:

Se oli kai Javan alkeiskurssi (Jyväskylän yliopiston Ohjelmointi 1 -kurssi) ja tänä keväänä käyn sitten Ohjelmointi 2 -kurssin, jossa pääsee syvemmälle Javaan. Jokohan siellä oppisi soveltamaan opittua netissä.

Ohjelmointi 2-kurssin päälle voi lukea 1 op jatkokurssin JSP:tä. Käydään läpi perusasiat dynaamisten veppisivujen tekemisestä javalla.

Metabolix [14.01.2011 15:35:38]

#

AkeMake kirjoitti:

Eli et suosittele PHP:tä koska se on 'purkkakieli' etkä Javaa, koska se vaatii "jotain järeämpää kuin tavallisen webhotellin"?

Suosittelen Javaa joihinkin tarkoituksiin, mutta en voi suoraan suositella sitä juuri sinulle juuri tuohon projektiin, koska en tiedä ollenkaan, millainen projekti on kyseessä. Tuo parin sanan kuvauksesi ei kerta kaikkiaan riitä järkevien suositusten tekoon. Webhotelliongelma ei ole syy olla suosittelematta Javaa, vaan se on sinun puoleltasi syy olla käyttämättä sitä, jos et omista omaa palvelinta.

Käytätpä sitten mitä tahansa, panosta kunnolla suunnitteluun ja rakenteiden selkeyteen ja hanki sopivat ohjelmointityökalut. Jos kieli ei ole käännettävä, pidä kaikki virheilmoitukset näkyvissä ja ole jatkuvasti tarkkana; bugin korjaaminen kestää moninkertaisesti siihen nähden, että koodin kirjoittaisi kerralla oikein. Skriptikielillekin on jonkinlaisia analysaattoreita, joilla voi paikata edes jonkin osan tarkistuksista, joista Javassa vastaisi kääntäjä.

Yksi PHP:n ja muiden skriptikielten suurimmista ongelmista on, että jos koodiin tekee jälkikäteen muutoksia, on erittäin hankala varmuudella löytää kaikki kohdat, joihin muutos vaikuttaa. Tästä seuraa PHP:ssä usein ajon aikana "fatal error", josta näkyy pelkkä rivinumero eikä lainkaan edes funktiokutsuja, jotka ovat sinne johtaneet. Juuri tällaisten ongelmien metsästykseen menee kokemukseni mukaan kohtuuttomasti aikaa: kohtalaisen kokoisessa projektissa yhden funktion nimen tai parametrien muuttaminen kestää PHP:n kanssa helposti vartin heti ja tunnin lisää noiden fatal erroreiden muodossa, kun Java-projektissa sama asia voi onnistua minuutissa esim. Eclipsen automaattisella työkalulla ilman jälkiseuraamuksia.

Vielä lisää päänsärkyä aiheuttavat heikosti tyypitettyjen kielten (erityisesti PHP:n) oudot piirteet, joiden takia virheistä ei tule edes ilmoitusta vaan vain outoa käytöstä. Tiedätkö, mitä seuraava koodi tekee?

$x = "ABCD";
$y = "ABCD";
echo $x[$y];

Antti Laaksonen kirjoitti:

Metabolix ei suosittele PHP:tä, mutta tämä ei tarkoita, että sitä ei voisi käyttää.

Niin, usein sitä onkin jo esimerkiksi webhotellin tai työnantajan rajoitusten takia pakko käyttää. Silloin kannattaa kuitenkin edes olla mahdollisimman hyvin perillä kaikista sen ongelmista, jottei tee turhia bugeja ja joudu niitä korjaillessaan Uolevin tavoin raivonhallintaterapiaan. (Tästä saisikin taustatarinan jollekin putkapostille...)

Antti Laaksonen kirjoitti:

Ohjelmointikielen hyvyys on mielipideasia eikä mikään tieteellinen totuus

Ohjelmointikielen hyvyyttä voidaan kyllä mitata monenlaisilla objektiivisillakin mittareilla. Yksi on helppous aloittelijan kannalta (eli yksinkertaiseen sivuun vaadittava työmäärä), ja tässä PHP toki pesee monet muut. Tosielämässä ja etenkin taitojen karttuessa tärkeämpi seikka on kuitenkin se, kuinka paljon aikaa menee hukkaan kielestä ja työkaluista johtuvien bugien takia, ja tällä mittarilla PHP on kokeilemistani kielistä vihoviimeisiä.

Grez [14.01.2011 15:50:45]

#

Mielestäni PHP on verrattavissa lähiöihin, Eppu Normaalia mukaellen:

Kai tää on kieli nasta - en tiedä paremmasta...

AkeMake [15.01.2011 14:37:24]

#

En tiedä olisiko kannattanut kuitenkaan, mutta laitoinpa nyt nuo sivuston php-tiedostotkin näkyviin.. Tiedän, ettei se todellakaan ole hyvää PHP-koodia.. Varsinkin sisällön haun sivulle olen toteuttanut todella väärin (container.php) if.. else if...
En siis toivo saavani kommenttia, että surkeaa koodia, vaan lähinnä joitain pikku neuvoja parempaan koodiin ja sitten neuvoja miten noita tietoturva-aukkoja voisi paikata. Miten esimerkiksi joku pääsi toissapäivänä käsiksi tietokantani tekstitauluihin ja miten sen voi estää?

jimi-kimi kirjoitti:

tai palkata asiansa osaava koodari tekemään ne vaikeat hommat. Internet on täynnä harmaahattuisia freelance koodareita ja hintakaan ei nyt "niin hirveä" ole, jos tuolla bisneksellä rahaakin ollaan tekemässä.

Tässä vaiheessa minulta menisi hommat alta. Minun etuni tässä projektissa on kuitenkin se, että opiskelen yliopistossa juuri sitä alaa mitä sivusto tulisi vahvasti käsittelemään ja samalla omatoimisesti opettelen koodaamista, joten voin tehdä juuri sillä tavalla toimivan sivun kuin kuuluukin.. (Olisi vaikeaa olla erikseen henkilö, joka selittää koodarille, mitä minkäkin funktion pitäisi laskea.)

lainaus:

Jos ollaan kehittelemässä "jotain suurta", niin silloin muutaman sadan rahan säästö tuskin on enää kovin merkittävässä asemassa.. Edes suunnitteluvaiheessa.

Tarkoitus olisi aloittaa pienestä ja minimibudjetilla ja katsella olisiko tuolla idealla potentiaalisia mahdollisuuksia menestyä. Vaikka kuinka pienestä lähdemmekin liikkeelle niin haluan tehdä sivuston sellaiselle pohjalle, että siitä pystyy halutessaan laajentamaan toimintaa suurempaankin mittakaavaan. Vaatii valtavasti opettelemista, mutta haluja siihen löytyy.. (Eikä tällä projektilla niin kiire ole, että voin samalla sivuja luodessa myös rauhassa opiskella näitä asioita)

lainaus:

Tekstin koosta: miksi juuri valitsimessa koko on "kovakoodattu" pikseleinä, tyylimääreet HTML:n sekaan upotettuina?

Jaa-a.. Mikä lie älynväläys tuokin minulta. :-/ Ja tyylimääreet nyt tuli sinne laiskuuttani nakattua.. Nyt kun palautetta tulee noin paljon niin alan huomaamaan kuinka paljon yleensäkin sivuja tehdessä oion. Pitää kyllä tästä "mennä mistä aita on matalin" -tyylistä päästä eroon.

eq kirjoitti:

[Sisällön kätkeminen javascript-komentosarjojen taakse ei ole käytettävyyttä.

Ja tälle vaihtoehto?

kaviaari kirjoitti:

Ohjelmointi 2-kurssin päälle voi lukea 1 op jatkokurssin JSP:tä. Käydään läpi perusasiat dynaamisten veppisivujen tekemisestä javalla.

Laitanpa muistiin. :)


Projektin ideana on käyttäjien antamien tietojen mahdollisimman monipuolinen tutkiminen, joten ajattelin, että kannattaisi tehdä jokin rakennelma joka tutkii koko sivuston datan läpi esim. kerran kahdessa tunnissa ja laittaa muistiin esiin tulleet merkitykselliset tulokset. Toinen vaihtoehto minulla oli mielessä, että jokaisella kävijän sivunlatauksella tutkitaan yksi tai kaksi eri dataa tietokannasta ja näin saataisiin jaettua datan tutkiminen tasaisesti jokaisen kävijän riesaksi. Ensimmäisessa esittämässäni vaihtoehdossa on kuitenkin se etu, ettei jouduttaisi rasittamaan kävijöiden selaimia ylimääräisillä toiminnoilla. Jos siis teen tuon ensimmäisen esimerkin mukaan (ohjelma, joka pyörittää itsensä läpi automaattisesti määrätyin väliajoin ja tutkii tietokannan dataa halutuin ehdoin sekä kirjoittaa merkitykselliset tulokset muistiin.), niin millä kielellä se kannattaisi tehdä?

jimi-kimi [15.01.2011 15:18:03]

#

AkeMake kirjoitti:

En siis toivo saavani kommenttia, että surkeaa koodia, vaan lähinnä joitain pikku neuvoja parempaan koodiin ja sitten neuvoja miten noita tietoturva-aukkoja voisi paikata. Miten esimerkiksi joku pääsi toissapäivänä käsiksi tietokantani tekstitauluihin ja miten sen voi estää?

Vastasin tähän jo aiemmin -> SQL-injection.

AkeMake kirjoitti:

jimi-kimi kirjoitti:

tai palkata asiansa osaava koodari tekemään ne vaikeat hommat. Internet on täynnä harmaahattuisia freelance koodareita ja hintakaan ei nyt "niin hirveä" ole, jos tuolla bisneksellä rahaakin ollaan tekemässä.

Tässä vaiheessa minulta menisi hommat alta. Minun etuni tässä projektissa on kuitenkin se, että opiskelen yliopistossa juuri sitä alaa mitä sivusto tulisi vahvasti käsittelemään ja samalla omatoimisesti opettelen koodaamista, joten voin tehdä juuri sillä tavalla toimivan sivun kuin kuuluukin.. (Olisi vaikeaa olla erikseen henkilö, joka selittää koodarille, mitä minkäkin funktion pitäisi laskea.)

Ei koodareille selitetä mitä minkäkin funktion kuuluu tehdä, vaan se mitä halutaan saada aikaiseksi.. Jos nyt et oikeasti tajunnut mitä tarkoitin niin ollaan menossa metsään ja pahasti. Sinun PITÄÄ pystyä selittämään jollekkin toiselle mitä haluat saada aikaiseksi, että voit edes alkaa haaveilemaan sen itse tekemisestä. Kokeneet "koodarit" pystyvät kristallipallon avulla tekemään jotain sinne päin vaillinaisillakin tiedoilla.. Pystytkö sinä?

Suosittelen tekemään seuraavanlaisen suunnitelman:
Ongelma:
-Ongelman osa #1
--Ongelman osa #1.1
--Ongelman osa #1.2
---Ongelman osa #1.2.1

-Ongelman osa #2
--Ongelman osa #2.1
---Ongelman osa #2.1.1
--Ongelman osa #2.2

= pilko ongelma pienempiin osiin kunnes tiedät mitä olet tekemässä, tai paremminkin mitä pitäisi tehdä, jotta ongelma ratkeaa. Pienempien ongelmien ratkaisu saa aikaan suuremmankin ongelman ratkeamisen.

AkeMake kirjoitti:

Vaikka kuinka pienestä lähdemmekin liikkeelle niin haluan tehdä sivuston sellaiselle pohjalle, että siitä pystyy halutessaan laajentamaan toimintaa suurempaankin mittakaavaan. Vaatii valtavasti opettelemista, mutta haluja siihen löytyy..

Ei onnistu vuosiin. Taino riippuu ihan siitä hartioiden välisestä loisesta. Kommenttini lannistaa ja sen onkin tarkoitus tavallaan lannistaa siinä määrin, että tekisit jotain helpompaa aluksi.

AkeMake kirjoitti:

eq kirjoitti:

Sisällön kätkeminen javascript-komentosarjojen taakse ei ole käytettävyyttä.

Ja tälle vaihtoehto?

Nyt ihan oikeasti..


Tajusin viimeisestä kappaleesta seuraavan määrän: 0

Grez [15.01.2011 15:27:16]

#

jimi-kimi kirjoitti:

AkeMake kirjoitti:

Vaikka kuinka pienestä lähdemmekin liikkeelle niin haluan tehdä sivuston sellaiselle pohjalle, että siitä pystyy halutessaan laajentamaan toimintaa suurempaankin mittakaavaan. Vaatii valtavasti opettelemista, mutta haluja siihen löytyy..

Ei onnistu vuosiin. Taino riippuu ihan siitä hartioiden välisestä loisesta. Kommenttini lannistaa ja sen onkin tarkoitus tavallaan lannistaa siinä määrin, että tekisit jotain helpompaa aluksi.

No onhan tässä se konkreettinen mahdollisuus, että aloittaja tekee nyt harjoittelu/aloitteluprojektin nykyisellä osaamistasollaan. Koodaa sen sitten vuoden päästä kokonaan uudelleen kun on oppinut perustaidot ja sitten taas parin vuoden päästä koodaa kokonaan uudelleen kun on oppinut kunnolla. Siis nämä sillä oletuksella että koodaa paljon tuon kolmen vuoden aikana ja samalla hankkii aktiivisesti uutta tietoa, eikä vain toista vanhaa.

Ohjelmointi on sellainen asia jota ei vaan voi kenellekään kaataa päähän.
Kannattaa lukea: http://norvig.com/21-days.html

AkeMake [15.01.2011 19:05:22]

#

jimi-kimi kirjoitti:

Vastasin tähän jo aiemmin -> SQL-injection.

Ai niin, tosiaan.

lainaus:

Ei koodareille selitetä mitä minkäkin funktion kuuluu tehdä, vaan se mitä halutaan saada aikaiseksi..

"Tuohon kohtaan haluan satunnaisesti valitun huomion kahden tuloksen välisestä erikoisuudesta joukosta, joiden tulosten väliseksi erikoisuudeksi on laskettu yli 70%. Ja tämä erikoisuus-"mittari" on sitä suurempi mitä pienempi on kahden tuloksen välinen variaatiokerroin tapauksissa, joissa otetaan huomioon ainoastaan kävijät, jotka kuuluvat samaan kategoriaan. Lisäksi erikoisuus on sitä suurempi mitä useampi kävijöistä kuuluu samaan kategoriaan suhteessa kaikkiin ensimmäisessä tuloksessa huomioonotettaviin kävijöihin."
En nyt keksinyt parempaa termiä tuolla erikoisuus-mittarille, mutta kyseessä on kuitenkin koodarin koodaama mittari, jonka perusteella datasta etsitään mielenkiintoiset tulokset..

On siis varmasti paljon parempi, että on mahdollisimman vähän ylimääräisiä välikäsiä itse projektin idean ja valmiiin sivuston välissä. Minä tiedän millaista tulosta datasta halutaan ja minulla on halua myös opetella se koodaamaan. Ulkopuoliselle koodarille voisi olla haasteellista koodailla nämä variaatiokertoimet yms. ja saada niiden avulla ulos haluttu tulos.

lainaus:

Ei onnistu vuosiin. Taino riippuu ihan siitä hartioiden välisestä loisesta. Kommenttini lannistaa ja sen onkin tarkoitus tavallaan lannistaa siinä määrin, että tekisit jotain helpompaa aluksi.

Ei onnistu vuosiin luoda pohjaa tälle sivustolle? Jokatapauksessa teen parhaani sivuston eteen ja pyrin oppimaan samalla mahdollisimman paljon uutta. Eikö nuo tekemäni Suvirannan sivut olleet sitä "helpompaa"? Tarkoitus on tähän alkuun tehdä kuitenkin suht' yksinkertainen sivusto.. Onhan tuo iso harppaus minulle, mutta yritän kuitenkin saada homman toimimaan mahdollisimman hyvin.

lainaus:

Nyt ihan oikeasti..

Tarkoitin, että pudotusvalikon piilotus ja näyttäminen checkboxin perusteella ei toimi järkevästi ainakaan PHP:llä sillä sivua ei ole näissä tilanteissa järkevää ladata uudestaan ja muista ohjelmointikielistä ei vielä ole kokemusta, joten JavaScript on tällä hetkellä minun ainoa tapani toteuttaa näkyviä muutoksia sivulla lataamatta sivua uudestaan.

lainaus:

Tajusin viimeisestä kappaleesta seuraavan määrän: 0

Eli tietokantaa pitäisi tutkia todella laajasti ja monelta kantilta. Tätä tutkimusta ei varmaankaan ole järkevää laittaa kävijöiden selainten riesaksi niin, että jokaisella sivunlatauksella tietokannasta tutkittaisiin jokin pieni osa. Varmastikin järkevintä on tehdä jokin ohjelma, joka tutkii tietokantaa koko ajan itsekseen eikä kuormita millään tavoin kävijöiden selaimia. Eli se pyörisi taustalla.. Millähän kielellä tuollaisen ohjelman pystyisi / olisi järkevää tehdä?

Metabolix [15.01.2011 19:24:29]

#

AkeMake kirjoitti:

Eikö nuo tekemäni Suvirannan sivut olleet sitä "helpompaa"?

Olivat, ja niiden laadun perusteella on helppo todeta, että sinun pitää harjoitella lisää. Ei riitä, että olet kerran tehnyt jotain, vaan sinun pitää tehdä niitä helppoja asioita, kunnes ne onnistuvat oikeasti hyvin.

AkeMake kirjoitti:

Tätä tutkimusta ei varmaankaan ole järkevää laittaa kävijöiden selainten riesaksi

Et voi PHP:llä laittaa mitään "käyttäjän selaimen riesaksi". Nyt taitaa olla todella vakava aukko ihan perusymmärryksessä.

AkeMake kirjoitti:

pudotusvalikon piilotus ja näyttäminen checkboxin perusteella

Oikea ratkaisu on oletuksena näyttää kaikki vaihtoehdot ja laittaa viereen ohje ("jos vastasit edelliseen "ei", voit ohittaa seuraavan kohdan"). JavaScriptilla voi sitten piilottaa ylimääräiset kohdat sivun latautuessa.

AkeMake kirjoitti:

Olisi vaikeaa olla erikseen henkilö, joka selittää koodarille, mitä minkäkin funktion pitäisi laskea.

Tekisi hyvää opetella selittämään omia ajatuksia niin hyvin, että muutkin ymmärtävät ne. Tästä on hyötyä sekä jokapäiväisessä elämässä että ohjelmoinnissa, jossa asiat pitää selittää niin selvästi, että konekin "ymmärtää" ne. Mielenkiintoinen fakta on, että koodin laatu ja foorumilla esitettyjen kysymysten selkeys usein korreloi melko hyvin niin, että jos kysymyksestä ei saa mitään selvää, yleensä koodistakaan ei hirveästi saa (ellei sitä ole törkeästi kopioitu jostain).

AkeMake [15.01.2011 19:50:28]

#

lainaus:

Olivat, ja niiden laadun perusteella on helppo todeta, että sinun pitää harjoitella lisää.

Tuon kyllä tiesin sanomattakin. Ja termillä "onnistuvat oikeasti hyvin" todennäköisesti tarkoitat muutakin kuin pelkkää toimimista.. Mielestäni olen kuitenkin sanonut, että olen valmis opettelemaan kovastikin ohjelmointia eikä tällä projektilla ole niin valtava kiire, että se pitäisi saada heti valmiiksi. Voin siis samalla melko paljonkin opiskella (No en tietysti useita vuosia, mutta kuitenkin..). Tämän idean isä painostaa projektin etenemistä kuitenkin sen verran, etten ehdi useita pienempiä juttuja tehdä, vaan hän haluaisi että aloitellaan jo sivuja..

lainaus:

Et voi PHP:llä laittaa mitään "käyttäjän selaimen riesaksi". Nyt taitaa olla todella vakava aukko ihan perusymmärryksessä.

Miksen voisi? Otan vain jokaisen sivunlatauksen alussa pari riviä tietokannasta, tutkin niistä tarvittavat asiat ja mikäli jotain merkittävää ilmeni niin laitan siitä tiedon muistiin johonkin tauluun. Tämän jälkeen näytetään kävijälle itse sivu. Tuollainen jos mikä on mielestäni turhaan kävijän riesana. En kylläkään vieläkään saanut vastausta, että millä kielellä sellaisen taustalla pyörivän ohjelman voisi / kannattaisi tehdä.

lainaus:

JavaScriptilla voi sitten piilottaa ylimääräiset kohdat sivun latautuessa.

Eikö juuri tämä JavaScript:n avulla piilottaminen ollut sitä "huonoa käytettävyyttä"?

lainaus:

Tekisi hyvää opetella selittämään omia ajatuksia niin hyvin, että muutkin ymmärtävät ne.

Tuolla esimerkillä oli siis tarkoitus havainnollistaa sitä, että tällä ulkopuolisella koodarilla olisi varmastikin huomattavia vaikeuksia koodata funktioita, jotka laskevat sellaisia vaikeita matemaattisia laskuja, jotka tuottaisivat matemaatikollekin päänvaivaa. Huomattavan paljon helpommalla pääsisi, jos löytyisi joku matemaatikko, joka osaa valmiiksi koodata. Juuri tämän tyyppisiä ongelmia tulisi mikäli tähän väliin palkattaisiin vielä yksi välikäsi ja tässä esimerkissä minä olen se "koodaava matemaatikko"..

Antti Laaksonen [15.01.2011 19:53:57]

#

Minusta ei ole mikään ongelma, vaikka projektin vaativuus ylittäisi selvästi tekijän senhetkiset taidot. Päinvastoin vaativa projekti voi opettaa hyvin paljon asioita. Olennaista on, että tekijällä on voimakas halu saattaa projekti loppuun ja opetella siihen tarvittavat taidot.

Esimerkiksi kun itse aloin toteuttaa Ohjelmointiputkaa, osasin vaivoin PHP:n alkeet eli taidot olivat täysin riittämättömät projektiin. Olisiko minun pitänyt jäädä harjoittelemaan helppoja asioita ja avata Ohjelmointiputka viiden vuoden kuluttua?

Grez [15.01.2011 19:58:05]

#

AkeMake kirjoitti:

Tuolla esimerkillä oli siis tarkoitus havainnollistaa sitä, että tällä ulkopuolisella koodarilla olisi varmastikin huomattavia vaikeuksia koodata funktioita, jotka laskevat sellaisia vaikeita matemaattisia laskuja, jotka tuottaisivat matemaatikollekin päänvaivaa.

Voisihan se matemaatikko koodata funktion, joka laskee sen "erikoisuuden". Kyllä ainakin minä osaisin soveltaa sitten sitä koodissa.

Hyväksi ohjelmoijaksi tuleminen ei ole sen helpompaa kuin hyväksi matemaatikoksi tuleminen. Näin ollen matemaatikko, joka alkaa opetella koodaamista ei ole sen parempi lähtökohta ongelmasi ratkaisemiseen, kuin koodari, joka alkaa opetella matematiikkaa. Paras lähtökohta olisi matemaatikko ja koodari jotka ymmärtävät toisiaan.

Antti Laaksonen kirjoitti:

Minusta ei ole mikään ongelma, vaikka projektin vaativuus ylittäisi selvästi tekijän senhetkiset taidot. Päinvastoin vaativa projekti voi opettaa hyvin paljon asioita.

No niinhän se onkin. Omaan tarpeeseen koodaaminen on erittäin hyvä lähtökohta oppia koodaamista, koska silloin olettaisin sen olevan oikeasti kiinnostavaa. Mutta jos projektista olisi tarkoitus kerralla tulla sellainen, minkä kokenut koodari pystyy tekemään, niin se ei vaan onnistu kerralla.

Käsittääkseni ohjelmointiputkan koodiakin on siistitty sen ensimmäisen tekokerran jälkeen. Kuten jo aikaisemmin tähän kirjoitin, niin helposti ylläpidettävä laaja järjestelmä voi hyvinkin toteutua kunhan koodin uudelleenkirjoittaa pariin kertaan sitä mukaa kun ymmärrys kasvaa...

Antti Laaksonen [15.01.2011 20:28:33]

#

Totta, koodia joutuu varmasti kirjoittamaan uudestaan. Toisaalta tätä tekevät kaikki ohjelmoijat, myös ammattilaiset.

AkeMake [15.01.2011 20:32:55]

#

lainaus:

Näin ollen matemaatikko, joka alkaa opetella koodaamista ei ole sen parempi lähtökohta ongelmasi ratkaisemiseen, kuin koodari, joka alkaa opetella matematiikkaa. Paras lähtökohta olisi matemaatikko ja koodari jotka ymmärtävät toisiaan.

Näinhän se on, mutta eikö paras lähtökohta olisi, että tämä matemaatikko ja koodari olisivat yksi ja sama henkilö, niin kuin tässä minun tapauksessani on. Tai ei minua voi vielä koodariksi kutsua, mutta esimerkkini idea pitäisi nyt jo viimeistään olla selvänä??

lainaus:

Omaan tarpeeseen koodaaminen on erittäin hyvä lähtökohta oppia koodaamista, koska silloin olettaisin sen olevan oikeasti kiinnostavaa.

Niin kuin tässä minun tapauksessani..

lainaus:

Kuten jo aikaisemmin tähän kirjoitin, niin helposti ylläpidettävä laaja järjestelmä voi hyvinkin toteutua kunhan koodin uudelleenkirjoittaa pariin kertaan sitä mukaa kun ymmärrys kasvaa...

Juu, ei siitä sivusta voi tietysti ensimmäisellä kerralla täydellistä tulla, joten joudun osaamisen kasvaessa uudelleenkirjoittamaan sivuja yhä uudestaan. On silti varmastikin hyvä aloittaa mahdollisimman "pätevästi", ettei myöhemmin ole ihan niin paljon uudelleenkirjoitettavaa. Mitä saisinkaan aikaiseksi, jos lähtisin noiden Suvirannan sivujen jälkeen sokeasti koodaamaan tätä projektia? Ei mitään järkevää ja joutuisin koodailemaan koko homman useita kertoja uudestaan. Tämän vuoksi tulinkin tänne kyselemään neuvoja aloittamista varten ja pitkin projektia pyrin opettelemaan uutta mahdollisimman paljon.

Metabolix [15.01.2011 20:34:11]

#

AkeMake kirjoitti:

Eikö juuri tämä JavaScript:n avulla piilottaminen ollut sitä "huonoa käytettävyyttä"?

Ei. JavaScriptin avulla näyttäminen on huonoa käytettävyyttä, koska silloin käyttäjältä jää asioita näkemättä. Jos kaikki on oletusarvoisesti näkyvissä, ongelmaa ei ole.

AkeMake kirjoitti:

Miksen voisi [laittaa laskuja selaimen riesaksi]?

Eivät ne laskut selainta riesaa millään tavalla, koska työ tapahtuu palvelimella. Käyttäjää ne toki voivat riesata, jos sivun latautuminen niistä hidastuu.

Tuollainen pala kerrallaan tapahtuva laskenta on monissa tapauksissa hankalampi toteuttaa kuin keskitetty laskenta. Mitä tapahtuu esimerkiksi silloin, kun monta henkilöä lataa sivuja samaan aikaan? Jotenkin joudut koordinoimaan, että samaa laskua ei tehdä moneen kertaan, ja tästä tulee helposti ongelmia.

Antti Laaksonen kirjoitti:

Olisiko minun pitänyt jäädä harjoittelemaan helppoja asioita ja avata Ohjelmointiputka viiden vuoden kuluttua?

Ei suinkaan. Mutta kun Ohjelmointiputka aukesi, oliko ensimmäinen ajatuksesi, että "menipä hyvin, seuraavaksi voinkin tehdä miljoonabisneksen"?

Othnos [15.01.2011 20:36:55]

#

Tervehdys AkeMake.

AkeMake kirjoitti:

Miksen voisi? Otan vain jokaisen sivunlatauksen alussa pari riviä tietokannasta, tutkin niistä tarvittavat asiat ja mikäli jotain merkittävää ilmeni niin laitan siitä tiedon muistiin johonkin tauluun. Tämän jälkeen näytetään kävijälle itse sivu. Tuollainen jos mikä on mielestäni turhaan kävijän riesana. En kylläkään vieläkään saanut vastausta, että millä kielellä sellaisen taustalla pyörivän ohjelman voisi / kannattaisi tehdä.

PHP suoritetaan palvelimella, ei käyttäjän selaimessa, mutta jos tosiaan laitat php:n numeroita murskaamaan, niin käyttäjä saa sivun vasta, kun serveri on suorittanut kyseiset kohdat tai ylittänyt sallitun suoritusajan.

AkeMake kirjoitti:

Eikö juuri tämä JavaScript:n avulla piilottaminen ollut sitä "huonoa käytettävyyttä"?

Ei, koska käyttäjät ilman javascriptiä saisivat myös mahdollisuuden käyttää sivua, mutta toisaalta käyttäjät joilla javascript on käytössä saisivat lisää käytettävyyttä.

edit: Metabolix kerkesi ensin

AkeMake [15.01.2011 21:05:13]

#

Metabolix kirjoitti:

Ei. JavaScriptin avulla näyttäminen on huonoa käytettävyyttä, koska silloin käyttäjältä jää asioita näkemättä. Jos kaikki on oletusarvoisesti näkyvissä, ongelmaa ei ole.

Sitähän minäkin! Miksi minua sitten syytetään huonosta käytettävyydestä, sillä juuri noinhan sen olen sivuilla toteuttanutkin? Kaikki on oletusarvoisesti näkyvissä ja JavaScriptillä piilotetaan turhat.

lainaus:

Mutta kun Ohjelmointiputka aukesi, oliko ensimmäinen ajatuksesi, että "menipä hyvin, seuraavaksi voinkin tehdä miljoonabisneksen"?

Nytkö siitä sitten tuli miljoonabisnestä? Aivan alussa on tarkoitus tehdä tämä sivusto pienessä mittakaavassa ja siinä samalla katsotaan onko idealla potentiaalisia mahdollisuuksia menestyä. Sitten toimintaa (sivustoa) laajennetaan pikkuhiljaa osaamisen ja/tai menestyksen kasvaessa (tai räjähdysmäisen suosion tapahtuessa palkataan oikeat koodarit asialle ja minä siirryn tienaamispuolelle tämän alussa tehdyn sopimuksen ansiosta).

lainaus:

PHP suoritetaan palvelimella, ei käyttäjän selaimessa, mutta jos tosiaan laitat php:n numeroita murskaamaan, niin käyttäjä saa sivun vasta, kun serveri on suorittanut kyseiset kohdat tai ylittänyt sallitun suoritusajan.

Tiesin toki, että kävijä saa sivun vasta kun serveri on suorittanut nämä koodit. Sen vuoksi se kävijän riesana olisikin. Tuli kyllä tosiaan pieni haksahdus, kun menin lipsauttamaan, että se tietokantaa tutkiva koodi olisi kävijän selaimen riesana.. Mutta millä kielellä sen ohjelman saisi toteutettua taustalla (vähän samaan tyyliin kuin esim. jokin hakukonebotti, joka tutkii itsekseen nettisivuja läpi)??

Othnos [15.01.2011 21:20:08]

#

AkeMake kirjoitti:

Mutta millä kielellä sen ohjelman saisi toteutettua taustalla (vähän samaan tyyliin kuin esim. jokin hakukonebotti, joka tutkii itsekseen nettisivuja läpi)??

Osoitteesta http://dev.mysql.com/usingmysql/ löytyy useita ohjelmointikieliä mysql-tietokannoille, joilla voit toteuttaa ohjelman "taustalla".

jimi-kimi [15.01.2011 22:49:06]

#

Alkaa pikkuhiljaa vaikuttamaan, että ohjelma jonka haluat toteuttaa ei ole LUULTAVASTI kenenkään täällä toteutettavissa. Ohjelmistokokonaisuus, joka itsekseen tutkii dataa "parhaimman mahdollisen tuloksen" saamiseksi "kaikilla mahdollisilla tavoilla" ydinfyysikon algoritmien perusteella ei vaan ole omilla resursseillasi järkevästi toteutettavissa.

Pointti:
Kunnes keksit järkevästi muotoillun ja esitetyn kysymyksen -> voisit lukea tämän langan kaikki viestit alusta lähtien huolella uudelleen. Itse en ainakaan keksi enää mitään lisättävää teidän "miljoonabisnekseen" tai sen mahdollistavan ohjelman toimintaan. Olisi tähänkin esimerkki, mutta empä tiedä..

Et kuitenkaan tajua mitä haen takaa ilman.

lainaus:

Meil ois mahtava idea mikä tuottaa miljoonia mut ei haluta käyttää siihe rahaa ennenku se tuottaa miljoonii. Kuitenki se pitäs tehä ja sit ei haluta käyttää siihe oikeit työkalui ku ne on vaikeempii ja maksaa rahaa..

Lisättävää? Anyone?

eq [15.01.2011 23:03:22]

#

AkeMake kirjoitti:

Sitähän minäkin! Miksi minua sitten syytetään huonosta käytettävyydestä, sillä juuri noinhan sen olen sivuilla toteuttanutkin? Kaikki on oletusarvoisesti näkyvissä ja JavaScriptillä piilotetaan turhat.

Tjoo, en edes löytänyt pikaisella haulla tätä kyselyä josta kaikki puhuivat. Lyhyt sivuhuomioni keskittyi sähköpostiosoitteiden näyttämiseen.

Toki voi olettaa, että siinä erikoistapauksessa, että käyttäjä haluaa nähdä sähköpostiosoitteet, ei JavaScript-komentosarjojen kytkeminen päälle ole liikaa pyydetty. Näin ei olekaan; mutta tällä sähköpostiosoitteiden kätkemisellä (boteilta) saavutetaan hyvin vähän; käytettävyyden kannalta paljon parempi vaihtoehto on saattaa osoitteet saataville muillekin - jos ei muuten, niin vaikka kuvamuodossa. Tulevaisuuden www-nuuskijat saattavat hyvin suorittaa komentosarjatkin (OK, tämä voi olla hieman kaukaa haettua..), joten aivan turvassa eivät osoitteet ole tuossa nykyisessäkään muodossa.

(Huomasin asian sattumalta kun katsoin koodipuolelle Yhteydenotto-sivulla - ja mainitsin siitä viestissäni ohimennen)

Antti Laaksonen [15.01.2011 23:06:26]

#

Metabolix kirjoitti:

Ei suinkaan. Mutta kun Ohjelmointiputka aukesi, oliko ensimmäinen ajatuksesi, että "menipä hyvin, seuraavaksi voinkin tehdä miljoonabisneksen"?

Taitaa mennä vielä monta vuosikymmentä, ennen kuin voimme käydä ostamassa Lamborghinit.

Sinänsä minusta tuntuu, että idea on tärkeämpi kuin tekninen osaaminen. Esimerkiksi tämän sivun tekijä sai miljoona dollaria:

http://www.milliondollarhomepage.com/

Validaattori antaa 3618 virhettä ja 3360 varoitusta:

http://validator.w3.org/check?uri=http://www.milliondollarhomepage.com/&charset=(detect automatically)&doctype=Inline&group=0

AkeMake [15.01.2011 23:32:08]

#

jimi-kimi kirjoitti:

Ohjelmistokokonaisuus, joka itsekseen tutkii dataa "parhaimman mahdollisen tuloksen" saamiseksi "kaikilla mahdollisilla tavoilla" ydinfyysikon algoritmien perusteella ei vaan ole omilla resursseillasi järkevästi toteutettavissa.

Jos et nyt vielä huomannut, niin minä olen se kutsumasi "ydinfyysikko". Enköhän siis tiedä millaisia algoritmeja mihinkin tarvitaan. Dataahan ei siis tarvitse tutkia "kaikilla mahdollisilla tavoilla" vaan tietyillä tavoilla, jotka minä osaan kyllä määritellä. Mitä tulee "parhaan mahdollisen tuloksen" saamiseen, riittää, että ohjelma käy silmukkarakenteisesti kaikkien rivien pariyhdistelmät läpi ja tutkii jokaisessa välissä näillä minun "ydinfyysikon algoritmeillani" parin kiinnostavuuden.

jimi-kimi kirjoitti:

Itse en ainakaan keksi enää mitään lisättävää teidän "miljoonabisnekseen"

Missä ihmeen vaiheessa tästä projektista tuli miljoonabisnestä!?!? Valitettavasti heitin epähuomiossa eräässä vaiheessa ilmoille, että parhaimmassa tapauksessa tästä olisi mahdollista saada aikaiseksi jotain 'bisnestä' (korostaen sanan ympärillä olevia hakasia!). Tämän kommentin jäljiltäkö siitä miljoonabisnestä tuli?
Tarkoitus on edelleenkin lähteä katselemaan, että miten tämä projekti lähtisi mahdollisesti saamaan kiinnostusta. Siitä alkaa tulla 'bisnestä' vasta myöhemmässä vaiheessa, mikäli se saa riittävästi kävijöiden kiinnostusta puoleensa.

eq kirjoitti:

Lyhyt sivuhuomioni keskittyi sähköpostiosoitteiden näyttämiseen.

Jaa, niin se.. Tämän sähköpostiosoitteen salauksen otin suoraan Joomla!:sta ja tietysti ajattelin, että se tällöin on myös pätevä tapa suojata osoite boteilta. Löysittepä silti vain siitäkin jotain sanomista. Pitäisiköhän tässä tilanteessa ohjata huomautuksenne tuonne Joomla!:n kehittäjien puoleen...

Antti Laaksonen kirjoitti:

Sinänsä minusta tuntuu, että idea on tärkeämpi kuin tekninen osaaminen. Esimerkiksi tämän sivun tekijä sai miljoona dollaria

Kiitoksia tuesta. :) Meinaa muuten jo lannistaa nämä kommentit, kun puhutaan, ettei minun kannata edes nähdä päiväunia tällaisesta projektista vielä viiteen vuoteen ja senkin ajan jälkeen on vasta lupa haaveilla asiasta..

AkeMake [18.01.2011 15:57:28]

#

Korjailin hiukan tuolla tekemilläni nettisivuilla joitain semantiikkavirheitä ja kaikki löytämäni SQL-injektiot. Jos teillä sattuu tänään olemaan tylsää, niin toivoisin, että käytte katsastamassa sivut vielä mahdollisten SQL-injektioiden varalta. Jos (kun) niitä vielä löytyy niin toivoisin, ettette ala laittamaan koko sivustoa sekaisin (sellaisen palauttaminen oli viimeksi turhan raskasta) vaan pikemminkin sanotte täällä miltä sivulta löytyy puutteita tietoturvassa ja ehkä vielä opastusta miten se korjattaisiin. PHP-tiedostojen sisältöjä pääsee vilkuilemaan sitten laittamalla osoiteriville GET-muuttuja 'lahdekoodi'.

En alkanut vielä kaikkia semantiikkavirheitä korjailemaan (tai yksinkertaistamaan osoiterivin otsikoita .htaccessilla), mutta loputkin vielä tulen korjailemaan, sillä päätin tehdä tästä työstäni www-julkaiseminen -kurssin harjoitustyön. Pääsee helpolla, kun on sivusto jo valmiina eikä tarvitse korjata kuin kohdat joissa aikaisemmin vedin mutkat suoriksi.. :)
Ja jos ei tiedä mistä sivuista koko viestin ajan olen puhunut, niin linkkiä löytyy aloitusviestistä.

Edit:

jimi-kimi 13.1. klo 20.24 kirjoitti:

Istunto mitenkään suojattu?

Tutkiskelin hiukan miten istuntoa voisi suojata ja huomasin, että tuon käyttämäni kirjautumis / rekisteröitymis -vinkin yhteydessä on myös istunnon suojaus. Jokaisella kirjautumiskerralla käyttäjän tietoihin tallennetaan uusi istuntotunnus ja jokaisella sivunlatauksella tarkistetaan, että istunnon tunnus vastaa käyttäjän tiedoissa olevaa. Kai tämä riittää istunnon suojaukseksi?

reca 13.1. klo 23.23 kirjoitti:

Rekisteröitymisestä
- tarkista, että nimessä on muutakin kuin tyhjää esim. empty()-funktio pitäis toimia (?)
- tarkista, että käyttäjätunnus tai salasana ei ole vain yhtä merkkiä (esim. aaaa)
- pakota viestiin rivivaihdot ja mielellään hylkää viestit joissa ei ole välilyöntiä liian pitkään aikaan. (eli sivuston hajoittavat viestit)

Näitä en ole vielä ehtinyt tehdä. Vaarantuuko tässä sivuston tietoturva vai onko nämä ohjeet vain sitä varten, ettei rekisteröityneen käyttäjän nimi riko sivuston rakennetta?

The Alchemist [18.01.2011 21:13:17]

#

AkeMake kirjoitti:

Tutkiskelin hiukan miten istuntoa voisi suojata ja huomasin, että tuon käyttämäni kirjautumis / rekisteröitymis -vinkin yhteydessä on myös istunnon suojaus. Jokaisella kirjautumiskerralla käyttäjän tietoihin tallennetaan uusi istuntotunnus ja jokaisella sivunlatauksella tarkistetaan, että istunnon tunnus vastaa käyttäjän tiedoissa olevaa. Kai tämä riittää istunnon suojaukseksi?

Kunhan muistat, että jokaisella käyttäjällä pitää voida olla useampi istunto auki yht'aikaa. Rasittavaa, jos koulussa kerran sivustolla käytyään onkin kirjautunut ulos kotikoneella.

Muropaketin uusittu kirjautumissysteemi sallii vain yhden istunnon kerrallaan, ja se aiheuttaa keskustelua aina välillä siellä päin. Itse en pidä siitä ollenkaan.

Yksinkertaisuuden vuoksi käytän eräässä omassa projektissani sellaista metodia, että tunnuksen luomisen yhteydessä tietokantaan luodaan erillinen salainen, käyttäjälle näkymätön tunniste, joka on osana merkkijonoa, josta luodaan cookieen tallennettava hash.

Paranoidiselle tuo ei kelpaa, koska hash on aina sama, joten on olemassa teoreettinen käytännön tapaus, jossa joku ilkeämielinen voisi kopioida hashin talteen keksistä ja sitä kautta murtautua systeemiin.

Kreper [01.02.2011 11:33:49]

#

Tossa aiemmin oli puhetta nettisivuohjelmoinnissa kehittymisen eri mahdollisuuksista. Mun 2 senttiä:

Ite alotin xhtml + css -meiningistä pelkästään. Sitten siirryin PHP/MySQL - maailmaan ja nyt teen Javalla isompaa softaa. Jos mulle joku pikkuprojekti tulis, niin luultavasti Javaa käyttäisin sen tekemiseen. Frameworkeista esim. suomalainen Vaadin on suht helppo ottaa käyttöön.

AkeMake [09.02.2011 19:44:37]

#

The Alchemist kirjoitti:

Kunhan muistat, että jokaisella käyttäjällä pitää voida olla useampi istunto auki yht'aikaa. Rasittavaa, jos koulussa kerran sivustolla käytyään onkin kirjautunut ulos kotikoneella.

Enpä ole vielä sellaiseen sivustoon törmännyt, jossa voisi olla kirjautuneena samalla käyttäjällä yhtä aikaa useammasta eri paikasta. En usko, että tuollaista tarvitsee tälle sivustolle, mutta tuo täytyy laittaa muistiin, jos sitä olisi hyvä käyttää tulevissa projekteissa.

Kreper kirjoitti:

Sitten siirryin PHP/MySQL - maailmaan ja nyt teen Javalla isompaa softaa.

Itse taidan nyt olla jossain tuossa PHP/MySQL ja Java -maailmojen välissä, koska noita kaikkia olen nyt jonkin aikaa opiskellut. Vielä tällä hetkellä tuo PHP/MySQL kuulostaa minusta parhaalta ratkaisulta projektien toteuttamiseen; luultavasti sen takia, että PHP on helppo oppia.


Oli minulla ihan asiaakin. Kun nyt alan pikkuhiljaa tekemään tätä toista projektia niin ensimmäisenä on tullut vastaan kolme ongelmaa, jotka kannattaa ratkaista ennen kuin alan projektia kunnolla aloittamaan: sisällön haku, kieliversiot ja aika.


- Sisällön haku
Sisältöä ei tietenkään kannata tehdä niin kuin tein tuolla aikaisemmalla sivustollani eli index.php:n alla katsotaan mikä get-muuttuja on annettu ja sen mukaan otetaan tietty php-tiedosto paikoilleen. Jo tuossa pikkuprojektissa se vaati hiukan turhan monta if-else kohtaa. :P Suunnittelin nyt jotain sellaista, että luon kantaan taulun, jossa sarakkeet 'tunniste' ja 'tiedosto'. Sitten sivulla katsoo mikä get-muuttuja on annettu ja sillä tunnisteella hakee kannasta oikean tiedoston sisältö-kohtaan. Ei varmaan ole järkevää, koska tuollakaan tavalla osoite ei pysy järkevänä? Sisällön näyttämiselle löytyy varmasti järkevämpiäkin tapoja, mutta mitä? Saisiko jotain lyhyttä simppeliä esimerkkiä?


- Kieliversiot
Katselin vähän tuota PHP:n gettext:iä ja jos en aivan väärin ymmärtänyt niin jokaiseen kielitiedostoon piti laittaa

msgid "Alkuperäinen teksti"
msgstr "Korvattava teksti"

ja PHP:llä piti kirjoittaa print(_("Alkuperäinen teksti")); Tuntuu hankalalta, jos jokaiseen kielitiedostoon pitää kirjoittaa erikseen se sama alkuperäinen teksti, joka korvataan. Vai ymmärsinköhän idean väärin?

Ainakin Joomla!:ssa eri kielitiedostot on samassa language-kansiossa. Kielitiedostot on ini-tiedostoja eli käännetty teksti on tyyliin
HELLO_WORLD=Hei maailma!
ja sitten haluttu käännös haetaan oikeasta tiedostosta JText luokan avulla
$hello_world = JText::_( 'HELLO_WORLD' );

Tuo olisi mielestäni varsin kätevä tapa tehdä käännös. Tarvisin "vain" esimerkkiä miten hakea se haluttu teksti oikeasta tiedostosta ja miten toteuttaa se kielen vaihtaminen? www.sivu.com/fi vai www.fi.sivu.com ja miten tunnistaa tuo osoiterivillä oleva kielipääte? Kielet get-muuttujaan vai jotenkin muuten tai miten onnistuu alidomainin www.fi.sivu.com tapauksessa?

- Aika
Aikaisemmin olen vain pelaillut yhdellä kellonajalla, joka ei muutu, joten olen vain laittanut tietokantaan kellonajan ja hakenut sen tarvittaessa näytölle. Kun kellonaika pitäisi nyt näyttää aikavyöhykkeen mukaan, niin missä muodossa se pitää tallentaa tietokantaan ja miten hakea sieltä? Jotenkin tunnistetaan aikavyöhyke ja lisätään/vähennetään tunteja sen mukaan?

Joukossa oli paljon tyhmiäkin kysymyksiä, mutta ajattelin kysyä kerralla kaikki vähänkään mietityttävät kysymykset. :)

Macro [09.02.2011 20:17:18]

#

AkeMake kirjoitti:

The Alchemist kirjoitti:

Kunhan muistat, että jokaisella käyttäjällä pitää voida olla useampi istunto auki yht'aikaa. Rasittavaa, jos koulussa kerran sivustolla käytyään onkin kirjautunut ulos kotikoneella.

Enpä ole vielä sellaiseen sivustoon törmännyt, jossa voisi olla kirjautuneena samalla käyttäjällä yhtä aikaa useammasta eri paikasta. En usko, että tuollaista tarvitsee tälle sivustolle, mutta tuo täytyy laittaa muistiin, jos sitä olisi hyvä käyttää tulevissa projekteissa.

Mulla toimii esim. Ohjelmointiputka silleen, tiedä sitten mitä osuutta Chromella on asiaan.

Metabolix [09.02.2011 20:21:09]

#

AkeMake, oletko kuullut tabeista tai selainikkunoista? Niillä voi avata monta sivua samaan aikaan. Kielitiedostot olet ymmärtänyt sikäli väärin, että niiden muokkaamiseen on lukuisia työkaluja, jotka lisäävät alkuperäiset tekstit automaattisesti kaikkiin kieliin kerralla. Miten nuo Joomlan tiedostot sinusta eroavat tästä, pitäähän niihinkin kirjoittaa kaikkiin HELLO_WORLD?

progo [09.02.2011 20:38:28]

#

Metabolix kirjoitti:

Miten nuo Joomlan tiedostot sinusta eroavat tästä, pitäähän niihinkin kirjoittaa kaikkiin HELLO_WORLD?

Näin juuri. Yhtä monta kertaa alkuperäisiä on kaikissa ratkaisuissa. Gettext on standardi (ei vain PHP:n hienous, se on sinne adaptoitu *NIX-maailmasta) ja "oikeaoppinen" tapa tehdä käännökset. Ei tarvitse myöskään keksiä kaikelle omaa vakiota kuten tuossa Joomlan tavassa näyttää joutuvan tekemään.

AkeMake [09.02.2011 21:08:23]

#

Viittaatko Metabolix tuohon lainaamaani The Alchemistin tekstiin? Nythän ei tietääkseni ollut kyse sivusta, jota käytetään samalta koneelta, mutta useasta eri välilehdestä. Eikös kyse ollut tapauksesta, jossa samalla käyttäjätunnuksella ollaan kirjautuneena yhtä aikaa useammalta eri koneelta. Eli olen sivustolla kirjautuneena, vaihdan konetta ja kirjaudun sillä sivuille samoilla tunnuksilla, kirjaudun ulos ja kun menen omalle koneelle takaisin niin olen edelleen kirjautuneena sivustolla.

Tuo Joomla!:n tapa tuntuu siinä mielessä yksinkertaisemmalta, että yksi käännös on yhdellä rivillä lyhyesti. Eikö tuo gettext tulosta tuon alkuperäisen arvon (eli se printin sisällä oleva teksti), jos vastaavuutta ei löydy kielitiedostosta? Minusta tuntuu järkevämmältä, että kun tunnistetta HELLO_WORLD ei löydy suomen kielitiedostosta niin tulostettaisiin vastaava oletuksena vaikka englannin kielitiedostosta. Lisäksi tuntuu tyhmältä kuljettaa jotain pitkää englanninkielistä rimpsua (esim. sivujen tervetuloteksti) jokaisen kielitiedoston mukana, kun niissä voisi olla lyhyesti tunniste WELCOME. Varmasti tuossa gettext:ssä on jotain älykkäämpää mistä en tiedä, mutta näillä tiedoillani Joomla!:n tapa vaikuttaisi paremmalta.

Minusta tämä

SEARCH=Hae...
WELCOME=Tervetuloa sivuille!
DB_CONNECT_ERROR=Ei saatu yhteyttä tietokantaan.
WELCOMETEXT=Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin et ligula quis ante aliquet luctus euismod et ipsum. Donec vel tellus velit. Sed adipiscing consequat vulputate. Etiam ac convallis tortor. In gravida tellus nunc. In laoreet interdum rutrum. Nullam sit amet ipsum dui. In nunc tellus, hendrerit non condimentum vitae, facilisis a nibh. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aliquam ac faucibus est. Nunc viverra pharetra justo, quis blandit erat dictum nec. Aliquam venenatis consectetur consectetur. Pellentesque tellus elit, malesuada vitae dictum sed, luctus ut erat. Ut sodales, massa hendrerit consectetur accumsan, velit nisl rutrum diam, eget tincidunt risus tortor eu mi. Nulla aliquet diam at lectus sodales rutrum. Vivamus vehicula semper consectetur. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Pellentesque blandit ante a mi ullamcorper dignissim. Fusce porttitor gravida mi, sit amet tempus erat laoreet vel.

näyttää paljon selkeämmältä kuin tämä

msgid "search"
msgstr "Hae..."
msgid "Welcome to our site!"
msgstr "Tervetuloa sivuille!"
msgid "Could not connect to database."
msgstr "Ei saatu yhteyttä tietokantaan."
msgid "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin et ligula quis ante aliquet luctus euismod et ipsum. Donec vel tellus velit. Sed adipiscing consequat vulputate. Etiam ac convallis tortor. In gravida tellus nunc. In laoreet interdum rutrum. Nullam sit amet ipsum dui. In nunc tellus, hendrerit non condimentum vitae, facilisis a nibh. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aliquam ac faucibus est. Nunc viverra pharetra justo, quis blandit erat dictum nec. Aliquam venenatis consectetur consectetur. Pellentesque tellus elit, malesuada vitae dictum sed, luctus ut erat. Ut sodales, massa hendrerit consectetur accumsan, velit nisl rutrum diam, eget tincidunt risus tortor eu mi. Nulla aliquet diam at lectus sodales rutrum. Vivamus vehicula semper consectetur. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Pellentesque blandit ante a mi ullamcorper dignissim. Fusce porttitor gravida mi, sit amet tempus erat laoreet vel."
msgstr "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin et ligula quis ante aliquet luctus euismod et ipsum. Donec vel tellus velit. Sed adipiscing consequat vulputate. Etiam ac convallis tortor. In gravida tellus nunc. In laoreet interdum rutrum. Nullam sit amet ipsum dui. In nunc tellus, hendrerit non condimentum vitae, facilisis a nibh. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aliquam ac faucibus est. Nunc viverra pharetra justo, quis blandit erat dictum nec. Aliquam venenatis consectetur consectetur. Pellentesque tellus elit, malesuada vitae dictum sed, luctus ut erat. Ut sodales, massa hendrerit consectetur accumsan, velit nisl rutrum diam, eget tincidunt risus tortor eu mi. Nulla aliquet diam at lectus sodales rutrum. Vivamus vehicula semper consectetur. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Pellentesque blandit ante a mi ullamcorper dignissim. Fusce porttitor gravida mi, sit amet tempus erat laoreet vel."

Ainakin tuolla Joomla!:n tavalla kielitiedostoista saa puolet lyhyempiä.

Nyt on vielä saamatta vastauksia noihin alkuperäisiin kysymyksiin. :)

Metabolix [09.02.2011 21:19:14]

#

AkeMake, sori, en lukenut istuntokysymyksen taustoja kunnolla. Mutta olen kyllä samaa mieltä siitäkin, että kaikenlaiset pitkäaikaiset istunnot menettävät merkityksensä, jos niitä voi olla vain yksi ja sivusto on luonteeltaan sellainen, että sitä ehkä haluaisi käyttää myös satunnaisista muista paikoista.

Toistan: gettextin tiedostoja ei kannata muokata käsin vaan asianmukaisella työkalulla.

AkeMake [10.02.2011 00:05:22]

#

Selvä. Luulenpa, että tähän toiseen projektiin kannattaisi mahdollistaa tuo käyttö satunnaisista muista paikoista. Mietin vain miten tällainen kannattaisi tehdä. Jokaisella kirjautumisella tallennetaan yksilöllinen tunniste tietokantaan ja verrataan sitä $_SESSION['tunniste'] arvoon, vai? Eikö tällaisissa tapauksissa tietokantaan jää turhaksi jäävä tunniste, kun istunto häviää pitkän käyttämättömyyden vuoksi? Vai pitäisikö siinä tehdä niin, että istunto kestää niin kauan kunnes henkilö itse kirjautuu ulos? Tällaisessa minulla on vain tullut ongelmaksi, etten pääse muuttamaan PHP.ini tiedostossa olevaa istunnon pituutta. mikähän olisi kiertoreitti toteuttaa "loputon" istunto?

Kunhan jollain tavalla saan toteutettua ne käännökset pätevästi niin se riittää. Latasin työkalun (poedit) tuon gettextin tueksi. Nyt en kuitenkaan meinaa saada noita käännöksia toimimaan.

<?php
putenv('LC_ALL=fi_FI');
setlocale(LC_ALL, 'fi_FI');

bindtextdomain("fi_FI", "./language");

textdomain("fi_FI");

print(_("title"));
print(_("content"));
?>

Tuo mo-tiedosto on fi-FI.mo nimeltään ja olen kokeillut pitää sitä vähän joka paikassa, mutta ei löydy paikkaa, jossa se toimisi. Missähän tämä menee mehtään? Vai kannattaisiko sittenkin tehdä Joomla!:n tavalla?

villev [10.02.2011 14:05:23]

#

Eikös sen tiedoston nimi pitäisi olla fi_FI.mo?

AkeMake [10.02.2011 15:16:34]

#

Oho.. Missähän vaiheessa minulla on muuttunut viiva alaviivaksi. No, korjasin tuon ja kokeilin taas kaikki mahdolliset paikat fi-FI.mo tiedostolle eikä toiminut. Mikähän merkitys tuolla toisella mukana kulkevalla fi-FI.po tiedostolla on?
Apuja tähän ja noihin eilen esittämiini kysymyksiin??

Metabolix [10.02.2011 15:20:04]

#

Lue sitten villev:n kommentti uudestaan ja mieti, mikä meni pieleen. >_>

AkeMake [10.02.2011 15:40:27]

#

Eikö se kommentti tarkoittanutkaan sitä, että tuossa koodissa nimi on alaviivalla ja tiedoston nimi on viivalla? Eli olisi pitänyt korjaantua sillä, että muutin koodiin normaalin viivan.

No, selkeyden vuoksi muutin kansion nimeksi finnish.mo ja koodi näyttäisi nyt tältä:

putenv('LC_ALL=fi_FI');
setlocale(LC_ALL, 'fi_FI');

bindtextdomain("finnish", "./language");

textdomain("finnish");

php print(_("title"));
php print(_("content"));

Eikö tuon pitäisi toimia myös ilman setlocale:a? En ole saanut tarkkaa käsitystä edes siitä mihin kansioon tuo finnish.mo tiedosto kuuluu. Voisiko joku sen sanoa? Helpottaisi hommaa, kun ei tarvitsisi kokeilla kolmea eri paikkaa jokaisella koodin muutoksella. Jotenkin alkaa tuntua siltä, että olisi järkevämpi tehdä tuolla Joomla!:n tavalla eli tekisin itse ne funktiot, joilla haetaan.

kayttaja-1634 [10.02.2011 20:15:04]

#

Antti Laaksonen kirjoitti:

...
Sinänsä minusta tuntuu, että idea on tärkeämpi kuin tekninen osaaminen. Esimerkiksi tämän sivun tekijä sai miljoona dollaria:

http://www.milliondollarhomepage.com/
...

Takuulla oikea lähtökohta. Kun taustalla on hyvä idea ja tarpeeksi kunnianhimoinen toteuttaja, ongelmilla on tapana ratketa.

Grez [10.02.2011 20:20:06]

#

Antti Laaksonen kirjoitti:

Sinänsä minusta tuntuu, että idea on tärkeämpi kuin tekninen osaaminen.

Kyllä joo, mutta tietty vähimmäistaso on teknisessä osaamisessakin oltava. Jos tuo milliondollarhomepage olisi haksattu ekana päivänä, eikä senkään jälkeen olisi pysynyt pystyssä kuin satunnaisesti, niin ei olisi varmaan tullut mitään.

Validaattorivirheiden ei pitäisi paljon kiinnostaa jos kaikki toimii kaikkialla. Jos taas on toimivuusongelmia, niin sitten kannattaa ehkä vähän vilkaista mitä validaattorikin sanoo.

Lisäksi kun periaatteessa samalla vaivalla saa validia koodia, niin miksei helpottaisi omaa elämäänsä tekemällä sellaista. Ehkä tämä on sellainen asia, jonka ottaa onkeensa sitten kun kaikki muu jo pääsääntöisesti toimii.

Metabolix [10.02.2011 23:10:59]

#

AkeMake kirjoitti:

Eli olisi pitänyt korjaantua sillä, että muutin koodiin normaalin viivan.

Et voi tehdä tällaisia mielivaltaisia päätöksiä koodissasi. Locale- ja gettext-systeemiin liittyy tiettyjä standardeja, joiden mukaan nimi on muotoa kieli_MAA eli fi_FI.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta