Olen tässä lähes päivittäin joutunut ihmettelemään WLAN [http://en.wikipedia.org/wiki/Wireless_LAN] yhdistelmäasemien ( siis laitteiden, jotka sisältävät NAT:n [http://en.wikipedia.org/wiki/NAT], DHCP:n [http://en.wikipedia.org/wiki/Dhcp], yms. peruskytkimien toiminnallisuudet ) huonoa toimintaa. Joka ikinen aamu kun avaan kotona netin, alkaa jatkuva taistelu toimiakko vaiko eikö toimia, kytkimiä ja laitteita saa jatkuvasti olla käynnistelemässä / konffailemassa uudestaan ja ei puhettakaan että kaikki toimisi kerralla ja hyvin.
Ainoa kerta minkä selvästi muistan että kaikki toimivat, oli joskus aikoja sitten kun konffasin erään läppärini toimimaan siltana, jossa sisäverkko muodostui WLAN:illa, yhdellä piuhalla serverille, printteri jaettu Samballa, ja ulkoverkko 3G[http://en.wikipedia.org/wiki/3g] mokkulan kautta. Nykyisin kyseinen läppäri on muissa tehtävissä, joten samanlaista verkkoa en pysty muodostamaan..
Tänä aamuna taas sama homma, nyt oli tarkoituksena ajaa PS3:een [http://en.wikipedia.org/wiki/Ps3] uusin firmware, ja siinä samalla vähän selailla nettiä, mutta aina kun pleikkari sai yhteyden WLAN:illa, kaatui koko muu sisäverkko kokonaan, ja kun läppäri muodosti yhteyttä uudestaan, lopetti pleikkari toiminnan.. ja tällä kertaa mittani täyttyi siinä määrin että rupesin Googlettamaan ongelmaa, ja näyttäisi siltä että joillain muillakin on ollut samantyylisiä ongelmia.
Hiukan verkkotopologiaani:
Sen tarkempia kuvauksia antamatta minulla on tällä hetkellä kotosalla ADSL liittymä, ADSL silta, josta menee piuha WLAN tukiasemaan (näistä alempana lisää), josta sitten piuhalta serverillä jossa synkronoin (synkronoinnista lisää tulevissa blogeissa) tiedostoja yhden työ pöytäkoneen kanssa, yhden läppärin joka on kaikkien käytössä ns. viihdeläppäri, ja yhden läppärin joka kulkee reissussa mukana, kun tällä hetkellä joudun reissaamaan paljon eripuolelle suomea.
Lisäksi kotonta löytyy PS3, ja n-kappaletta satunnaisia WLAN clientteja kuten kännykkää yms.
Serverissä, joka siis toimii kaikkien laitteiden keskitettynä synkronointipalvelimena, sekä varmistuspalvelimena, toimii myös MPD [http://mpd.wikia.com/wiki/Music_Player_Daemon_Wiki], sekä MythTV [http://www.mythtv.org/], näistä myöhemmissä blogeissa lisää, MythTV oli nyt sinänsä jäänyt vähän ylimääräiseksi, koska minulla ei ollut siinä kaapelitalous digikorttia, ja tässä jokunen aika sitten muutettuani antenniverkkoni tosiaan vaihtui DVB-T:stä (Digital Video Broadcasting, Terrestrial) -> DVB-C:ksi (Digital Video Broadcasting, Cable). Mutta toisaalta oli paljon televisiosta nauhotettuja viteoita joita olisi ollut kiva katsella, joten tuli mieleeni että voisinkin asentaa serveriini MediaTomb:n [http://mediatomb.cc/], jonka olen aikoinaan havainnut oikein näppäräksi mediaserveriksi, jolta PS3:nkin osaa streamaa videota sekä musiikkia. Varsinkin kun PS3:n kehitysporukka kuunteli valituksia ja korjasti jossain versioissa olleen videontoisto ongelman, mikä ilmeni erityisesti AVI pätkissä.
MediaTombin asennuksesta lisää myöhemmissä blogeissa.
Aikani tutkittuani tosiaan löysin ongelman, vaikuttaa siis siltä, että erittäin monissa WLAN tukiasemissa oleva UPnP [http://en.wikipedia.org/wiki/Upnp] tuki on buginen, ja PS3, ja muutkin ohjelmat, kuten meset käyttää tätä protokollaa avatessaan ja reitittäessään portteja reitittimeltä itseensä. Varsinkin tuo tuntu selittävän miksi PS3 pisti koko verkon nurin käynnistyessään, sillä se rupeaa heti käynnistyttyään availemaan yhteyksia Playstation Networkkiin [http://fi.wikipedia.org/wiki/PlayStation_Network], lisäksi PS3 etsii käynnistyttyään edellä mainittuja mediapalvelimia, kuten MediaTomb:ia lähiverkosta UPnP:n avulla.
UPnP:n poistaminen PS3:sta ei oikein auttanut, vaikka ehkä hetken näppituntumassa oli suunta parempaan, tätä kirjoittaessani ja testaillessani meni A-LINK WNAP tukiasema niin jumiin että ei enää avannut mitään yhteyksiä minnekkään, vaihdoin tukiaseman iänikuisen vanhaan D-LINK DI-614+:n, johon ei ole päivityksiä ollut vissiin 4-5 vuoteen, ja siitä UPnP pois päältä rupesi hommat toimimaan. Nyt pystyin jo käyttämään useampaa tietokonetta, sekä pleikkaria samaan aikaan, joten hyvältä näyttää. PS3:ssa ei ole UPnP:tä päällä, mutta tämä tietää valitettavasti sitä että joutuu jatkuvasti olla availemassa ja reitittämässä yhteyksiä, joten päätin laittaa koko vekottimen DMZ verkkoon. Vanha D-LINK salli yhden laitteen laittamisen DMZ verkkoon joten se oli pleikkarin paikka. Testasin vielä tcpdump:lla [http://www.tcpdump.org/] serverssä, että kun laittaa PS3:ssa mediapalvelimen etsinnän päälle, liikkuu UPnP paketit DMZ laitteesta sisäverkkoon, joten kaiken järjen mukaan MediaTomb pitäisi tulla toimimaan. Saa nähdä..
Tietenkin nyt on ongelmana muiden laitteiden mahdollinen reitityssäätö, koska UPnP ei toimi WAN (Wide Area Network) reitittimessä, mutta saa nyt toistaiseksi olla, kuitenkin jos tämä sama taistelu käydään esim. 5 päivänä viikossa, siihen menee n. 2-3 tuntia, koen helpommaksi tehdä reitityssääntöjä joita on tullut säädettyä ainakin 10 vuotta, kuin repiä hiuksia päästäni ja käynnistellä vuoroperään vekottimia uudestaan..
Summa Summarum: Mikäli koet jatkuvaa yhteydenkatkeilua verkossasi, ja UPnP on käytössä, koita ensimmäisenä pistää se pois päältä!
Jännä homma kuitenkin että tuo sama ongelma toistuu samanlaisena useilla eri laitteilla, minulla on on siis tuo A-LINK WNAP [http://www.a-link.com/fi/WNAP.html], D-LINK DI-614+ [http://www.dlink.com/products/?pid=DI-614%2b] jonka spekseissä ei muuten mainita UPnP:n implementoinnista, mutta se kyllä laitteesta löytyy, tosin vähän piilosta: TOOLS -> Misc alta, sekä SIEMENS Gigaset SE551 [http://gigaset.com/fi/fi/product/GIGASETSE551WLANDSLCABLE.html].
D-LINK ja Gigasetin firmawaret ovat uusimmat, vaikkakin ikivanhat, ja A-LINK toiseksi uusin 2.0.9 beta 3, (jossa muuten vasta rupesi WLAN toimimaan kunnolla 2 tai useamman WLAN clientin kesken, aikaisemmissa versioissa koko vekotin meni jumiin kun siirti paljon dataa sisäverkon WLAN laitteiden kesken. Kyseissä firmwaressa WLAN ajurit oli uusittu), näyttäisi olevan uudempi versio tarjolla, mutta en kertakaikkiaan enää jaksa koittaa ja säätää samoja asioita uusiksi, joten saa nyt olla toistaiseksi.
Yhteistä näyttää kaikille laitteille olevan logeissa tutunnäköiset syslog [http://en.wikipedia.org/wiki/Syslog] rivit, joista voi päätellä että kaikkien vekottimien softat on implementoitu linuxilla, (ja saikohan johonkin noista ssh yhteyden auki..) en ole asiaan sen enempää perehtynyt, mutta tulee mieleen olisiko joku tuohon tarkoitukseen tehty linux jakelupaketti jota nuo käyttävät, ja jossa on joku buginen UPnP, koska en oikein jaksa uskoa että oikeasti se ei toimisi yhtään missään ns. halpis WLAN tukiasemassa.
P.S. Jos sinulla on tiedossa tukiasema, jossa kaikki yllämainitut laitteet toimivat, ja vekottimet oikeasti toimivat sekä UPnP toimii ilman jatkuvaa käynnistelyä yms. niin kirjoitathan ystävällisesti vaikka kommenttiin laitteen tiedot, koska itselläni olisi sellaiselle käyttöä, ja yhtään turhaa laitetta en välitä enää ostaa..
keskiviikko 28. huhtikuuta 2010
maanantai 26. huhtikuuta 2010
VLC haavoittuvuus artikkelista tietokonelehdessä
Huomasin tuossa Ari Karkimon kirjoittaman artikkelin tietokone lehdessä VLC:n löydetystä tietoturva aukosta, ja jotenkin jäi vähän naurattamaan / ihmetyttämään Arin kirjoitus:
http://www.tietokone.fi/uutiset/kayta_vlc_sointinta_varoen_turva_aukko
http://www.videolan.org/security/sa1003.html
Sen enempää kirjoittajaa, tai hänen julkaisujaan tietämättömänä haluan kyllä vähän kritisoida tapaa kirjoittaa:
http://www.tietokone.fi/uutiset/kayta_vlc_sointinta_varoen_turva_aukko
http://www.videolan.org/security/sa1003.html
Sen enempää kirjoittajaa, tai hänen julkaisujaan tietämättömänä haluan kyllä vähän kritisoida tapaa kirjoittaa:
- "Ongelmasta kerrotaan valmistajan nettisivulla, jonka ylläpitäjät eivät tunnu muuten olevan oikein ajan tasalla."
- Millä perusteella ylläpitäjät eivät "tunnu olevan ajan tasalla"? ymmärtääköhän Ari että VLC avoin projekti, ts. sillä ei ole CE-hyväksyttyä valmistaa, ylläpitäjää, ja tuotetukea, ja kyseinen sivu on enemmänkin projekti nettisivu, eikä valmistajan nettisivu, Ari voi itsekkin osallistua projektin ylläpitoon ja vaikka tässä tapauksessa tuottaa linkin päivitykseen sivustolle, sen sijaan että keskittyy kritisoimaan sivustoa.. tai olisi vaikka tuottanut linkin edes omaan artikkeliinsa kuten nokkela kommentoija olikin jo kerennyt kommentoimaan artikkelia.
- "Lisäksi haavoittuvuustiedotteessa ei puolella sanalla mainita
käyttöjärjestelmiä, vaikka VLC on saatavilla useille eri
käyttöjärjestelmille, muun muassa Windowsille, Macille ja Linuxille." - Miksi tiedotteessa olisi pitänyt mainita puolellakaan sanalla eriteltyjä käyttöjärjestelmiä jos se kuten nyt aika ilmiselvää on, koskee kaikkia käyttöjärjestelmiä, kuten bufferin ylivuotobugit yleensäkkin..
- "Hyökkääjä voi muotoilla jonkin tällaisen tiedoston tietyllä tavalla, ja
päästä suorittamaan omaa koodiaan uhrikoneella, kunhan houkuttelee
ensin käyttäjän avaamaan tiedoston. Tähän on tarjolla useita
tehokkaaksi koettuja keinoja." - Uskaltaisikohan Ari kirjoittaa seuraavan artikkelinsa näistä "useita tehokkaaksi koettuja keinoja", siis luultavasti 99,99...% tapauksissa laittomista tavoista ajaa "omaa tuotosta" video katselijoiden koneissa..
Maven
Maven ( no tarkemmin Maven 2, mutta kuitenkin ) on ohjelmistoprojektien hallintatyökalu, joka on Apache säätiön
kehittämä ja ylläpitämä, ja paljon avoimia projekteja tutkiessani olen
huomannut sen olevan erittäin suosittu, arvioisinkin sen olevan tällä
hetkellä maailman eniten käytössä olevan projektinhallinta työkalu.
Maven, Yiddish kielen sana, tarkoittaa vapaasti suomennettuna tiedon
rekisteriä. Maven aloitettiin alunperin yrityksenä yksinkertaistaa
Jakarta Turbine projektin julkaisuprosessia. Siinä oli useita
erinlaisia Ant tiedostoja jotka olivat kaikki erinlaisia, sekä
riippuvuus JARit olivat CVSssä.
Tiimi rupesi haluamaan standardin tavan rakentaa ja hallinnoida
projekteja, jossa olisi selvä määritys mistä projekti koostuu, ja
helpon tavan julkaista projekti informaatiota ja tavan jakaa JAReja eri
projektien kesken.
Tuloksena oli työkalu, jota nyt voidaan käyttää rakentamaan ja
hallinnoimaan mitä tahansa Java pohjaisia, sekä nykyisin myös muilla
kielillä toteutettuja ohjelmisto projekteja.
Perustuen käsitteeseen POM, projekti object malli (Project Object
Model), joka on käytännössä pom.xml niminen xml-tyyppinen tiedosto,
joka sisältää projektin tiedot (metadata) keskitetyssä paikassa, ja
tähän tietoon perustuen Maven hallitsee ja vastaa projektien
rakentamisesta, raportoinnista, dokumentaatiota julkaisusta, ja monesta
muusta.
Maven pähkinäkuoressa:
Olen itse käyttänyt Mavenia muistaakseni jo ennen sen 1 releasin
julkaisua, ehkä n. 0.7 lähtien, ja olen ollut siihe vuosi vuodelta
tyytyväisempi. 2 Releasi toi paljon odotettuja parannuksia, kuten
transitiivisen riippuvuuksien hallinnan, POM:n sekä standardoidumman ja
kehitetymmän ympäristön.
Kokemuksieni mukaan Maven päihittää Ant:n eritysesti uuden projektin
aloituksen helppoudessa, lisäksi plugineja ( vähän niinkuin antin
taskit ) ovat useiden, jopa kymmenien eri kehittäjien ylläpitämiä ja
testaamia, ja täten hyväksi todettujen mallien mukaisia, toisin kuin
Antin tapa, jossa tavallaan aina aloitat nollasta ja kirjoitat kaiken
uusiksi..
Tätä on yritetty kiertää luomalla ns. standardeja Ant buildi
tiedostoja, mutta menestys on ollut aikalailla vaihtelevaa.. ja
loppujenlopuksi jos osaava silmä katsoo, ei se näe eroa shell skripti
tiedostolla ja antin buildi tiedostolla.. henk. koht. olen niin kyllästynyt kirjoittamaan Antin raskaita xml
tiedostoja, että ennemmin sitten vaikka shelli skripti ja vaikka
Makefile.. no mutta se hyvin raa'asta
vertailusta..
Suosituimpiin ohjelmointiympäristöihin maven integroituu transparentisti ja todella toimivasti, esim. uusimpiin Netbeansseihin integraatio on rakennettu suoraan jakelupakettiin, ja mitään erikoisasennuksia ei tarvita, Eclipseen Mavenin saa toimimaan erillisellä, ja hyvin toimivalla pluginilla.. mutta vimillä pärjää hyvin, ja gvim jos haluu hypettää. ;)
Maven on, loppujenlopuksi, pelkkä framework pluginien ajoon ja kutsuun,
kuten Ant taskien, mutta Maven on muutakin, ja tämä on syy miksi jotkut
tuntuvat kamppailevan Mavenin kanssa jatkuvasti, koska luulevat että
Maven on Ant eri paketissa, mutta sitä se ei ole, ja mielestäni tämä johtuu vain laiskasta mielenkiinnosta lukea Mavenin dokumentaatio, mainitsen nyt lyhyesti, että Antissa kutsutaan taskeja (tehtäviä), ja tehtävät voivat siis riippua muista tehtävistä, ja voidaan kirjoittaa jonkinlaista logiikkaa jolloin tehtävä t0 suoritetaan jos t1 onnistui ja jne.
Mavenissa kutsutaan joko Pluginien Goaleja yksittäin, tai vaihtoehtoisesti Lifecycleä, lifecycle vastaa suurinpiirtein sitä mitä kirjoitetaan mavenilla (default task), Lifecyclejä pystyy kirjoittamaan itse lisää, mutta defaulttina Maveniin on koodailtu muutama hyvin yleisesti käyttössä oleva ja hyväksi todettu lifecycle.
Maven on hyvä, mutta ei paras, tällä hetkellä ylivoimainen suosikkini on SBT, (Simple Build Tool), joka sitten on toteutettu, ja käyttää syntaksinaan Scalaa, ja siitä jossain vaiheessa myöhemmin lisää..
Mavenin asennus ei ehkä ole sieltä kaikista helpommasta päästä, mutta sen verran pitää osata että saa ympäristömuuttujan asetettua.. elikkä ladataan maven julkaisu, puretaan zippi tms. johonkin haluttuun hakemistoon ja eikun säätämään, Huom: Java kehitysympäristö, siis JDK, pitää olla asennettuna koska Maven toimii JRE:n päällä
Alle pikainen copy-paste linuxin terminaaliin jolla päästään työskentelemään mavein kanssa, tarkemmat asennusohjeet täältä (alhaalla):
Useimmilla linux jakelupaketeilla, vaikka heittämällä tästä Ubuntulla ja Debianilla löytyy myös omat asennuspakettinsa, onnistuu siis:
Yksi ensimmäisistä plugineista johon kannattaa tutustua huolella, on archetype. Archetype luo tyhjästä projektin, joka perustuu tuotettuun ja valittavaan templaattiin (eli archetypeen), näitä templaatteja on jo tuotettu pilvin pimein, ja niistä löytyy varmasti jokaiselle jotain, lisäksi kuka hyvänsä pystyy tuottamaan näitä lisää joko sisäisiin tai julkisiin projekteihin.
Pluginia on helppo kutsua, alla asemerkiksi kutsutaan archetypeä:
Esimerkissä siis
Kopioin alas pienen Maven session, jossa on suoritettu seuraavat plugin:goal kutsut, huomaa miten maven automaattisesti hakee lisää plugineja ja riippuvuuksia tarpeidensa mukaan, nämä maven cachettaa kotihakemiston/.m2/repository hakemistoon, ja maven myös automaattisesti tarkkailee ja toimii mikäli löytyy päivityksiä:
Linkkejä:
kehittämä ja ylläpitämä, ja paljon avoimia projekteja tutkiessani olen
huomannut sen olevan erittäin suosittu, arvioisinkin sen olevan tällä
hetkellä maailman eniten käytössä olevan projektinhallinta työkalu.
Maven, Yiddish kielen sana, tarkoittaa vapaasti suomennettuna tiedon
rekisteriä. Maven aloitettiin alunperin yrityksenä yksinkertaistaa
Jakarta Turbine projektin julkaisuprosessia. Siinä oli useita
erinlaisia Ant tiedostoja jotka olivat kaikki erinlaisia, sekä
riippuvuus JARit olivat CVSssä.
Tiimi rupesi haluamaan standardin tavan rakentaa ja hallinnoida
projekteja, jossa olisi selvä määritys mistä projekti koostuu, ja
helpon tavan julkaista projekti informaatiota ja tavan jakaa JAReja eri
projektien kesken.
Tuloksena oli työkalu, jota nyt voidaan käyttää rakentamaan ja
hallinnoimaan mitä tahansa Java pohjaisia, sekä nykyisin myös muilla
kielillä toteutettuja ohjelmisto projekteja.
Perustuen käsitteeseen POM, projekti object malli (Project Object
Model), joka on käytännössä pom.xml niminen xml-tyyppinen tiedosto,
joka sisältää projektin tiedot (metadata) keskitetyssä paikassa, ja
tähän tietoon perustuen Maven hallitsee ja vastaa projektien
rakentamisesta, raportoinnista, dokumentaatiota julkaisusta, ja monesta
muusta.
Maven pähkinäkuoressa:
- Yksinkertainen projektin aloitus, jossa on käytetty hyväksi todettuja menetelmiä - projekti, tai moduli käyntiin sekunneissa.
- Vakioiden käyttö projekteissa - uusien kehittäjien ei tarvitse käyttää aikaa perusvakioiden opiskeluun
- Ylivoimainen riippuvuuksien hallinta - automaatiset ja transitiiviset riippuvuussuhteet
- Helppo useiden projektien rinnakkaiskäyttö
- Suuri ja jatkuvasti kasvava kirjasto ja metadata säiliö käytössä
suoraan paketista metodilla ja suurimpien open source projektien
viimeisimmät julkaisut heti käytettävissä - Laajennettavissa, pluginit helposti kirjoitettavissa javalla, tai skriptauskielillä
- Uudet ominaisuudet välittömästi käytettävissä joko suoraan, tai pienellä konfiguroinnilla
- Ant taskit käytettävissä
- Moduli tyyppiset buildit: Maven pystyy rakentaa rajattoman määrän esityypitettyjä projekteja, kuten JAR, WAR, tai jakelupaketteja (ZIP, TAR, yms.) perustuen projektin metadataan, ilman tarvetta minkäänlaisiin skriptauksiin (yleensä).
- Yhtenäinen projektin informaatio sivu. Käyttämällä samaa
metadataa kuin projektin buildauskin, Maven pystyy generoimaan
webbisivun, tai PDF tiedoston joka sisältää mitä tahansa
dokumentaatiota mitä halutaan näyttää, sekä lisää standardeja
raportteja projektin kehityksestä. - Julkaisujen hallinta ja jakelupakettien julkaisu: Pienellä konfiguroinnilla Maven integroituu lähdekoodien versionhallintaan (kontrolli)
järjestelmiin kuten CVS:ään, ja manageroi projektien julkaisuja tietyn
tägin perusteella. Maven pystyy myös julkaisemaan jakelupaketin
sijainteihin, joista se on muiden projektien käytettävissä. Maven myös
pystyy julkaisemaan jakelupaketteja, kuten JAReja tai ZIP paketteja
jotka sisältävät muiden projektien JAR julkaisuja, sekä dokumentaatio,
että lähdekoodi julkaisuja. - Riippuvuuksien hallinta: Maven rohkaisee käyttämään keskitettyä
JAR:ien ja muiden riippuvuuksien säiliötä. Mavenissa on mekanismi,
jolla sinun projektisi voi ladata mitä tahansa JAReja keskitetystä JAR
säiliöstä, jolla on hyvin paljon samankaltaisuuksia Perlin CPANin
kanssa. Tämä mahdollista Maven käyttäjien uudelleenkäyttää eri
projektien julkaisemia JAReja, sekä rohkaisee kommunikointiin jotta
esimerkiksi versioden taakseppäin yhteensopivuus voidaan taata. Maven
kehittäjät tekevät yhteistyötä Ibiblion kanssa joka on anteliaasti antanut keskitetyn säiöliötilan Mavenin käyttöön servereiltään.
Olen itse käyttänyt Mavenia muistaakseni jo ennen sen 1 releasin
julkaisua, ehkä n. 0.7 lähtien, ja olen ollut siihe vuosi vuodelta
tyytyväisempi. 2 Releasi toi paljon odotettuja parannuksia, kuten
transitiivisen riippuvuuksien hallinnan, POM:n sekä standardoidumman ja
kehitetymmän ympäristön.
Kokemuksieni mukaan Maven päihittää Ant:n eritysesti uuden projektin
aloituksen helppoudessa, lisäksi plugineja ( vähän niinkuin antin
taskit ) ovat useiden, jopa kymmenien eri kehittäjien ylläpitämiä ja
testaamia, ja täten hyväksi todettujen mallien mukaisia, toisin kuin
Antin tapa, jossa tavallaan aina aloitat nollasta ja kirjoitat kaiken
uusiksi..
Tätä on yritetty kiertää luomalla ns. standardeja Ant buildi
tiedostoja, mutta menestys on ollut aikalailla vaihtelevaa.. ja
loppujenlopuksi jos osaava silmä katsoo, ei se näe eroa shell skripti
tiedostolla ja antin buildi tiedostolla.. henk. koht. olen niin kyllästynyt kirjoittamaan Antin raskaita xml
tiedostoja, että ennemmin sitten vaikka shelli skripti ja vaikka
Makefile.. no mutta se hyvin raa'asta
vertailusta..
Suosituimpiin ohjelmointiympäristöihin maven integroituu transparentisti ja todella toimivasti, esim. uusimpiin Netbeansseihin integraatio on rakennettu suoraan jakelupakettiin, ja mitään erikoisasennuksia ei tarvita, Eclipseen Mavenin saa toimimaan erillisellä, ja hyvin toimivalla pluginilla.. mutta vimillä pärjää hyvin, ja gvim jos haluu hypettää. ;)
Maven on, loppujenlopuksi, pelkkä framework pluginien ajoon ja kutsuun,
kuten Ant taskien, mutta Maven on muutakin, ja tämä on syy miksi jotkut
tuntuvat kamppailevan Mavenin kanssa jatkuvasti, koska luulevat että
Maven on Ant eri paketissa, mutta sitä se ei ole, ja mielestäni tämä johtuu vain laiskasta mielenkiinnosta lukea Mavenin dokumentaatio, mainitsen nyt lyhyesti, että Antissa kutsutaan taskeja (tehtäviä), ja tehtävät voivat siis riippua muista tehtävistä, ja voidaan kirjoittaa jonkinlaista logiikkaa jolloin tehtävä t0 suoritetaan jos t1 onnistui ja jne.
Mavenissa kutsutaan joko Pluginien Goaleja yksittäin, tai vaihtoehtoisesti Lifecycleä, lifecycle vastaa suurinpiirtein sitä mitä kirjoitetaan mavenilla (default task), Lifecyclejä pystyy kirjoittamaan itse lisää, mutta defaulttina Maveniin on koodailtu muutama hyvin yleisesti käyttössä oleva ja hyväksi todettu lifecycle.
Maven on hyvä, mutta ei paras, tällä hetkellä ylivoimainen suosikkini on SBT, (Simple Build Tool), joka sitten on toteutettu, ja käyttää syntaksinaan Scalaa, ja siitä jossain vaiheessa myöhemmin lisää..
Mavenin asennus ei ehkä ole sieltä kaikista helpommasta päästä, mutta sen verran pitää osata että saa ympäristömuuttujan asetettua.. elikkä ladataan maven julkaisu, puretaan zippi tms. johonkin haluttuun hakemistoon ja eikun säätämään, Huom: Java kehitysympäristö, siis JDK, pitää olla asennettuna koska Maven toimii JRE:n päällä
Alle pikainen copy-paste linuxin terminaaliin jolla päästään työskentelemään mavein kanssa, tarkemmat asennusohjeet täältä (alhaalla):
cd
wget http://www.nic.funet.fi/pub/mirrors/apache.org/maven/binaries/apache-maven-2.2.1-bin.zip
unzip apache-maven-2.2.1-bin.zip
echo export M2_HOME=~/apache-maven-2.2.1 >> ~/.bashrc
echo export PATH=$M2_HOME/bin:$PATH
. ~/.bashrc
Useimmilla linux jakelupaketeilla, vaikka heittämällä tästä Ubuntulla ja Debianilla löytyy myös omat asennuspakettinsa, onnistuu siis:
apt-get install maven2
Yksi ensimmäisistä plugineista johon kannattaa tutustua huolella, on archetype. Archetype luo tyhjästä projektin, joka perustuu tuotettuun ja valittavaan templaattiin (eli archetypeen), näitä templaatteja on jo tuotettu pilvin pimein, ja niistä löytyy varmasti jokaiselle jotain, lisäksi kuka hyvänsä pystyy tuottamaan näitä lisää joko sisäisiin tai julkisiin projekteihin.
Pluginia on helppo kutsua, alla asemerkiksi kutsutaan archetypeä:
mvn archetype:generate
Esimerkissä siis
mvn
on Mavenin komento (windowssissa mvn.bat), archetype
kutsuttava plugin, ja generate
maali (goal) yksittäinen plugini voi siis sisältää n-kappaletta erinlaisia goaleja, jotka tekevät varsinaisen työn, tällä ollaan saatu sidottua samannimisiä goaleja eri plugineihin, ja eri pluginien kehittäjät saavat oman nimiavaruutensa käyttöön.Kopioin alas pienen Maven session, jossa on suoritettu seuraavat plugin:goal kutsut, huomaa miten maven automaattisesti hakee lisää plugineja ja riippuvuuksia tarpeidensa mukaan, nämä maven cachettaa kotihakemiston/.m2/repository hakemistoon, ja maven myös automaattisesti tarkkailee ja toimii mikäli löytyy päivityksiä:
- mvn archetype:generate
- Luodaan quickstart projekti, Maven näyttää listan minkätyyppisiä projekteja se voi luoda defaultisti. Archetype pluginille voidaan myös antaa parametri, josta se käy hakemassa lisää archetypejä (templaatteja), jonka perusteella se osaa tehdä muitakin projekteja.
- mvn test
- Kääntää koodit ja ajaa quickstart projektin yksikkö testit
- mvn package
- Luo projektista JARin, joka voidaan asentaa/jakaa joko käsin, tai antaa Mavenin tehdä se.
Linkkejä:
- Maven
- http://maven.apache.org/
- Mikä Maven on?
- http://maven.apache.org/what-is-maven.html
- Plugineita
- http://maven.apache.org/plugins/index.html
- Lifecycle
- http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html
- Käyttäjien dokumentaatiota
- http://maven.apache.org/users/index.html
- POM dokumentaatio
- http://maven.apache.org/pom.html
- Asetukset dokumentaatio
- http://maven.apache.org/settings.html
- SBT
- http://code.google.com/p/simple-build-tool/
- Scala
- http://www.scala-lang.org/
- Netbeans
- http://netbeans.org/
- Eclipse
- http://www.eclipse.org/
- Eclipse plugins for Maven
- http://maven.apache.org/eclipse-plugin.html
$ mvn archetype:generate
[INFO] Scanning for projects...
[INFO] Searching repository for plugin with prefix: 'archetype'.
Downloading: http://repo1.maven.org/maven2/org/apache/maven/archetype/maven-archetype/2.0-alpha-4/maven-archetype-2.0-alpha-4.pom
[INFO] ------------------------------------------------------------------------
[INFO] Building Maven Default Project
[INFO] task-segment: [archetype:generate] (aggregator-style)
[INFO] ------------------------------------------------------------------------
[INFO] Preparing archetype:generate
[INFO] No goals needed for project - skipping
Downloading: http://repo1.maven.org/maven2/org/apache/maven/archetype/archetype-common/2.0-alpha-4/archetype-common-2.0-alpha-4.pom
Downloading: http://repo1.maven.org/maven2/org/apache/maven/archetype/archetype-common/2.0-alpha-4/archetype-common-2.0-alpha-4.jar
[INFO] Setting property: classpath.resource.loader.class => 'org.codehaus.plexus.velocity.ContextClassLoaderResourceLoader'.
[INFO] Setting property: velocimacro.messages.on => 'false'.
[INFO] Setting property: resource.loader => 'classpath'.
[INFO] Setting property: resource.manager.logwhenfound => 'false'.
[INFO] [archetype:generate {execution: default-cli}]
[INFO] Generating project in Interactive mode
[INFO] No archetype defined. Using maven-archetype-quickstart (org.apache.maven.archetypes:maven-archetype-quickstart:1.0)
Choose archetype:
1: internal -> appfuse-basic-jsf (AppFuse archetype for creating a web application with Hibernate, Spring and JSF)
2: internal -> appfuse-basic-spring (AppFuse archetype for creating a web application with Hibernate, Spring and Spring MVC)
3: internal -> appfuse-basic-struts (AppFuse archetype for creating a web application with Hibernate, Spring and Struts 2)
4: internal -> appfuse-basic-tapestry (AppFuse archetype for creating a web application with Hibernate, Spring and Tapestry 4)
5: internal -> appfuse-core (AppFuse archetype for creating a jar application with Hibernate and Spring and XFire)
6: internal -> appfuse-modular-jsf (AppFuse archetype for creating a modular application with Hibernate, Spring and JSF)
7: internal -> appfuse-modular-spring (AppFuse archetype for creating a modular application with Hibernate, Spring and Spring MVC)
8: internal -> appfuse-modular-struts (AppFuse archetype for creating a modular application with Hibernate, Spring and Struts 2)
9: internal -> appfuse-modular-tapestry (AppFuse archetype for creating a modular application with Hibernate, Spring and Tapestry 4)
10: internal -> maven-archetype-j2ee-simple (A simple J2EE Java application)
11: internal -> maven-archetype-marmalade-mojo (A Maven plugin development project using marmalade)
12: internal -> maven-archetype-mojo (A Maven Java plugin development project)
13: internal -> maven-archetype-portlet (A simple portlet application)
14: internal -> maven-archetype-profiles ()
15: internal -> maven-archetype-quickstart ()
16: internal -> maven-archetype-site-simple (A simple site generation project)
17: internal -> maven-archetype-site (A more complex site project)
18: internal -> maven-archetype-webapp (A simple Java web application)
19: internal -> jini-service-archetype (Archetype for Jini service project creation)
20: internal -> softeu-archetype-seam (JSF+Facelets+Seam Archetype)
21: internal -> softeu-archetype-seam-simple (JSF+Facelets+Seam (no persistence) Archetype)
22: internal -> softeu-archetype-jsf (JSF+Facelets Archetype)
23: internal -> jpa-maven-archetype (JPA application)
24: internal -> spring-osgi-bundle-archetype (Spring-OSGi archetype)
25: internal -> confluence-plugin-archetype (Atlassian Confluence plugin archetype)
26: internal -> jira-plugin-archetype (Atlassian JIRA plugin archetype)
27: internal -> maven-archetype-har (Hibernate Archive)
28: internal -> maven-archetype-sar (JBoss Service Archive)
29: internal -> wicket-archetype-quickstart (A simple Apache Wicket project)
30: internal -> scala-archetype-simple (A simple scala project)
31: internal -> lift-archetype-blank (A blank/empty liftweb project)
32: internal -> lift-archetype-basic (The basic (liftweb) project)
33: internal -> cocoon-22-archetype-block-plain ([http://cocoon.apache.org/2.2/maven-plugins/])
34: internal -> cocoon-22-archetype-block ([http://cocoon.apache.org/2.2/maven-plugins/])
35: internal -> cocoon-22-archetype-webapp ([http://cocoon.apache.org/2.2/maven-plugins/])
36: internal -> myfaces-archetype-helloworld (A simple archetype using MyFaces)
37: internal -> myfaces-archetype-helloworld-facelets (A simple archetype using MyFaces and facelets)
38: internal -> myfaces-archetype-trinidad (A simple archetype using Myfaces and Trinidad)
39: internal -> myfaces-archetype-jsfcomponents (A simple archetype for create custom JSF components using MyFaces)
40: internal -> gmaven-archetype-basic (Groovy basic archetype)
41: internal -> gmaven-archetype-mojo (Groovy mojo archetype)
Choose a number: (1/2/3/4/5/6/7/8/9/10/11/12/13/14/15/16/17/18/19/20/21/22/23/24/25/26/27/28/29/30/31/32/33/34/35/36/37/38/39/40/41) 15: : 15
Define value for groupId: : com.blogspot.dencrypt
Define value for artifactId: : quickstart
Define value for version: 1.0-SNAPSHOT: :
Define value for package: com.blogspot.dencrypt: :
Confirm properties configuration:
groupId: com.blogspot.dencrypt
artifactId: quickstart
version: 1.0-SNAPSHOT
package: com.blogspot.dencrypt
Y: :
[INFO] ----------------------------------------------------------------------------
[INFO] Using following parameters for creating OldArchetype: maven-archetype-quickstart:RELEASE
[INFO] ----------------------------------------------------------------------------
[INFO] Parameter: groupId, Value: com.blogspot.dencrypt
[INFO] Parameter: packageName, Value: com.blogspot.dencrypt
[INFO] Parameter: package, Value: com.blogspot.dencrypt
[INFO] Parameter: artifactId, Value: quickstart
[INFO] Parameter: basedir, Value: /home/apastinen/tmp
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] ********************* End of debug info from resources from generated POM ***********************
[INFO] OldArchetype created in dir: /home/apastinen/tmp/quickstart
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 31 seconds
[INFO] Finished at: Mon Apr 26 11:49:56 EEST 2010
[INFO] Final Memory: 15M/153M
[INFO] ------------------------------------------------------------------------
$ tree
.
`-- quickstart
|-- pom.xml
`-- src
|-- main
| `-- java
| `-- com
| `-- blogspot
| `-- dencrypt
| `-- App.java
`-- test
`-- java
`-- com
`-- blogspot
`-- dencrypt
`-- AppTest.java
12 directories, 3 files
$ cat quickstart/pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.blogspot.dencrypt</groupId>
<artifactId>quickstart</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>quickstart</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
$ cd quickstart/
$ mvn test
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Building quickstart
[INFO] task-segment: [test]
[INFO] ------------------------------------------------------------------------
Downloading: http://repo1.maven.org/maven2/org/apache/maven/shared/maven-filtering/1.0-beta-2/maven-filtering-1.0-beta-2.pom
Downloading: http://repo1.maven.org/maven2/org/codehaus/plexus/plexus-interpolation/1.6/plexus-interpolation-1.6.pom
Downloading: http://repo1.maven.org/maven2/org/apache/maven/shared/maven-filtering/1.0-beta-2/maven-filtering-1.0-beta-2.jar
Downloading: http://repo1.maven.org/maven2/org/codehaus/plexus/plexus-interpolation/1.6/plexus-interpolation-1.6.jar
[INFO] [resources:resources {execution: default-resources}]
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory /home/apastinen/tmp/quickstart/src/main/resources
Downloading: http://repo1.maven.org/maven2/org/codehaus/plexus/plexus-compiler-api/1.5.3/plexus-compiler-api-1.5.3.pom
Downloading: http://repo1.maven.org/maven2/org/codehaus/plexus/plexus-compiler/1.5.3/plexus-compiler-1.5.3.pom
Downloading: http://repo1.maven.org/maven2/org/codehaus/plexus/plexus-compiler-manager/1.5.3/plexus-compiler-manager-1.5.3.pom
Downloading: http://repo1.maven.org/maven2/org/codehaus/plexus/plexus-compiler-javac/1.5.3/plexus-compiler-javac-1.5.3.pom
Downloading: http://repo1.maven.org/maven2/org/codehaus/plexus/plexus-compilers/1.5.3/plexus-compilers-1.5.3.pom
Downloading: http://repo1.maven.org/maven2/org/codehaus/plexus/plexus-utils/1.0.5/plexus-utils-1.0.5.pom
Downloading: http://repo1.maven.org/maven2/org/codehaus/plexus/plexus-utils/1.0.4/plexus-utils-1.0.4.jar
Downloading: http://repo1.maven.org/maven2/org/codehaus/plexus/plexus-compiler-api/1.5.3/plexus-compiler-api-1.5.3.jar
Downloading: http://repo1.maven.org/maven2/org/codehaus/plexus/plexus-compiler-manager/1.5.3/plexus-compiler-manager-1.5.3.jar
Downloading: http://repo1.maven.org/maven2/org/codehaus/plexus/plexus-compiler-javac/1.5.3/plexus-compiler-javac-1.5.3.jar
[INFO] [compiler:compile {execution: default-compile}]
[INFO] Compiling 1 source file to /home/apastinen/tmp/quickstart/target/classes
[INFO] [resources:testResources {execution: default-testResources}]
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory /home/apastinen/tmp/quickstart/src/test/resources
[INFO] [compiler:testCompile {execution: default-testCompile}]
[INFO] Compiling 1 source file to /home/apastinen/tmp/quickstart/target/test-classes
Downloading: http://repo1.maven.org/maven2/org/apache/maven/surefire/surefire-booter/2.4.3/surefire-booter-2.4.3.pom
Downloading: http://repo1.maven.org/maven2/org/apache/maven/surefire/surefire-api/2.4.3/surefire-api-2.4.3.pom
Downloading: http://repo1.maven.org/maven2/org/apache/maven/surefire/surefire-booter/2.4.3/surefire-booter-2.4.3.jar
Downloading: http://repo1.maven.org/maven2/org/apache/maven/surefire/surefire-api/2.4.3/surefire-api-2.4.3.jar
[INFO] [surefire:test {execution: default-test}]
Downloading: http://repo1.maven.org/maven2/org/apache/maven/surefire/surefire-junit/2.4.3/surefire-junit-2.4.3.pom
Downloading: http://repo1.maven.org/maven2/org/apache/maven/surefire/surefire-providers/2.4.3/surefire-providers-2.4.3.pom
Downloading: http://repo1.maven.org/maven2/org/apache/maven/surefire/surefire-junit/2.4.3/surefire-junit-2.4.3.jar
[INFO] Surefire report directory: /home/apastinen/tmp/quickstart/target/surefire-reports
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running com.blogspot.dencrypt.AppTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.045 sec
Results :
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 37 seconds
[INFO] Finished at: Mon Apr 26 11:58:33 EEST 2010
[INFO] Final Memory: 21M/156M
[INFO] ------------------------------------------------------------------------
$ mvn package
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Building quickstart
[INFO] task-segment: [package]
[INFO] ------------------------------------------------------------------------
Downloading: http://repo1.maven.org/maven2/org/apache/maven/plugins/maven-jar-plugin/2.2/maven-jar-plugin-2.2.pom
Downloading: http://repo1.maven.org/maven2/org/apache/maven/plugins/maven-plugins/10/maven-plugins-10.pom
Downloading: http://repo1.maven.org/maven2/org/apache/maven/plugins/maven-jar-plugin/2.2/maven-jar-plugin-2.2.jar
[INFO] [resources:resources {execution: default-resources}]
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory /home/apastinen/tmp/quickstart/src/main/resources
[INFO] [compiler:compile {execution: default-compile}]
[INFO] Nothing to compile - all classes are up to date
[INFO] [resources:testResources {execution: default-testResources}]
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory /home/apastinen/tmp/quickstart/src/test/resources
[INFO] [compiler:testCompile {execution: default-testCompile}]
[INFO] Nothing to compile - all classes are up to date
[INFO] [surefire:test {execution: default-test}]
[INFO] Surefire report directory: /home/apastinen/tmp/quickstart/target/surefire-reports
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running com.blogspot.dencrypt.AppTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.093 sec
Results :
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
Downloading: http://repo1.maven.org/maven2/org/apache/maven/maven-archiver/2.3/maven-archiver-2.3.pom
Downloading: http://repo1.maven.org/maven2/org/codehaus/plexus/plexus-archiver/1.0-alpha-9/plexus-archiver-1.0-alpha-9.pom
Downloading: http://repo1.maven.org/maven2/org/codehaus/plexus/plexus-components/1.1.9/plexus-components-1.1.9.pom
Downloading: http://repo1.maven.org/maven2/org/codehaus/plexus/plexus/1.0.10/plexus-1.0.10.pom
Downloading: http://repo1.maven.org/maven2/org/codehaus/plexus/plexus-container-default/1.0-alpha-15/plexus-container-default-1.0-alpha-15.pom
Downloading: http://repo1.maven.org/maven2/org/codehaus/plexus/plexus-containers/1.0-alpha-15/plexus-containers-1.0-alpha-15.pom
Downloading: http://repo1.maven.org/maven2/org/codehaus/plexus/plexus/1.0.9/plexus-1.0.9.pom
Downloading: http://repo1.maven.org/maven2/org/codehaus/plexus/plexus-component-api/1.0-alpha-15/plexus-component-api-1.0-alpha-15.pom
Downloading: http://repo1.maven.org/maven2/org/codehaus/plexus/plexus-classworlds/1.2-alpha-6/plexus-classworlds-1.2-alpha-6.pom
Downloading: http://repo1.maven.org/maven2/org/codehaus/plexus/plexus-io/1.0-alpha-1/plexus-io-1.0-alpha-1.pom
Downloading: http://repo1.maven.org/maven2/org/codehaus/plexus/plexus-component-api/1.0-alpha-16/plexus-component-api-1.0-alpha-16.pom
Downloading: http://repo1.maven.org/maven2/org/codehaus/plexus/plexus-containers/1.0-alpha-16/plexus-containers-1.0-alpha-16.pom
Downloading: http://repo1.maven.org/maven2/org/codehaus/plexus/plexus-utils/1.4.9/plexus-utils-1.4.9.pom
Downloading: http://repo1.maven.org/maven2/org/codehaus/plexus/plexus-utils/1.4.9/plexus-utils-1.4.9.jar
Downloading: http://repo1.maven.org/maven2/org/apache/maven/maven-archiver/2.3/maven-archiver-2.3.jar
Downloading: http://repo1.maven.org/maven2/org/codehaus/plexus/plexus-archiver/1.0-alpha-9/plexus-archiver-1.0-alpha-9.jar
Downloading: http://repo1.maven.org/maven2/org/codehaus/plexus/plexus-io/1.0-alpha-1/plexus-io-1.0-alpha-1.jar
[INFO] [jar:jar {execution: default-jar}]
[INFO] Building jar: /home/apastinen/tmp/quickstart/target/quickstart-1.0-SNAPSHOT.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 19 seconds
[INFO] Finished at: Mon Apr 26 11:59:15 EEST 2010
[INFO] Final Memory: 17M/153M
[INFO] ------------------------------------------------------------------------
$ tree
.
|-- pom.xml
|-- src
| |-- main
| | `-- java
| | `-- com
| | `-- blogspot
| | `-- dencrypt
| | `-- App.java
| `-- test
| `-- java
| `-- com
| `-- blogspot
| `-- dencrypt
| `-- AppTest.java
`-- target
|-- classes
| `-- com
| `-- blogspot
| `-- dencrypt
| `-- App.class
|-- maven-archiver
| `-- pom.properties
|-- quickstart-1.0-SNAPSHOT.jar
|-- surefire-reports
| |-- TEST-com.blogspot.dencrypt.AppTest.xml
| `-- com.blogspot.dencrypt.AppTest.txt
`-- test-classes
`-- com
`-- blogspot
`-- dencrypt
`-- AppTest.class
22 directories, 9 files
$
Tunnisteet:
an,
apache,
dependency,
ibilio,
jakarta,
java,
maven,
metadata,
open source,
repository,
scala,
transitive,
turbine
TinyMCE - HTML JavaScript WYSIWYG editori
Otsikon sanahirviön takaa paljastuu Moxiecode Systems AB:n tuottama vapaaseen (LGPL) lähdekoodiin perustuva HTML sisällöntuotanto työkalu.
TinyMCE:llä voi luoda ja editoida HTML sivuja suoraan selaimelta, ja nähdä muutokset reaaliajassa, mikä on WYSIWYG editorien idea.
Ohjelmisto on täysin toteutettu JavaScriptillä, ja täten ollessa
ajettavissa pääsääntöisesti suosituimmilla selaimilla, ei tarvitse
asennella mitään erillisiä ohjelmistoja, kuten kompozeria, tai bluefishia.
(btw. kirjoitan tätä muuten kompozerilla..) Sivun mukaan seuraavat
selaimet: Mozilla, MSIE, FireFox, Opera, Safari ja Chrome ovat
tuettuja, käyttöjärjestelmällä sinänsä ei pitäisi olla merkitystä..
Ohjelma sinänsä vaikuttaa mielestäni enemmän office tyyppiseltä
dokumenttien kirjoitusohjelmalta, mutta lienee sillä pystyy tuottamaan
myös ihan webbisivujakin, ohjelmisto näyttää olevan täysin
konfiguroitavissa. Skinejä (teemoja) voi vaihtaa, käytettävissä olevia
nappuloita voi säätää, jonkinlainen pluginsysteemikin on, näyttää
olevan tuotettuna 2 kaupallista pluginia, MCImageManager, sekä
MCFileManager, joilla voi tehdä jonkinlaisia CRUD operaatioita kuville
ja tiedostoille.
Lisäksi löyty ISO nippu 3. osapuolen tuottamia erinlaisia plugareita, näihin en tällä erää viitsinyt paneutua.
Ohjelmallahan nyt ei varmaan sinänsä kauheasti tee mitään uutta ja
hienoa tuollaisena, mutta moniin omiin ohjelmistoihin voisi olla
todella näppärä ja varteenotettava vaihtoehto, varsinki 0€ hinnalla.
Lisäksi muita TinyMCE:n ominaisuuksia ja toiminnallisuuksia:
Helppo integroida, tarvitaan vain muutama rivi JavaScriptiä http://wiki.moxiecode.com/index.php/TinyMCE:Installation
AJAX http://tinymce.moxiecode.com/examples/example_06.php
Monikielisyys löytyy paljon valmiita kieliä http://tinymce.moxiecode.com/download_i18n.php
Esimerkkejä http://tinymce.moxiecode.com/examples/full.php
Kaupalliset pluginit http://tinymce.moxiecode.com/plugins.php
3. Osapuolen plugineja http://sourceforge.net/tracker/?atid=738747&group_id=103281&func=browse
BBCode http://en.wikipedia.org/wiki/BBCode
GZip pakkaus http://wiki.moxiecode.com/index.php/TinyMCE:Compressor
Dokumentaatio http://tinymce.moxiecode.com/documentation.php
Wiki http://wiki.moxiecode.com/index.php/TinyMCE:Index
Lataa http://tinymce.moxiecode.com/download.php
TinyMCE:llä voi luoda ja editoida HTML sivuja suoraan selaimelta, ja nähdä muutokset reaaliajassa, mikä on WYSIWYG editorien idea.
Ohjelmisto on täysin toteutettu JavaScriptillä, ja täten ollessa
ajettavissa pääsääntöisesti suosituimmilla selaimilla, ei tarvitse
asennella mitään erillisiä ohjelmistoja, kuten kompozeria, tai bluefishia.
(btw. kirjoitan tätä muuten kompozerilla..) Sivun mukaan seuraavat
selaimet: Mozilla, MSIE, FireFox, Opera, Safari ja Chrome ovat
tuettuja, käyttöjärjestelmällä sinänsä ei pitäisi olla merkitystä..
Ohjelma sinänsä vaikuttaa mielestäni enemmän office tyyppiseltä
dokumenttien kirjoitusohjelmalta, mutta lienee sillä pystyy tuottamaan
myös ihan webbisivujakin, ohjelmisto näyttää olevan täysin
konfiguroitavissa. Skinejä (teemoja) voi vaihtaa, käytettävissä olevia
nappuloita voi säätää, jonkinlainen pluginsysteemikin on, näyttää
olevan tuotettuna 2 kaupallista pluginia, MCImageManager, sekä
MCFileManager, joilla voi tehdä jonkinlaisia CRUD operaatioita kuville
ja tiedostoille.
Lisäksi löyty ISO nippu 3. osapuolen tuottamia erinlaisia plugareita, näihin en tällä erää viitsinyt paneutua.
Ohjelmallahan nyt ei varmaan sinänsä kauheasti tee mitään uutta ja
hienoa tuollaisena, mutta moniin omiin ohjelmistoihin voisi olla
todella näppärä ja varteenotettava vaihtoehto, varsinki 0€ hinnalla.
Lisäksi muita TinyMCE:n ominaisuuksia ja toiminnallisuuksia:
Helppo integroida, tarvitaan vain muutama rivi JavaScriptiä http://wiki.moxiecode.com/index.php/TinyMCE:Installation
AJAX http://tinymce.moxiecode.com/examples/example_06.php
Monikielisyys löytyy paljon valmiita kieliä http://tinymce.moxiecode.com/download_i18n.php
Esimerkkejä http://tinymce.moxiecode.com/examples/full.php
Kaupalliset pluginit http://tinymce.moxiecode.com/plugins.php
3. Osapuolen plugineja http://sourceforge.net/tracker/?atid=738747&group_id=103281&func=browse
BBCode http://en.wikipedia.org/wiki/BBCode
GZip pakkaus http://wiki.moxiecode.com/index.php/TinyMCE:Compressor
Dokumentaatio http://tinymce.moxiecode.com/documentation.php
Wiki http://wiki.moxiecode.com/index.php/TinyMCE:Index
Lataa http://tinymce.moxiecode.com/download.php
torstai 22. huhtikuuta 2010
Kesärenkaiden vaihtosessio...
Oli taas se aika vuodesta että oli aika vaihdattaa auton alle kesärenkaat. Entiset kumit olivat jo reilusti parhaat päivät nähneet, joten päätin ostaa uudet, mutta koska talvirenkaani olivat niin hyvässä kunnossa, vaihdoin kuitenkin huonot kesärenkaat autooni.
Aikani selailtua liikkeiden hintoja ja netistä erinlaisia vaihtoehtoja, päätin olla säästäväinen, ja tilasin kumit Rengas Onlinelta, ja tietysti halvimmat mahdolliset Sunnyt:
.. jeps, vastaava satsi jotain semihyvin michelinejä olisi ollut n. 4-500e.
Noh, renkaiden toimitusajaksi tuli postiin jossain vaiheessa tieto että arvioivat olevan n. viikon päästä osoitteessani, kaveri soitti puolentoista viikon päästä että olisi 2 kappaletta, odotetaanko loppuja vai tuoko ne, totesin että odotetaan loppuja jotka sitten saapuivatkin vielä reilun puolen viikon päästä, joten loppuhyvin kaikki hyvin..
Seuraavaksi alkoi soittelu ja etsiminen missä nuo saisi vaihdettua suht. edullisesti nykyisille vanteilleni auton alle.
Olin silloin vierailulla mikkelissä, ja paikka kunnalta löytyy ihan hyvin rengasfirmoja, mutta mutta.. hintahaarukka oli pikaisella puhelin kierroksella 3-4 paikkaan 60-80€, joten päätin vielä lykätä päätöstä, mutta mainittakoon nyt että tuo 60e (joka siis taitanee olla halvinta paikkakunnalla), oli Mikkelin Rengaspalvelu Ay:ssä.
Lähdin jossain vaiheessa iltapäivällä autolla pyörähtähtämään liikkeissä, ja yllätyksekseni eräs Esso suostui vaihtamaan kumit hintaan 30€! harmikseni aikaa ei heti saanut, vaan jouduin odottelemaan sitä seuraavaan iltapäivään, no mikkelissä vielä silloin edelleen, joten mikäpäs siinä.
Kun menin sitten viemään autoa kumivaihtoon, oli kaveri jo vastassa viittoilemassa ja rupesi heti kyselemään että olisiko nuo vielä tarkoitus laittaa alle, ja totesi vaan myöntäilyyni että aikaa oli varattu vain puoli tuntia mutta eiköhän tästä selvitä.
Homma kestikin hiukan yli puoli tuntia, ( kaveri kyllä kävi välillä vähän juttelemassa ja puuhailemassa muutakin ), mutta yllätyksekseni tuo "hiukan yli", n. 5-10min. maksoi sitten 60€ sen 30€:n päälle, joten loppulasku 90€.
Mahtaa mikkeliläisillä mennä hyvin kun edes aikoinani helsingissä asuttuani, ja siellä muutamilla yksityisillä lääkärikäynneilläkään ei laskutus ollut tuota luokkaa, tässä sitä rupee todellakin miettimään ammatinvaihtoa, ainakin rengassesonki aikaan.. ja mikkeliin muuttoa..
Aikani selailtua liikkeiden hintoja ja netistä erinlaisia vaihtoehtoja, päätin olla säästäväinen, ja tilasin kumit Rengas Onlinelta, ja tietysti halvimmat mahdolliset Sunnyt:
Tuotenumero: D-107504
tuote: Sunny SN3970 205/50 R17 93V XL (So)
määrä: 4
A-hinta netto: 45.25 EUR (55.20 EUR brutto)
----------------------------------------
kokonaissumma netto: 180.98 EUR
lähetys netto: 0.00 EUR
-----------------------------------------
kokonaissumma netto: 180.98 EUR
22 % ALV 39.82 EUR
-----------------------------------------
loppusumma : 220.80 EUR
.. jeps, vastaava satsi jotain semihyvin michelinejä olisi ollut n. 4-500e.
Noh, renkaiden toimitusajaksi tuli postiin jossain vaiheessa tieto että arvioivat olevan n. viikon päästä osoitteessani, kaveri soitti puolentoista viikon päästä että olisi 2 kappaletta, odotetaanko loppuja vai tuoko ne, totesin että odotetaan loppuja jotka sitten saapuivatkin vielä reilun puolen viikon päästä, joten loppuhyvin kaikki hyvin..
Seuraavaksi alkoi soittelu ja etsiminen missä nuo saisi vaihdettua suht. edullisesti nykyisille vanteilleni auton alle.
Olin silloin vierailulla mikkelissä, ja paikka kunnalta löytyy ihan hyvin rengasfirmoja, mutta mutta.. hintahaarukka oli pikaisella puhelin kierroksella 3-4 paikkaan 60-80€, joten päätin vielä lykätä päätöstä, mutta mainittakoon nyt että tuo 60e (joka siis taitanee olla halvinta paikkakunnalla), oli Mikkelin Rengaspalvelu Ay:ssä.
Lähdin jossain vaiheessa iltapäivällä autolla pyörähtähtämään liikkeissä, ja yllätyksekseni eräs Esso suostui vaihtamaan kumit hintaan 30€! harmikseni aikaa ei heti saanut, vaan jouduin odottelemaan sitä seuraavaan iltapäivään, no mikkelissä vielä silloin edelleen, joten mikäpäs siinä.
Kun menin sitten viemään autoa kumivaihtoon, oli kaveri jo vastassa viittoilemassa ja rupesi heti kyselemään että olisiko nuo vielä tarkoitus laittaa alle, ja totesi vaan myöntäilyyni että aikaa oli varattu vain puoli tuntia mutta eiköhän tästä selvitä.
Homma kestikin hiukan yli puoli tuntia, ( kaveri kyllä kävi välillä vähän juttelemassa ja puuhailemassa muutakin ), mutta yllätyksekseni tuo "hiukan yli", n. 5-10min. maksoi sitten 60€ sen 30€:n päälle, joten loppulasku 90€.
Mahtaa mikkeliläisillä mennä hyvin kun edes aikoinani helsingissä asuttuani, ja siellä muutamilla yksityisillä lääkärikäynneilläkään ei laskutus ollut tuota luokkaa, tässä sitä rupee todellakin miettimään ammatinvaihtoa, ainakin rengassesonki aikaan.. ja mikkeliin muuttoa..
tiistai 20. huhtikuuta 2010
KTechlab elektroniikka simulaatio
Olen tässä leikkinyt illan KTechlab:lla, ja pitää myöntää että yksi parhaimmista koskaan näkemistäni ohjelmista linuxille.
Ohjelmalla voi piirtää, rakentaa ja simuloida analogisia sekä digitaalisia kytkentöjä, ja ohjelma simuloi reaaliajassa komponenttien toimintaa ja virran kulkua on helppoa ja mukavaa seurata ruudulta.
Alla olevassa esimerkissäni kun painetaan virran syöttö nappulaa, rupeaa digitaali numero palamaan, kun virta katkaistaan, jatkaa latautunut kondesaattori vielä hetken virran syöttöä jolloin numero "himmenee". Lisäksi on nappula kondesaattorin pikatyhjennykselle.

.. ja mikä parasta, kaikki tämä ilmaista! =)
KTechlabin saa sourceforgelta http://sourceforge.net/projects/ktechlab/
Lisäksi ktechlab löytyy defaulttina ubuntun 9.10 (Karmic Koala) apt:sta, joten:
Joissain ubuntun versioissa, ainakin Jaunty Jackalopessa ktechlab ei toimi apt:sta, mutta sourceforgelta saa debin joka toimii.
Lisäksi olin tuossa tätä kirjoittaessani hetken puhelimessa, ja simulaatio oli jäänyt pyörimään taustalle, yllätyksekseni huomasin että muistit oli koneessa tapissa, ja muutenkin meno kuin tervassa uisi, ohjelma näyttää vuotavan/käyttävän muistia pidemmän päälle, joten tarkkana.
Jos laittaa piirille volttiproben, ja seuraa oskilloskooppia pitää se muistissa koko käppyrän käynnissäolo ajalta joten se lienee syy muistin käyttöön.
F10 nappulalla saa simulaation nopeasti päälle/pois.
Ohjelmalla voi piirtää, rakentaa ja simuloida analogisia sekä digitaalisia kytkentöjä, ja ohjelma simuloi reaaliajassa komponenttien toimintaa ja virran kulkua on helppoa ja mukavaa seurata ruudulta.
Alla olevassa esimerkissäni kun painetaan virran syöttö nappulaa, rupeaa digitaali numero palamaan, kun virta katkaistaan, jatkaa latautunut kondesaattori vielä hetken virran syöttöä jolloin numero "himmenee". Lisäksi on nappula kondesaattorin pikatyhjennykselle.

.. ja mikä parasta, kaikki tämä ilmaista! =)
KTechlabin saa sourceforgelta http://sourceforge.net/projects/ktechlab/
Lisäksi ktechlab löytyy defaulttina ubuntun 9.10 (Karmic Koala) apt:sta, joten:
sudo apt-get install ktechlab
Joissain ubuntun versioissa, ainakin Jaunty Jackalopessa ktechlab ei toimi apt:sta, mutta sourceforgelta saa debin joka toimii.
Lisäksi olin tuossa tätä kirjoittaessani hetken puhelimessa, ja simulaatio oli jäänyt pyörimään taustalle, yllätyksekseni huomasin että muistit oli koneessa tapissa, ja muutenkin meno kuin tervassa uisi, ohjelma näyttää vuotavan/käyttävän muistia pidemmän päälle, joten tarkkana.
Jos laittaa piirille volttiproben, ja seuraa oskilloskooppia pitää se muistissa koko käppyrän käynnissäolo ajalta joten se lienee syy muistin käyttöön.
F10 nappulalla saa simulaation nopeasti päälle/pois.
sunnuntai 18. huhtikuuta 2010
For loopin optimointi
[en]
Alla olevissa esimerkeissä käsittelen javan java.util.List tietotyypin implementaatioita, mutta sama toistuu myös monissa muissa erityisesti imperiatiivista syntaksia noudattavissa ohjelmointikielissä, sekä muissa tietotyypeissä kuten taulukoissa, mapeissa yms.
Näemme hyvin usein ohjelmoinnissa, sekä opiskelumateriaaleissa seuraavanlaisia for-looppeja:
Esimerkissähän ei sinänsä ole mitään vikaa, mutta jos on mielenkiintoa kirjoittaa optimoitua koodia, kannattaa opetella kirjoittamaan for ( foreach ) looppi seuraavan esimerkin mukaisesti:
Ylemmässä esimerkissä on se vika, että list.size() metodia kutsutaan ennen jokaista iteraatiota vertailun yhteydessä, tämähän voi olla joskus ideanakin jos tiedetään mitä tehdään ja muutetaan listan kokoa iteraatioiden aikana, mutta useimmiten tästä ei ole kyse.. for lausekkeen ensimmäinen osio, joka on pääsääntöisesti ideoitu muuttujien alustukselle, suoritetaan vain kerran, ja täten vertailussa suure tiedetään ja sitä ei tarvitse kysyä uudelleen listalta, joka kuluttaa enemmän prosessoriaikaa.
Noh, hyvin usein listarakenteet ovat aika pieniä, ja saavutettu hyöty suhteellisen minimaalinen, mutta toisaalta toinen syntaksikin on hyvin pieni muutos opetella, ja kerran opittua se tulee suoraan selkärangasta eikä täten aiheuta turhaa päänsärkyä.
Lisäksi lista voi olla myös jollain tapaa dynaaminen, esim. size() metodi voi suorittaa tietokantakyselyn tai mitä hyvänsä, jossa hyöty vain korostuu.
Alla olevissa esimerkeissä käsittelen javan java.util.List tietotyypin implementaatioita, mutta sama toistuu myös monissa muissa erityisesti imperiatiivista syntaksia noudattavissa ohjelmointikielissä, sekä muissa tietotyypeissä kuten taulukoissa, mapeissa yms.
Näemme hyvin usein ohjelmoinnissa, sekä opiskelumateriaaleissa seuraavanlaisia for-looppeja:
for(int i = 0; i < list.size(); i++) {
teeJotain(list.get(i));
}
Esimerkissähän ei sinänsä ole mitään vikaa, mutta jos on mielenkiintoa kirjoittaa optimoitua koodia, kannattaa opetella kirjoittamaan for ( foreach ) looppi seuraavan esimerkin mukaisesti:
for(int i = 0, len = list.size(); i < len; i++) {
teeJotain(list.get(i));
}
Ylemmässä esimerkissä on se vika, että list.size() metodia kutsutaan ennen jokaista iteraatiota vertailun yhteydessä, tämähän voi olla joskus ideanakin jos tiedetään mitä tehdään ja muutetaan listan kokoa iteraatioiden aikana, mutta useimmiten tästä ei ole kyse.. for lausekkeen ensimmäinen osio, joka on pääsääntöisesti ideoitu muuttujien alustukselle, suoritetaan vain kerran, ja täten vertailussa suure tiedetään ja sitä ei tarvitse kysyä uudelleen listalta, joka kuluttaa enemmän prosessoriaikaa.
Noh, hyvin usein listarakenteet ovat aika pieniä, ja saavutettu hyöty suhteellisen minimaalinen, mutta toisaalta toinen syntaksikin on hyvin pieni muutos opetella, ja kerran opittua se tulee suoraan selkärangasta eikä täten aiheuta turhaa päänsärkyä.
Lisäksi lista voi olla myös jollain tapaa dynaaminen, esim. size() metodi voi suorittaa tietokantakyselyn tai mitä hyvänsä, jossa hyöty vain korostuu.
lauantai 17. huhtikuuta 2010
Uusi google docs dokumentti ja kansiot
[en]
Pitkästä aikaa olen viettänyt hetken aikaa Google docs:n parissa, aivan loistava teknologia, mutta nyt huomasin varsin ikävän puutteen kansioissa.
Jos haluan luoda uuden dokumentin johonkin tiettyyn kansioon, voin kyllä avata kansion, ja luoda siinä uuden dokumentin, mutta dokumentit menevät aina ei kategorisoiduksi, eikä jää kansioni sisälle, vaan minun on avattava näkymän jossa näkyy kaikki tiedostoni ja sieltä erikseen määrätä uusi dokumenttini tiettyyn kansioon.
Asiaa etsittyäni netistä vaikuttaa siltä että muillakin on sama ongelma, ja ainakaan tänä päivänä siihen ei ole minkäälaista ratkaisua, mutta eiköhän googlen kehitysporukka korjaa ongelman jossain vaiheessa.
Pitkästä aikaa olen viettänyt hetken aikaa Google docs:n parissa, aivan loistava teknologia, mutta nyt huomasin varsin ikävän puutteen kansioissa.
Jos haluan luoda uuden dokumentin johonkin tiettyyn kansioon, voin kyllä avata kansion, ja luoda siinä uuden dokumentin, mutta dokumentit menevät aina ei kategorisoiduksi, eikä jää kansioni sisälle, vaan minun on avattava näkymän jossa näkyy kaikki tiedostoni ja sieltä erikseen määrätä uusi dokumenttini tiettyyn kansioon.
Asiaa etsittyäni netistä vaikuttaa siltä että muillakin on sama ongelma, ja ainakaan tänä päivänä siihen ei ole minkäälaista ratkaisua, mutta eiköhän googlen kehitysporukka korjaa ongelman jossain vaiheessa.
perjantai 16. huhtikuuta 2010
Blogien lähetys mobiilisti emaililla
[en]
Yksi testi lisää, asetin blogiin email osoitteen minne voin lähettää maileja, jotka pitäisi suoraan julkaistua blogissa. Kirjoitan tätä sängyssä Nokai E63:lla & Opera Mobile 10 Betalla sähköpostiini, ja nyt on aika yrittää lähettää.. Onnea ja hyvää hyötä. o/
Yksi testi lisää, asetin blogiin email osoitteen minne voin lähettää maileja, jotka pitäisi suoraan julkaistua blogissa. Kirjoitan tätä sängyssä Nokai E63:lla & Opera Mobile 10 Betalla sähköpostiini, ja nyt on aika yrittää lähettää.. Onnea ja hyvää hyötä. o/
torstai 15. huhtikuuta 2010
Elektroniikka labra Velleman EL3001
[en]
Lapsuudesta lähtien olen ollut erittäin kiinnostunut elektroniikasta, tekniikasta, ohjelmoinnista yms. asioista, jopa matematiikasta jonka teoriasta en ymmärrä yhtään mitään, mutta minkä logiikkaa käytän joka päivä ohjelmoidessani kaikenlaisia funktioita. =)
Kun olin nuorempi, halusin monta kertaa ostaa jonkinlaisen elektroniikka labran, ja opiskella elektroniikan alkeita, mutta minulla ei koskaan ollut rahaa tai aikaa tai jotain muuta oli tiellä, ja muistin tämä pari päivää sitten. Rupesin etsimään internetistä jonkinlaista elektroniikka opiskelu materiaalia, ja löysin Velleman EL3001 elektroniikka labran.
http://www.tequipment.net/Velleman_EL3001.html
.. joten nyt kun olen vähän vanhempi ja minulla on vähän rahaa sijoittaa, tilasin yhden tuollaisen, ja en malta odottaa sen saapumista ( tilaus kestää n. viikon.. ), joten jokin päivä blogaan vielä tuosta vekottimesta.
Lapsuudesta lähtien olen ollut erittäin kiinnostunut elektroniikasta, tekniikasta, ohjelmoinnista yms. asioista, jopa matematiikasta jonka teoriasta en ymmärrä yhtään mitään, mutta minkä logiikkaa käytän joka päivä ohjelmoidessani kaikenlaisia funktioita. =)
Kun olin nuorempi, halusin monta kertaa ostaa jonkinlaisen elektroniikka labran, ja opiskella elektroniikan alkeita, mutta minulla ei koskaan ollut rahaa tai aikaa tai jotain muuta oli tiellä, ja muistin tämä pari päivää sitten. Rupesin etsimään internetistä jonkinlaista elektroniikka opiskelu materiaalia, ja löysin Velleman EL3001 elektroniikka labran.
http://www.tequipment.net/Velleman_EL3001.html
.. joten nyt kun olen vähän vanhempi ja minulla on vähän rahaa sijoittaa, tilasin yhden tuollaisen, ja en malta odottaa sen saapumista ( tilaus kestää n. viikon.. ), joten jokin päivä blogaan vielä tuosta vekottimesta.
Tunnisteet:
dencrypt,
el3001,
electronic,
technology,
velleman
Liitetiedostojen lisääminen blogiin
[en]
Seuraava toiminto, mitä rupesin pian haluamaan tähän blogiin, on kyky lähettää liitetiedostoja, mutta näyttää siltä, että voidaan lähettää vain kuvia, ja videoita, joten ei jarreja, zippeja yms.
Onneksi voimme jakaa tiedostoja Google Docsilla, joten loin jaetun kansion DEncrypt liitetiedostoille, ja nyt voin uploadata tiedostot kansioon ja liittää ne blogiin.
Joten... sano hello HelloWorld.scala:lla
Seuraava toiminto, mitä rupesin pian haluamaan tähän blogiin, on kyky lähettää liitetiedostoja, mutta näyttää siltä, että voidaan lähettää vain kuvia, ja videoita, joten ei jarreja, zippeja yms.
Onneksi voimme jakaa tiedostoja Google Docsilla, joten loin jaetun kansion DEncrypt liitetiedostoille, ja nyt voin uploadata tiedostot kansioon ja liittää ne blogiin.
Joten... sano hello HelloWorld.scala:lla
Tunnisteet:
dencrypt,
dokumentti,
google,
liitetiedosto,
scala
Muuta blogin kieltä
[en]
Leikittyäni pari minuuttia uudella blogi tililläni, rupesi minun tekemään mieli vaihtamaan tilini kieli suomesta englantiin. (ehkäpä defaultti tuli gmail tilitäni)
En löytänyt menuista mitään millä muuttaa sitä joten etsin vähän googlella, ja löysin linkin mistä sitä voi muuttaa:
http://www.blogger.com/language.g
Oletan että pitää olla ensin kirjautunut sisään jotta kieltä voi muuttaa.
Leikittyäni pari minuuttia uudella blogi tililläni, rupesi minun tekemään mieli vaihtamaan tilini kieli suomesta englantiin. (ehkäpä defaultti tuli gmail tilitäni)
En löytänyt menuista mitään millä muuttaa sitä joten etsin vähän googlella, ja löysin linkin mistä sitä voi muuttaa:
http://www.blogger.com/language.g
Oletan että pitää olla ensin kirjautunut sisään jotta kieltä voi muuttaa.
Tilaa:
Blogitekstit (Atom)