Taas olen uutta aihetta pukkaamassa. Voisikohan tuota koodivinkkien luokittelua selventää hieman. Ainakin minusta se on nykyään aika sekava ja monet hyvät vinkit hukkuvat muiden ihan eri aiheesta olevien joukkoon.
Esimerksi C/C++ -alueella on vain kaksi kategoriaa: grafiikka ja sekalaiset. Mielestäni voisi olla paikallaan oma kategoria kielen peruspiirteitä ja ominaisuuksia selkestä esitteleville vinkeille. Soveltavat vinkit olisivat sitten erikseen toisessa kategoriassa. Tällä hetkellähän aloittelijoiden kannalta hyödyllisimmät perusvinkit, hukkuvat tuonne muiden "soveltavien" joukkoon. Uudella kategorialla aloittelijat löytäisivät helposti erilaisia koodivinkkejä yhdestä kategoriasta. Sama voisi olla muillakin alueilla. Tuo mielestäni palvelisi paremmin kaikkia käyttäjiä, ei vain aloittelijoita.
Koodivinkkien luokittelu saisi tosiaan olla nykyistä parempi. Suurin ongelma on, että ryhmiä ei ole tarkastettu aikoihin. Esim. C/C++:n alaryhmät on päätetty vuonna 2002, jolloin niitä vinkkejä oli vain kourallinen.
Kunhan koodivinkkitammikuu on ohi, on hyvä aika tutkia, mitä kaikkea koodivinkkeihin on vuosien aikana kertynyt. Uusien alaryhmien lisäksi osa vanhoista vinkeistä joutaa kenties pois.
Tähän keskusteluun voivat muutkin mielellään ehdottaa, millä tavalla koodivinkit kannattaisi luokitella.
Yksi aika moderni tapa olisi liittää vinkkeihin erilaisia lippuja sen mukaan, millä vinkki on toteutettu ja millaista asiaa se käsittelee. Tällöin voisi hakea vinkkejä, jotka liittyvät sekä C:hen että Assemblyyn tai vaikkapa Pascaliin, SDL:ään ja ääniin. Toisaalta joku voi kaivata esimerkkiä binaarihausta millä tahansa kielellä, jolloin sopiva lippu olisi vain "algoritmit". Nykyiset listaukset olisivat suoraan hakuja tietyillä ehdoilla.
Joku SQL:ään paremmin perehtynyt kertokoon, kuinka tämä toteutetaan tehokkaasti.
Jokainen koodivinkki on kirjoitettu yhdellä tai useammalla kielellä, joten vinkkien luokittelu ainakin sen suhteen on eksaktia ja mielestäni fiksua. Se ei tietenkään tarkoita että jokaisen kielen artikkelit pitäisi erikseen laittaa eri sivulle (eli Ruby ja Python vinkit voivat yhä olla samalla sivulla kunnes niitä tulee niin paljon että sivujaottelu kannattaa tehdä). Mutta lisääntynyt metatieto voi auttaa jo nyt esimerksi hakemista.
Hienohan olisi Wikistä tuttu luokittelujärjestelmä, missä uusien luokkien tekeminen ja luokittelu muutenkin on helppoa, ja luokkarakenne olisi hierarkinen. Toisaalta tuo taitaa olla melkoinen ylilyönti nykyiseen tarpeeseen kyllä. Ennemmin käyttää senkin ajan esimerkiksi vinkkien arvostelujärjestelmän rakentamiseen.
Lisäksi mietin tässä, että itse kun olen paljon noita C:tä ja assemblyä sekoittanut, niin miten ne olisi järkvä sijoittaa. Tähän asti olen ne sijoittanut assemblyvinkkien kanssa samaan kategoriaan pääasiallisesti kahdesta syystä:
1. Tuntuu, että C/C++ -alueella ne hukkuisivat muiden sekaan ja assemblystä kiinnostuneet eivät välttämättä osaa niitä sieltä etsiä.
2. Oletan, että assemblyä osaavat osaavat myös jotain muuta korkeamman tason kieltä (vaikka C:tä), koska kovin monia ei nykyään taida ohjelmointia assemblyllä aloittaa. Lisäksi käytettyä C on kovin yksinkertaista eikä sitä ole paljoa. Ja sieltä myös assemblystä kiinnostuneet ne helpommin löytävät.
Mielestäi näille voisi kuitenkin ehkä tehdä oman alakategorian assemblyvinkkein alueelle, koska eivät puhtaasti assemblyä ole mutta vahvasti siihen keskittyvät kuitenkin. Jossain Muut -alueella ne varmasti hukkuisivat joukkoon ja kumminkin sisältävät kieliä joilla on omat kategoriansa. Moni muu tosin ei ole noita vinkkejä postannut, eli tuo uusi alakategoria olisi jopa kokonaan vain omia vinkkejäni täynnä.
Metabolix kirjoitti:
Joku SQL:ään paremmin perehtynyt kertokoon, kuinka tämä toteutetaan tehokkaasti.
Sattumoisin pohdiskelin itse samaa. Tuolla näytetty tapa vaikuttais fiksulta: http://www.brainhandles.com/2007/04/26/simple-tagging-with-php-mysql/
Blaze kirjoitti:
Sattumoisin pohdiskelin itse samaa. Tuolla näytetty tapa vaikuttais fiksulta: http://www.brainhandles.com/2007/04/26/simple-tagging-with-php-mysql/
Itse näkisin, että tässä tarvitaan "monta-moneen" -tyyppinen ratkaisu. Eli yhdellä vinkillä voi olla monta täppää ja yhdellä täpällä monta vinkkiä. Eli ratkaisu on rakentaa taulut "koodivinkit", "täpät" ja niiden väliin liitostaulu vaikka "vinkki-täppä-suhteet", jonka oleellisimmat sarakkeet ovat vinkki-id ja täppä-id.
Edit: eli tuo esittämäni ratkaisu on se kolmas normaalimuoto ja Blazen linkin takaa löytyy sama toisessa normaalimuodossa.
Tehokkuudella ei ole niin suurta väliä näin pienen tietomäärän kanssa, mutta isommaksi asiaksi nouseekin muotoiluseikat. Jos esimerkiksi toteuttaa vain kahdella taululla, joista toisessa on tagit viittauksineen tiettyyn vinkkiin ja toisissa vinkki (mutta ei viittausta takaisin tageihin tietenkään), niin nousee esiin se asia että kukin tagi voidaan tallentaa eri kirjainkoilla ja siten niiden hallinnointi voi olla tuskallisempaa, jos halutaan säilyttää aina tietty muotoilu (kun eihän sitä koskaan tiedä koska joku keksii kirjoittaa kokonaan CAPSeilla tms).
Kolmen taulun vaihtoehdossa jo luodut tagit olisivat aina vain yhdessä kirjoitusasussa. Lisäksi kutakin tagia varten voisi näppärästi laittaa lisätietoja, eli vaikkapa tarkemman kuvauksen tagin aihealueesta.
Kaksitauluinen on simppelimpi toteuttaa, kolmitauluinen antaa enemmän ominaisuuksia ja saattaa olla myös joiltakin osin tehokkaampikin (ainakin ryhmiteltäessä saman aiheen tageja). Benchmarkkeja en kuitenkaan ole SQL-puolella pahemmin ajellut, joten tämä tokaisuni ei sitten ole mikään Suuri Totuus.
(Joo, en tykkää lippu- ja täppä-nimityksistä, joten...)
Merri kirjoitti:
— — kukin tagi voidaan tallentaa eri kirjainkoilla — —
Ajattelin, että tagit listattaisiin valmiiksi ja niistä voisi rastittaa haluamansa. Tietysti tämä rajoittaa hieman venyvyyttä mutta estää myös asiaankuulumattomat ja rikkinäiset tagitekstit. Vapaassa listauksessa joku voi innostua kirjoittamaan tagiksi "C++:n virtuaalimoniperiytys algoritmiohjelmoinnin matemaattisissa pulmissa". Joka tapauksessa olisi varmasti järkevintä muuttaa tagit tiettyyn kirjainkokoon ja pitää ne mahdollisimman lyhyinä ja ytimekkäinä.
Tehoton ratkaisuhan olisi laittaa tagit aakkosjärjestyksessä yhdeksi tekstirimpsuksi kunkin vinkin yhteyteen ja kirjoittaa SQL-ehdoksi jotain tyyliin "WHERE tagilista LIKE '%|ALGO|%|C++|%|MATEM|%'". ;)
Jep, mutta tuossakin tapauksessa tarvitsisi kantaa asiasta huolta, sillä tagithan kulkeutuisivat tekstimuodossa POSTin kautta, joten pitäisi kirjoittaa erikseen estot sille, ettei voitaisi käyttää kuin niitä tiettyjä tageja - mikä tarkoittaisi että pitäisi taas olla kolmas taulu, josta katsotaan ne tagit :) Tai ainakin mielellään, kovakoodaus ei ole mielestäni käytännöllistä. Ja toisaalta tagien idea lienisi juuri joustavuudessakin, eli että niitä saisi lisäillä vapaammin. Eihän se poistelu olisi niin kamalan vaikea urakka, jos joku väärinkäyttäisi.
Muoks!
Tietty tagit voitaisiin myös kuljetuttaa numerollisina POSTin kautta, mikä hieman ratkaisisi ongelmaa, mutta silti tarvittaisiin kolmen taulun systeemi.
Tageja voidaan myös haluta lisää myöhemmin. Ja jos halutaan, ylläpito voi vaatia mielekkäänä perusteena uuden tagin lisäykselle sen, että sen alle tulevia vinkkejä on jo useita laadukkaita tarjolla Muut-kategoriassa. Siihen lienee siis syytä varautua, että joskus voisi uusi kategorioita syntyä.
Mahdollisia tagikategorioita ovat myös käytetyt kirjastot. Osa näistä on kielikohtaisia, osa taas yleisesti käytettyjä, kuten OpenGL. Lisäksi voisi vielä ryhmitellä vinkkejä ulkoisten työkalujen ja ohjelmistojen mukaan. Esimerkiksi tietokantavinkit voisivat erota (joskus) siinäkin, liittyvätkö ne vaikkapa MySQL:ään tai sqliteen.
Jos uusien tagien muodostukseen on jonkinverran vapautta, nämä ryhmittelyt syntyvät kuin itsestään -- hyvällä tuurilla. Täyttä vapautta luoda uusia tageja ei voi kaikille antaa, koska siitä seuraa vain kamala kaaos. Mutta ehkä joku keksii hyvän tasapainon tähän välille.
Kovin monimutkaista tagisysteemistä ei kannata tietenkään tehdä. Toinpa vain pari ajatusta esille.
Tuo avainsanoihin perustuva luokittelu kuulostaa hyvältä, ehkäpä siitä olisi nykyisen järjestelmän korvaajaksi. Mutta monen vinkin voi löytää jo nykyään kirjoittamalla avainsanoja hakuun, jos vinkissä on kunnollinen kuvaus. Tosin taivutusmuodot ja synonyymit vaikeuttavat toisinaan vinkin löytämistä.
en tiedä ehdotukseni järkevyysestä, mutta jos laittaisi kaikkiin(tai ainakin uusiin) koodivinkkeihin jonkun meta-tagin(vaikka[meta][/meta] tai jotain) joiden väliin sitten laittaisi jotain perusmuodossa olevia sanoja liittyen koodivinkkiin.
esim. vaikka juuri noita synonyymejä
esimerkki:
koodivinkki käsittelee c++:an luokkien jäsenfunktioiden rekursioita
jolloin tähän meta-tagiin tulisi esim.
c++, rekursio, jäsenfunktio, luokka
jos olen ymmärtänyt oikein tuon nykyisen toiminnan(mikä ei ole mitenkään varmaa), niin se löytäisi nuo tagissa olevat perusmuotoiset sanat, vaikka niitä ei missään visualisoitaisikkaan(lieneekö mahdollista..?)
edit:
paitsi että meta pitäisi varmaan korvata jollain muulla, kun eikös se ole jo osa html:n syntaksia... =/
Tuo meta-tagi-idea on ihan hyvä idea, mutta tuo tagi-idea pesee sen juuri siinä, että toinen kirjoittaa java script ja toinen JavaScript. Hehee.. jos tässä jossain vaiheessa aikaa/motivaatiota löytyy, niin voisi tehdä tuosta tietokantarakenteesta vaikka koodivinkin... :) Kuitenkin minusta tuo Antin joskus suunnittelema kategoriapohja on toimiva, sen täydellisen muuttamisen sijaan siihen voisi vain ympätä vain noita tagi-ominaisuuksia.
Minusta yksi hyvä uudistus olisi pelkästään jo koodivinkkien "tason" tai kohderyhmän luokittelu.
* aloittelija - kielen perusteita
* edistynyt - perus koodivinkki
* pro - tsurigan PHP5 koodivinkit :)
Koodivinkin lähettämiskynnyskin voisi madaltua, kun sen voisi suosiolla laittaa tuolle aloittelija-tasolle :) Ja PRO-koodarit osaisivat sitten ehkä olla nipottamatta turhuudesta näissä koodivinkeissä :)
Itsestäkin tuo Metabolixin ehdotus (kts. ketjun 3. viesti) kuulostaisi järkevältä. Olisi tietyt ennalta määrätyt liput ja jokaisella koodivinkille valittaisiin näistä sopivat. Uusien luokittelujen tekeminen ei olisi vaikkeaa, kun vain päätetään, mitkä liput pitää olla, jotta vinkki kuuluu kyseiseen luokkaan.
Jokaiselle vinkille voisi olla myös pakollisena lippu, joka ilmoittaa hieman vinkin tasoa esim. Kielen perusominaisuudet, Edistyneemmät ominaisuudet ja Sovellutukset (Ja vaikka vielä Monimutkaisemmat sovellutukset tai vastaavanlaisesti). Tason mukaan en ehkä lähtisi luokittelemaan, koska se on aina niin kovin subjektiivinen mittari.
Kun kielen ominaisuuksia tai sovellutuksia käytetään lippuna, niin tarpeeseen sopivan tai kiinnostavan koodivinkin löytäminen on minusta helpompaa kuin pelkän ohjelmoijan tasoon perustuvasta luokittelusta. Kuitenkin aloittelijoille sopivimmat vinkit löytyisivät todennäköisimmin Kielen perusominaisuuksista, joten tietynlainen "näkymätön" tasojaottelu olisi silti.
Käyttäjien itse määrittelemät meta-sanat sotkivisat vain järjestelmää ja pahimmassa tapauksessa lisäisivat vain epäjärjestystä.
Esimerkiksi vinkille "C++ luokkien jäsenfunktioiden rekursio" määriteltävät liput voisivat olla vaikkapa: C++, Kielen perusominaisuudet. Esimerkiksi kuitenkaan luokkaa tai rekursiota en lipuksi laittaisi, koska ovat kielen ominaisuuksia eivätkä minusta näin ollen tarvitse omaa lippuaan.
Niin ja sama koodivinkki voisi olla monessa eri kielessä eli siis kuten jotkut sainoivat c/c++ ja assembly sekoituksista niin ne voisivat löytyä assembly ja c/c++ alueilta.
Yksi mahdollisuus olisi myös antaa käyttäjille mahdollisuus ehdottaa tageja, mutta ne tulisivat nähtäville vasta moderoituna. Lisäksi isompi määrä tageja artikkelia kohden olisi minusta hyvä sen takia, että se tekisi helpommaksi löytää toisia samantapaista aihealuetta koskevia vinkkejä: osa tagien ideastahan on siinä, että se sallii pientenkin luokkien tekemisen ilman että sitä on pakko sisällyttää yleiseen listaukseen. Ei kukaan tee mitään C++ tagilla, jos kaikki C++ -koodit on jo valmiiksi kategorioitu C++:n alle toisella tavalla. Sitten taas jos koodiesimerkissä käytetään rekursiota, vaikka itse koodivinkki ei käsittele rekursiota, niin silloin tagi rekursiolle olisi minusta paikallaan. Eli tässä olen eri mieltä kuin Päärynämies.
Kun koodivinkit kulkevat joka tapauksessa tiukan tarkistuksen läpi, niin ei sinänsä olisi kovin suuri vaiva tarkistusvaiheessa asetella noita tageja kohdalleen (tekijän ehdotusten perusteella). Tässä voisi taas olla hyvä sauma kehittää ehdotettua järjestelmää, jossa moderaattorit osallistuisivat koodivinkkien hallinnointiin. Hyväksytyistä tageista voitaisiin koota lista, ja uusia lisättäisiin tietenkin tarpeen mukaan.
ajv kirjoitti:
toinen kirjoittaa java script ja toinen JavaScript.
no jos tolle linjalle lähetään, nii eikös "java script" kieliopillisesti tarkoita skriptiä java-kieleen tms. ja "javascript" javascript-skriptikieltä..
ensimmäisessä tapauksessa voi vapaasti olettaa, että käyttäjä hakee nimenomaan skriptiä java-kielelle eikä koodivinkkiä joka on kirjoitettu javascriptillä :)
Aihe on jo aika vanha, joten et voi enää vastata siihen.