<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Gfx - digimedia-alan yhteisö</title>
	<atom:link href="http://gfx.fi/feed/" rel="self" type="application/rss+xml" />
	<link>http://gfx.fi</link>
	<description></description>
	<lastBuildDate>Fri, 02 Sep 2011 14:05:52 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Adobe Fireworks 101</title>
		<link>http://gfx.fi/2011/08/adobe-fireworks-101/</link>
		<comments>http://gfx.fi/2011/08/adobe-fireworks-101/#comments</comments>
		<pubDate>Sun, 14 Aug 2011 18:44:39 +0000</pubDate>
		<dc:creator>hoo</dc:creator>
				<category><![CDATA[Top Story]]></category>
		<category><![CDATA[web design]]></category>
		<category><![CDATA[fireworks]]></category>
		<category><![CDATA[työkalu]]></category>

		<guid isPermaLink="false">http://gfx.fi/?p=2299</guid>
		<description><![CDATA[Adobe Fireworks on digitaalisen suunnittelun salainen ase. Photoshop on standardi työkalu mitä tulee graafiseen suunnitteluun, mutta Fireworks on täsmätyökalu webin visualisointiin.]]></description>
			<content:encoded><![CDATA[<p><strong>Adobe Fireworks on digitaalisen suunnittelun salainen ase. Photoshop on standardi työkalu mitä tulee graafiseen suunnitteluun, mutta Fireworks on täsmätyökalu webin visualisointiin.</strong></p>
<h2>Mikä on Adobe Fireworks</h2>
<p>Adobe Fireworks julkaistiin vuonna 1998 Macromedia tuoteperheeseen (mm. Flash, Dreamweaver ja Freehand) verkkografiikan luontiin. Fireworks on pikseligrafiikan ja vektorimuotojen ainutlaatuinen hybridi; vektorit visualisoidaan reaaliajassa suoraan pikseleinä. Pohjimmiltaan Fireworks on vektorityökalu, jonka tasohierarkiassa rasteroitu kuvagrafiikka ja polkumuotoiset vektorit ovat sulassa sovussa omina layereinaan.</p>
<p>Yleinen työnkulku verkkosivustojen ulkoasujen luonnissa tapahtuu Photoshopin ja Illustratorin kesken. PS ja AI kehitettiin jo ennen internetin valtavirtaistumista ja molempien työkalujen yhteensopivuus ruudulle suunniteltavan grafiikan kanssa on enemmänkin sovellettua kun vastaavasti Fireworks on kehitetty nimenomaan verkkografiikan ympärille. Printtimateriaalin työstöä Fireworksilla ei kannata edes miettiä, sillä 300dpi ja CMYK ovat myrkkyä Fireworksille.</p>
<p>Fireworksin ydinalueita ovat verkkografiikan (leiskaaminen, ikonit, bannerit) lisäksi vahvasti myös käyttöliittymäsuunnittelu (Wireframes, UI-prototyping) sekä verkkosivujen teknisen totetuksen tarvittavat viipalointi ja optimointi (Slicing, Export).</p>
<h2>Fireworksin toimintaperiaate</h2>
<p>Fireworks on objektipohjainen työkalu, jossa jokainen dokumentissa esiintyvä elementti löytyy myös Photoshopin tapaan Layers-paneelista. Erona on lähinnä nimeämiskäytäntö, Photoshopin termit Folders ja Layers tottelevat Fireworksissa nimiä Layers ja objects.</p>
<h3>Properties Panel</h3>
<p>Fireworksin ydin on <strong>Properties Panel</strong>. Kun käyttäjä valitsee ruudulta tai Layers-paneelista objektin, Properties Panel (PI) muuttaa näkymänsä vastaamaan kyseisen objektin ominaisuuksia. Vastaava paneeli löytyy myös Flashista ja Dreamweaverista.</p>
<p><img src="http://gfx.fi/wordpress/wp-content/uploads/2011/08/properties-inspector.jpg" alt="Properties Panel" width="590" height="140" /></p>
<p>Valittu elementti voi olla tekstiä, valokuva, vektoripolku, Group, symboli, maski tms. Shift-pohjassa voi valita monta objektia, jolloin PI näyttää yhteenvedon valituista objekteista. Vaikka elementtien parametrit vaihtelevat yksilöllisesti, PI näyttää aina valitun elementin koordinaatit dokumentissa, leveys/korkeus-tiedot pikseleinä sekä mahdolliset tehosteet (Filters).</p>
<h3>Tools Panel</h3>
<p>Yhtenäinen elementti muiden Adobe ohjelmien kanssa Layers-paneelin lisäksi on Työkalu-paneeli. Fireworksin työkalupaneelista löytyvät välineet rasteroidun bitmap-grafiikan, vektorimuotojen, tekstin muokkaamiseen sekä webbileiskan pilkkomistyökalut.</p>
<p><img src="http://gfx.fi/wordpress/wp-content/uploads/2011/08/toolspanel.jpg" alt="Tools Panel" width="593" height="1140" /></p>
<p>Fireworksin työkalut ovat yksinkertaisia, mutta tekevät tehtävänsä omassa lajissaan. Vakavempaan kuvankäsittelyyn sopii ehdottomasti Photoshop ja haastavaan kuvitukseen soveltuu Illustrator, mutta Fireworks kykenee myös selviytymään molemmista tehtävistä kunnialla.</p>
<h2>Tuttua ja tuntematonta</h2>
<p>Fireworks pystyy tallentamaan ja lataamaan tuttuja PSD ja AI tiedostomuotoja. Fireworksin oma tallennusformaatti on <strong>PNG</strong>, joka voi aiheuttaa hämmennystä; Macromedian insinöörit keksivät ujuttaa PNG-tiedostomuotoon lisää metatietoja , sisältäen kaikki layerit, objektit yms. dokumentista löytyvän datan. Fireworksin PNG-lähdetiedostoja voi katsastella millä tahansa kuvaformaatteja toistavalla ohjelmalla, kuten esim webbiselaimessa.</p>
<h3>Symbolit</h3>
<p><img src="http://gfx.fi/wordpress/wp-content/uploads/2011/08/symbol.jpg" alt="Symbol Properties" width="593" height="208" /></p>
<p>Fireworks ei tue Smart Objecteja, mutta tarjoa tilalle Indesignista ja Flashista tutut <em>Symbolit</em>. Verkkosivulla toistuvien elementtien käyttöön tarkoitettu Symbolit antavat mahdollisuuden luoda nopeasti vaikkapa rautalankamallin sivustosta. Symboliin tehdyt ulkoasu-muutokset päivittyvät  monisivuisessa Fw-dokumentissa kerralla. Leiskoissa yleisimmät Symbolin käyttötapaukset ovat lomake-elementeissa, napeissa ja tehokkaimillaan kokonaisissa Footer/Header alueissa.</p>
<h3>Styles</h3>
<p>Symbolien lisäksi Fireworks tarjoaa edistyneen <em>Styles</em>-toiminnon, jossa käytetty tyyli (Style) kattaa koko dokumentin CSS-tyylitiedostojen tapaan. Jos otsikolle tai leipätekstille on luotu oma Style, voidaan samaa Styleä käyttää  jokaisella sivulla ja tarvittavat muutokset päivittyvät jokaiselle sivulle automaattisesti.</p>
<p>Ripeään työskentelyyn Fireworks tarjoaa ruudulta elementtien leikkaa-liimaa (copy/paste) toiminnallisuuden eri Adobe ohjelmien välillä. Fireworksissa luodun Symbol-objektin copypasteaminen Flashiin siirtyy muuttumattomana vilauksessa tai vektorielementin kopioiminen Illustratorista Fireworksiin onnistuu vaivatta.</p>
<h3>Filters</h3>
<p><img src="http://gfx.fi/wordpress/wp-content/uploads/2011/08/filters.jpg" alt="Filters" width="593" height="208" /></p>
<p>Photoshopissa layeriin liittyvät tehosteet löytyvät Layer Style paneelin alta, Fireworksin vastaavanlaiset tehosteet löytyvät Properties Paneelin Filter-kohdasta. Filtereitä voi pinota miltei loputtomasti päällekkäin ja voidaan kytkeä päälle/pois, &#8220;flattaamatta&#8221; koskaan niitä itse objektiin.</p>
<h2>Yhteenveto</h2>
<p>Fireworks on tehokas työkalu, mutta tietoisuus ja yleisyys tästä on jäänyt Adoben lippulaivatuotteiden alle. Fireworksin tulevaisuus silti näyttää valoisalta &#8211; ketterän leiskaamisen, mobiili UI-suunnittelun ja  CSS3-tekniikoiden myötä Fireworksin käyttäjäkanta kasvaa joka päivä.</p>
<p>Vakiintunelle Photoshop-käyttäjälle Fireworks saattaa vaikuttaa omituiselta, mutta modernissa webbisuunnittelussa on ihan tervettä oppia uusia hyödyllisiä asioita <img src='http://gfx.fi/wordpress/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<h3>Linkkejä aiheesta</h3>
<p><a href="http://boagworld.com/design/fireworks-vs-photoshop/" target="_blank">10 Reasons Why I Prefer Fireworks CS4 To Photoshop For Web Design</a><br />
<a href="http://www.reinegger.net/50_reasons_not_to_use_photoshop_for_webdesign.html" target="_blank">50 reasons NOT to use Photoshop for Web Design</a><br />
<a href="http://ivomynttinen.com/blog/the-endless-fireworks-vs-photoshop-battle/" target="_blank">The Endless Fireworks vs. Photoshop Battle</a><a href="http://www.mlwebco.com/2011/04/why-i-prefer-adobe-fireworks-over-photoshop-for-designing-websites/" target="_blank"><br />
Why I Prefer Adobe Fireworks over Photoshop for Designing Websites</a><br />
<a href="http://www.isfireworksbetterthanphotoshop.com/" target="_blank">Is Fireworks Better Than Photoshop?</a></p>
]]></content:encoded>
			<wfw:commentRss>http://gfx.fi/2011/08/adobe-fireworks-101/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Parempaa tekstiä yrityksen nettisivuille!</title>
		<link>http://gfx.fi/2010/10/parempaa-tekstia-yrityksen-nettisivuille/</link>
		<comments>http://gfx.fi/2010/10/parempaa-tekstia-yrityksen-nettisivuille/#comments</comments>
		<pubDate>Sat, 09 Oct 2010 07:49:14 +0000</pubDate>
		<dc:creator>hoo</dc:creator>
				<category><![CDATA[Markkinointi ja SEO]]></category>
		<category><![CDATA[sisällöntuotanto]]></category>
		<category><![CDATA[verkkoteksti]]></category>

		<guid isPermaLink="false">http://gfx.fi/?p=2278</guid>
		<description><![CDATA[Napakka sisältö on kotisivujen tärkein vaikuttaja.  Artikkeli raottaa verkkokirjoittamisen lainalaisuuksia ja antaa vinkkejä paremman sisällön tuottamiseen erityisesti yrityksen nettisivuille. Viritä verkkosivusi toimimaan tehokkaammin ja hanki esimerkiksi enemmän yhteydenottoja sivuston kautta. ]]></description>
			<content:encoded><![CDATA[<p><strong>Napakka sisältö on kotisivujen tärkein vaikuttaja.  Artikkeli raottaa verkkokirjoittamisen lainalaisuuksia ja antaa vinkkejä paremman sisällön tuottamiseen erityisesti yrityksen nettisivuille. Viritä verkkosivusi toimimaan tehokkaammin ja hanki esimerkiksi enemmän yhteydenottoja sivuston kautta. </strong></p>
<h2>Verkkotekstin rakenne – selkeä jäsentely helpottaa lukijaa</h2>
<p>Koska kävijä lukee nettisivuja silmäillen, selaa sivuja nopeasti ja tarttuu vain itseään kiinnostavaa aiheeseen, on tekstin rakenteen palveltava surffailijaa. Hyvä verkkoteksti rakentuu kiteyttävistä otsikoista ja väliotsikoista, lyhyistä kappaleista sekä listoista.</p>
<p><strong>Koukuttava pääotsikko: </strong>Yksittäisen sivun pääotsikon tulisi kuvata koko sivun aihetta. Mielenkiintoisella otsikolla saat kävijän tarttumaan syöttiin eli tutustumaan sisältöön tarkemmin.</p>
<p><strong>Lyhyitä kappaleita: </strong>Jaa teksti kappaleisiin siten, että kussakin kappaleessa kerrotaan vain yksi asiakokonaisuus. Tärkein asia ensimmäiseen kappaleeseen ja tarkentava sisältö seuraaviin kappaleisiin.</p>
<p><strong>Kiteyttäviä väliotsikoita: </strong>Hyvä väliotsikko kiteyttää kappaleiden sanoman. Väliotsikko toimii lukijalle tärppinä kiinnostavaan tietoon.</p>
<p><strong>Listoja: </strong>Nyrkkisääntönä voidaan pitää, että yli kolmen kohdan luetteloissa tulisi käyttää listamerkkejä. Listaus auttaa lukijaa poimimaan luettelosta olennaisen ja hahmottamaan kokonaisuuden paremmin.</p>
<h2>Kirjoitustyylistä ja verkkosivujen sisällöstä</h2>
<h3>Kenelle kirjoitat? Kohderyhmä huomioon</h3>
<p>Keitä ovat yrityksen asiakkaat, entä kotisivujen kävijät? Täytyykö asia vääntää rautalangasta asiasta mitään tietämättömälle vai voidaanko käyttää ammattisanastoa, koska teksti on kohdennettu asiantuntijoille.</p>
<h3>Tee tekstistä helppotajuista: anna esimerkkejä ja vältä abstrakteja sanoja</h3>
<p>Verkkotekstin tulee olla helposti ymmärrettävää.  Käytä mieluummin konkreettisia sanoja kuin abstrakteja ilmauksia. Sanoja, jotka tuovat lukijalle mieleen jonkin asian tai esineen. Lyhyet virkkeet pitävät huolen, että lukija ymmärtää tekstin ensi lukemalta.</p>
<p>Vaikeampitajuisetkin asiat aukeavat esimerkin avulla. Jos kirjoitat palvelukuvausta AdWords-mainonnasta voi hyvänä esimerkkinä toimia kuvitteelliselle yritykselle toteutetun kampanjan kuvaus: suunnitteluvaihe, toteutusvaihe ja tulokset kuvaesimerkein höystettynä.</p>
<h3>Puhuttele lukijaa – vältä passiivia</h3>
<p>Saat verkkotekstiin tehokkaamman otteen, kun sinuttelet lukijaa.</p>
<p><strong>Kirjoita näin</strong>: <em>Toteutamme yrityksellesi vaikuttavat markkinointimateriaalit niin Internetiin kuin printtipuolellekin. </em></p>
<p><em> &gt; Pyydä tarjous!</em></p>
<p><em> </em><strong>Ei näin: </strong><em>Suunnittelemme asiakkaillemme markkinointimateriaalia niin Internetiin kuin printtipuolellekin.</em></p>
<p><em>&gt; Tarjouspyyntö</em></p>
<h3>Verkkokirjoittamisen 3 sääntöä: tiivistä, tiivistä ja tiivistä</h3>
<p>Web-käytettävyyden asiantuntija Steve Krug toteaa kirjassaan <em>Dont’ make me think! </em>suunnilleen näin:<em> ”Poista verkkotekstistä ensin puolet ja karsi jäljelle jäänyt vielä puoleen.” </em></p>
<p>Jos avaat umpimähkään 10 eri yrityksen verkkosivut, saat lukea puolen näistä yrityksistä olevan luotettavia ja heidän tuotteidensa laadukkaita ilman sen kummempia perusteluita.  Verkkotekstissä ei ole sijaa ylimääräiselle jaarittelulle. Pitäydy faktaan ja poista tekstistä mitäänsanomattomat lauseet.</p>
<p><strong><em>Vältä mm. näitä adjektiiveja: </em></strong><em>luotettava, laadukas, ammattitaitoinen, innovatiivinen, asiakaslähtöinen ja kustannustehokas</em></p>
<h3>Korosta hyötyjä</h3>
<p>Pohjimmiltaan asiakas ei osta palvelua, vaan palvelun tai tuotteen tuomaa hyötyä. Tuo siis myös palvelu- tai tuotekuvauksissa esille seikat, joiden takia asiakkaan kannattaa ostaa. Tekniset tiedot eivät yksistään riitä vakuuttamaan asiakasta.</p>
<p>Hyötyjä voivat olla esimerkiksi helppokäyttöisemmän ohjelmiston tuoma ajansäästö työaikaan tai hyvin hakukoneoptimoidun sivuston tuomat uudet asiakkaat ja noussut liikevaihto.</p>
<h3>Herätä teksti henkiin, tee toisin kuin kilpailijat</h3>
<p>Hyvä verkkoteksti on paitsi konkreettista myös ilmaisultaan rikasta. Tekstisi saa heti piristystä, kun vältät latteuksia ja käytät harvemmin hyödynnettyjä ilmauksia ja adjektiiveja. Värikäs teksti on oiva keino erottua kilpailijoista.</p>
<p>Esimerkkiä voit lukea <a href="http://www.ediste.fi" target="_blank">Edisteen sivuilta</a></p>
<h3>Suosittelun voima – referenssit näkyviin</h3>
<p>Mikään ei toimi tehokkaammin kuin jo ostaneen suositus. Laita siis referenssit näkyvästi esille ja kerro, millainen ongelma asiakkaalla oli ja miten yrityksen palvelut tai tuote sen ratkaisi. Asiakkaan kuva ja kommentti ovat plussaa.</p>
<h3>Oikolue. Pyydä kommentteja. Tee korjauksia.</h3>
<p>Sisällöntuottajan on syytä osata peruskielioppi: isot alkukirjaimet, yhdyssanojen oikeinkirjoitus ja pilkkusäännöt. Pronominiviittausvirheistä tai lauseenvastikkeen väärästä käytöstä marmattamisen voi suosiolla jättää äidinkielenopettajille.</p>
<p>Pyydä siis muutamaa henkilöä oikolukemaan teksti ja kommentoimaan tekstin ymmärrettävyyttä ennen julkaisua.</p>
<h2>Mitä yrityksen nettisivujen pitäisi sisältää?</h2>
<p><strong>Ainakin nämä</strong></p>
<ul>
<li><em>Yhteystiedot</em> ­– selkeästi näkyville. <strong></strong></li>
<li><em>Tiedot palveluista ja tuotteista </em><strong>– </strong>yrityksen toimiala näkyviin heti etusivulla.<br />
Korosta hyötyjä!<strong></strong></li>
</ul>
<p><strong>Syvennä sisältöä</strong></p>
<ul>
<li><em>Tietoa yrityksestä –</em> yrityksen historiaa, toimintatapoja, henkilöitä<strong></strong></li>
<li><em>Henkilöiden kuvat yhteystietoihin – </em>juttu luistaa, kun puhelukumppanin naama on tiedossa<strong></strong></li>
<li><em>Ajankohtaista-osio </em>– ainoastaan jos päivityksestä huolehditaan säännöllisesti. <strong></strong></li>
</ul>
<p><strong>Näillä vakuutat</strong></p>
<ul>
<li><em>Referenssit ja casekuvaukset –</em> miten yritys on ratkaissut muiden asiakkaiden ongelmia.  Asiakkaan kommentti, nimi ja kuva plussaa. Muista linkittää case oikean palvelukuvauksen yhteyteen.<strong></strong></li>
<li><em>Taustatietoja yrityksen avainhenkilöistä ­– </em>erityisesti asiantuntijayrityksen verkkosivuilla!<strong></strong></li>
<li><em>Maistiaisia yrityksen osaamisesta</em>: asiantuntija-artikkeleita, ladattavia pikaoppaita, kysy &amp; vastaa –palsta, blogi, videoita&#8230;.<strong></strong></li>
</ul>
<h2>Ohjelmavinkki kirjoittajalle ja sisältösuunnittelijalle</h2>
<p><em>XMind</em> on työkalusi tekstin suunnitteluun, jos sanot miellekartoille kyllä ja naputtelet mieluummin näppäimistöä kuin tartut kynään. Lyhyellä ohjelmaperehtymisellä luot helposti muokattavia ajatuskarttoja ja rakennekaavioita. Perusversio on ilmainen – maksullisella versiolla saa lisäominaisuuksia käyttöön.</p>
<p>XMind soveltuu mainiosti myös nettisivujen sivukartan ja sisältöaiheiden suunnitteluavuksi.</p>
<p><a href="http://www.xmind.net/" target="_blank">www.xmind.net</a></p>
<h2>Netissä aiheesta</h2>
<ul>
<li><a href="http://vierityspalkki.fi/2010/04/20/hakukoneoptimointi-lyhyt-oppimaara/" target="_blank">Vierityspalkin artikkeli sisällöntuottamisesta</a> hakukoneoptimoinnin näkökulmasta</li>
<li><a href="http://www.facebook.com/pages/Kirjoituskoulu-a-la-  Alasilta/115571105148330#!/pages/Kirjoituskoulu-a-la-Alasilta/115571105148330?v=app_2347471856" target="_blank">Anja Alasillan kirjoitusvinkkejä </a>Facebookissa</li>
</ul>
<h2>Kirjallisuutta</h2>
<ul>
<li>Steve Krug: Don’t Make Me think</li>
<li>Anja Alasilta: Verkkokirjoittajan käsikirja</li>
<li>Anja Alasilta: Blogi tulee töihin</li>
<li>Marsa Luukkonen: Tekstiä tekemään, kirjoittajan opas</li>
<li>Katleena Kortesuo: Tekstiä Ruudulla, kirjoitamme verkkoon</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://gfx.fi/2010/10/parempaa-tekstia-yrityksen-nettisivuille/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Gfx uudistuu</title>
		<link>http://gfx.fi/2010/09/gfx-uudistuu/</link>
		<comments>http://gfx.fi/2010/09/gfx-uudistuu/#comments</comments>
		<pubDate>Sun, 19 Sep 2010 12:46:57 +0000</pubDate>
		<dc:creator>hoo</dc:creator>
				<category><![CDATA[Digiala]]></category>
		<category><![CDATA[ajankohtaista]]></category>

		<guid isPermaLink="false">http://gfx.fi/?p=2266</guid>
		<description><![CDATA[Gfx palvelu uudistuu vuoden 2010 aikana. Uusi sivusto tarjoaa digimedia-aiheista sisältöä entistä laajemmin ja kattavammin kaikille aiheesta kiinnostuneille.]]></description>
			<content:encoded><![CDATA[<p>Gfx palvelu uudistuu vuoden 2010 aikana. Uusi sivusto tarjoaa digimedia-aiheista sisältöä entistä laajemmin ja kattavammin kaikille aiheesta kiinnostuneille. Sivuston käyttöliittymää on paranneltu ja palvelu tulee sisältämään täysin uusia osa-alueita.</p>
<p>Löytyykö Sinulta hyviä ajatuksia ja ideoita mitä palvelun tulisi jatkossa sisältää? Nyt on täydellinen aika jakaa ajatuksia ja päästä vaikuttamaan tulevaan palveluun. Kommentoi tai kerro niistä meille sähköpostitse osoitteeseen info@gfx.fi.</p>
]]></content:encoded>
			<wfw:commentRss>http://gfx.fi/2010/09/gfx-uudistuu/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>XSS – aliarvioitu uhka?</title>
		<link>http://gfx.fi/2010/08/xss-%e2%80%93-aliarvioitu-uhka/</link>
		<comments>http://gfx.fi/2010/08/xss-%e2%80%93-aliarvioitu-uhka/#comments</comments>
		<pubDate>Thu, 19 Aug 2010 14:13:21 +0000</pubDate>
		<dc:creator>hoo</dc:creator>
				<category><![CDATA[Site building]]></category>
		<category><![CDATA[tietoturva]]></category>
		<category><![CDATA[xss]]></category>

		<guid isPermaLink="false">http://gfx.fi/?p=2248</guid>
		<description><![CDATA[Cross-site scripting (XSS) on haavoittuvuuden muoto, jonka avulla web-sivustolla voidaan ajaa ulkoista selainpuolen koodia, käytännössä JavaScriptiä. XSS-haavoittuvuudet mahdollistavat niin pienen kiusan kuin pahimillaan synnyttävät vakavampia tietoturvauhkia. XSS-haavoittuvuudet ovat yllättävän yleisiä ja myös melko helposti löydettävissä. Kaikesta huolimatta niihin suhtaudutaan usein liiankin kevyesti.]]></description>
			<content:encoded><![CDATA[<p><strong>Cross-site scripting (XSS) on haavoittuvuuden muoto, jonka avulla web-sivustolla voidaan ajaa ulkoista selainpuolen koodia, käytännössä JavaScriptiä. XSS-haavoittuvuudet mahdollistavat niin pienen kiusan kuin pahimillaan synnyttävät vakavampia tietoturvauhkia.</strong></p>
<p>XSS-haavoittuvuudet ovat yllättävän yleisiä ja myös melko helposti löydettävissä. Kaikesta huolimatta niihin suhtaudutaan usein liiankin kevyesti.</p>
<p>Kesäkuussa Mikko Hyppönen <a rel="external" href="http://www.f-secure.com/weblog/archives/00001972.html">kirjoitti F-Securen blogissa XSS-haavoittuvuudesta</a>, joka oli löytynyt heidän omalta sivustoltaan. Tämän johdosta päätin kirjoittaa artikkelin tietoturvaongelmasta, jota mielestäni aliarvioidaan.</p>
<p>Hyppönen tiivisti ongelman ytimen erinomaisesti toteamalla <em>“Jos edes tietoturvayhtiöt eivät saa omia sivujaan täysin aukottomiksi, niin minkälaista toivoa on yhtiöillä, joiden erikoisosaamisala ei ole tietoturva?”</em>.</p>
<p>Allekirjoitan Hyppösen väittämän täysin: kirjoittaessani tätä artikkelia kävin läpi 15 satunnaista sivustoa <a rel="external" href="http://www.gallupweb.com/tnsmetrix/">Suomen 25 vierailluimmasta sivustosta</a>. Lyhyehköillä, manuaalisilla testeillä löysin XSS-haavoittuvuuden yhdeksästä eri palvelusta. Kahdeksassa näistä palveluista on käyttäjäosio, kahdessa palvelussa liikkuu oikea raha.</p>
<p>Tässä artikkelissa käyn läpi XSS-haavoittuvuuksien eri muotoja, mitä ne todellisuudessa mahdollistavat, ja yhtälailla sitä, mitkä ovat XSS:n heikkoudet. Käyn läpi myös yhden kuvitteellisen esimerkin, jonka tarkoituksena on havainnollistaa tarkemmin XSS:n käyttöä todellisessa tilanteessa.</p>
<p>Artikkeli ei tarjoa neuvoja XSS-haavoittuvuuksien torjumiseksi, sillä aihe on monin osin teknologiariippuvainen. Artikkelin lopussa on kuitenkin listattuna muutama hyödyllinen linkki, jotka osaltaan antavat vinkkejä myös torjumiselle.</p>
<h2>Mistä oikeastaan on kyse?</h2>
<ul>
<li>XSS-haavoittuvuuksien määrän on arvioitu olevan noin 80% kaikista tietoturvahaavoittuvuuksista (Symantec, 2007),</li>
<li>OWASP (The Open Web Application Security Project) listaa XSS-haavoittuvuudet vuoden 2010 toiseksi pahimmaksi tietoturvauhkaksi,</li>
<li>XSS-haavoittuvuuksia on esiintynyt myös erittäin tunnetuilla sivustoilla, kuten Facebook, Twitter tai Wikipedia.</li>
</ul>
<p>Lyhyenä johtopäätöksenä voidaan todeta, että XSS on laaja ja vakavasti otettava uhka, jolta edes suuret toimijat eivät voi välttyä.</p>
<h2>XSS-haavoittuvuuksien muotoja</h2>
<p>XSS-haavoittuvuuksia on olemassa ainakin neljää eri muotoa:</p>
<ol>
<li>URL:n välityksellä suoritettava haavoittuvuus,</li>
<li>Sivustolle lähetetyssä syötteessä esiintyvä haavoittuvuus,</li>
<li>Selainpuolen logiikassa esiintyviä virheitä hyödyntävä haavoittuvuus,</li>
<li>Ulkoista syötettä hyödyntävä haavoittuvuus,</li>
</ol>
<p>Lisäksi viidentenä uhkana on syytä listata “käyttäjän itsensä ajama haittakoodi”.</p>
<h3>1) URL:n välityksellä suoritettava haavoittuvuus</h3>
<p>Tämä lienee yleisin muoto haavoituvuudelle. Osoitteen välityksellä suoritettu haavoittuvuus on myös lyhytikäinen ja helpoiten havaittavissa.</p>
<p>Jos sivusto ei osaa validoida oikein URL:ssa välitettyjä parametreja, niin tämän haavoittuvuuden hyödyntäminen on helppoa. Tällöin URL voisi näyttää esimerkiksi tältä: <strong>http://www.domain.tld/?page=Main&#8221;%3e%3c%73%63%72%69%70%74%20%73%72%63=//%62%69%74%2e%6c%79/%78%73%73_1%3e</strong>.</p>
<p>Uskallan väittää, että keskivertokäyttäjä (keskiverto, et siis sinä) ei näe tässä mitään epäilyttävää. Lisäksi keskivertokäyttäjän selain näkee tässä harvemmin mitään epäilyttävää. Ja vaikka näkisikin, niin sen kiertämiseksi on yleensä keinoja. Tämän lisäksi URL:n lyhennystä tarjoavat palvelut tarjoavat mahdollistavat käyttäjän hämäämisen.</p>
<h3>2) Sivustolle lähetetyssä syötteessä esiintyä haavoittuvuus</h3>
<p>Tämä tapaus on astetta vakavampi, sillä kyseessä on sivustolla pysyvästi esiintyvä haavoittuvuus.</p>
<p>Perusideana on löytää sivuston lomakkeista kenttiä, joiden kautta haittakoodi on lisättävissä. Esimerkkinä mainittakoon, että tällainen haavoittuvuus löytyi mm. Facebookista vielä muutama kuukausi sitten, jossa ryhmän nimeä ei validoitu, kun se esitettiin dynaamisissa hakutuloksissa.</p>
<p>Nykyään monet sivustot ovat rakennettu valmiiden tuotteiden tai frameworkien päälle, joissa tämänkaltaiset haavoittuvuudet on lähes poikkeuksetta estetty.</p>
<h3>3) Selainpuolen logiikassa esiintyvät virheet</h3>
<p>Tämä haavoittuvuuden muoto on idealtaan samankaltainen kuin kohdan #1 haavoittuvuus. Tässä tapauksessa haittakoodia ei lisätä HTML-rakenteeseen vaan se suoritetaan jo olemassa olevan Javascript-koodin avulla.</p>
<p>Tällainen haavoittuvuus esiintyy harvemmin. Tilanteissa, joissa sivustolle lisätään skriptejä dynaamisesti, suoritetaan <em>eval()</em> funktio tai muulla tavoin manipuloidaan DOM-rakennetta hyödyntäen suoraan URL:ssa välitettyjä parametreja, on tämän haavoittuvuuden hyödyntäminen täysin mahdollista.</p>
<h3>4) Ulkoista syötettä hyödyntävä haavoittuvuus</h3>
<p>Tämä haavoittuvuus on harvinaisempi ja esiintyy lähinnä silloin, kun ollaan toimittu todella ajattelemattomasti.</p>
<p>Esimerkkinä on tilanne, jossa sivustolla julkaistaan Twitter-feed jonkin hash-tagin perusteella kuitenkaan validoimatta feediä, tai käsittelemällä feediä selainpuolella (kohta #3). Näin kävi muun muassa tapauksessa <a rel="external" href="http://www.flickr.com/photos/meg/4453821027/">#cashgordon</a>.</p>
<h3>5) Käyttäjän itsensä ajama haittakoodi</h3>
<p>Tämä haavoittuvuus on ikävä siitä syystä, että sivuston ylläpitäjällä ei käytännössä ole vaikutusmahdollisuuksia haavoittuvuuden esiintymiseen. Haavoittuvuus perustuu sille, että käyttäjä saadaan itse ajamaan JavaScriptiä selaimessaan.</p>
<p>Mutta miksi käyttäjä ajaisi selaimessaan JavaScriptiä?</p>
<p>Tämä haavoittuvuus perustuu kolmeen asiaan: 1) peruskäyttäjä ei tiedä tämän olevan kovin vaarallista, 2) suositus haittakoodin ajamiseksi tulee monesti muilta, yleensä tutuilta ihmisiltä ja 3) uteliaisuus ei ole synti.</p>
<p>Asetelma on käytännössä hyvin samanlainen kuin sähköposteilla leviävien matojen ja viruksien osalta.</p>
<p>Moni meistä on nähnyt tämän tapahtuvan esimerkiksi Facebookissa. Kuvitellaan skenaario: luodaan ryhmä, jossa kerrotaan dislike-toiminnon saamisesta käyttöön ajamalla yksinkertainen komento selaimen osoitepalkissa. Tämän avulla lisätään sivulle skripti, joka tekee automaattisen status-päivityksen, jolloin huijaus leviää.</p>
<p>Tämä skenaario on itse asiassa totta. Tällä tavoin huijausta saatiin levitettyä satojen tuhansien Facebook-käyttäjien keskuudessa. Enkä yhtään ihmettele.</p>
<h2>XSS tarkoittaa aina ongelmia</h2>
<p>Alla on listattuna muutama ongelma, jotka ensimmäisenä tulevat mieleeni XSS-haavoittuvuuksista:</p>
<h3>Käyttäjän syöte on selkokielistä</h3>
<p>Tärkeimpänä huomio on, että injektoitu sivu voi kerätä talteen selkokielisenä kaiken, mitä käyttäjä sivulle syöttää. Käyttäjä voi luulla normaalisti kirjautuvansa palveluun syöttäen tunnuksen ja salasanan ollen täysin tietämätön, mihin tiedot todellisuudessa päätyvät.</p>
<h3>Käyttäjä luottaa tuttuun sivustoon</h3>
<p>Toinen tärkeä huomio on, että XSS mahdollistaa toimimisen ympäristössä, johon käyttäjä luottaa. Tämä madaltaa kynnystä sille, että käyttäjä on valmis luovuttamaan arkaluontoisia tietoja. Kun tutun palvelun ruudulle ilmestyy dialogi, joka luotettavasti esittää syitä, miksi käyttäjän on syötettävä tunnuksensa ja salasanansa, ei käyttäjä välttämättä osaa epäillä mitään.</p>
<h3>XSS-haavoittuvuus indikoi myös muista tietoturvaongelmista</h3>
<p>Jos sivustolta löytyy XSS-haavoittuvuus, niin ei ole epäkohteliasta olettaa sivustolla olevan myös muita puutteita tietoturvassa. XSS-haavoittuvuus antaa usein viittaukseen siihen, että sivusto ei ole rakennettu valmiin tuotteen päälle, jolloin tietoturvaan liittyvät seikat on täytynyt miettiä erikseen. Vaikka sivusto olisikin tehty hyödyntäen valmista frameworkia, niin tällöin on tehty auttamattomasti väärin.</p>
<p>Joka tapauksessa on varmaa, että XSS-haavoittuvuus houkuttelee ei-toivottuja vieraita sivusto(i)lle.</p>
<h3>Virheillä on tapana toistua</h3>
<p>Kun sivuston luonut taho on tiedossa, syntyy uudenlainen ongelma: googlaamalla tai vierailemalla tahon oman sivustolla on usein löydettävissä muut saman tahon luomat sivustot, joilla samat tietoturvaongelmat mahdollisesti toistuvat.</p>
<h3>Käyttäjän silmissä jokainen haavoittuvuus on yhtä vakava</h3>
<p>Kun käyttäjä kuulee sivustolla olleen tietoturvaongelmia, hänen luottamus sivustoa kohtaan on usein menetetty. Sillä on harvemmin väliä, onko joku onnistunut saamaan haltuunsa yksittäiset tunnukset, viemään koko tietokannan tai tehnyt vain pientä kiusaa XSS-haavoittuvuuden avulla. Peruskäyttäjiä ei niinkään kiinnosta tekniset yksityiskohdat tai sivuston ylläpitäjän selitykset tietoturvaongelmien eri vakavuusasteista.</p>
<h2>Kuvitteellinen esimerkki XSS-haavoittuvuudesta</h2>
<p>Tämän esimerkin tarkoituksena on havainnollistaa, minkälaisen tilanteen XSS-haavoittuvuus voi mahdollistaa.</p>
<h3>Alkutilanne</h3>
<p>Olemme löytäneet XSS-haavoittuvuuden hyvin suositulta keskustelupalstalta. Haavoittuvuus voidaan ajaa lisäämällä haittakoodi yhdessä keskustelusäikeen tunnisteen parametrissä: <strong>http://www.foobarforum.com/?threadID=42%27%3e%3c%73%63%72%69%70%74%20%73%72%63=//%62%69%74%2e%6c%79/%78%73%73_1%3e</strong></p>
<p>Valtaosa merkeistä on UTF-8 formaatissa. Osoitteen lyhentämiseksi voimme toimia myös siten, että muutamme vain osan merkeistä UTF-8 formaattiin. Vaihtoehtoisesti voisimme käyttää URL:n lyhentäjiä.</p>
<h3>Valmistelut</h3>
<p>Olemme siis luoneet keskustelun, jonka ID on 42. Lisäksi olemme luoneet skriptin, jota kutsumme. Tämä skripti ajaa haittakoodin sekä tekee tarvittavat muutokset, jotta loppuvaikutelma on luotettava.</p>
<p>Olemme aiemmin luoneet käyttäjätunnuksia muille suosituille keskustelupalstoille sekä kirjoittaneet muutamia  viestejä, jotta luodut tunnukset ovat muiden käyttäjien silmissä luotettavampia.</p>
<p>Tämän jälkeen luomme viestejä muille keskustelupalstoille, joissa viittaamme XSS-haavoittuvuuden sisältävälle keskustelupalstalle:</p>
<p><img src="http://gfx.fi/wordpress/wp-content/uploads/2010/08/xss-aliarvioitu-uhka-1.png" alt="Kuva keskustelupalstan viestistä, jossa houkutellaan käyttäjiä XSS-haavoittuvuuden sisältävälle sivustolle." /></p>
<p>Olemme kirjoittaneet viestin työajan ulkopuolella, kuitenkin keskustelupalstojen käyttäjien ollessa vielä aktiivisia.  Eli keskustelupalstoilla vierailevien käyttäjien määrä on suuri, mutta ylläpitäjän viive haavoittuvuuden korjaamiseksi voidaan olettaa olevan pidempi.</p>
<p>Viestin tarkoitus on olla riittävän houkutteleva, mutta samalla uskottava. Keskustelupalstat ovat usein rakentuneet jonkin teeman ympärille (tekniikka, musiikki, perhe, jne.), jolloin houkuttelevien palkintojen ja muiden lupausten keksiminen on hyökkääjän kannalta triviaalia.</p>
<p>Hyökkäyksen kannalta on ongelmallista, että ennemmin tai myöhemmin joku käyttäjistä huomaa linkin hyödyntävän XSS-haavoittuvuutta – ilmoittaen asiasta sekä keskustelupalstalle että kohdesivuston ylläpitäjälle. Olemme kuitenkin jakaneet linkkiä useilla eri sivustoilla, jolloin vierailevia käyttäjiä tulee useista lähteistä.</p>
<h3>Varsinainen ongelma</h3>
<p>Koska olemme kiinnostuneet käyttäjätunnuksista, meidän on ylläpidettävä tarinaa, joka saa käyttäjän kirjautumaan tai rekisteröitymään palveluun. Lisäksi meidän on huolehdittava siitä, että käyttäjä ei välillä poistu injektoidusta dokumentista:</p>
<p><img src="http://gfx.fi/wordpress/wp-content/uploads/2010/08/xss-aliarvioitu-uhka-2.png" alt="Kuva haavoittuneesta dokumentista, jossa käyttäjää houkutellaan syöttämään arkaluontoista tietoa." /></p>
<p>Olemme muokanneet dokumentin sisältöosiota jättäen ympäröivä rakenne alkuperäiseen muotoonsa, pois lukien sivuston oma kirjautumisosio (1). Kerromme käyttäjälle aiemmin kuvaillulla tavalla, että sivustolle on kirjauduttava sisään, jotta (kilpailu)viesti on nähtävissä. Samalla tarjoten myös toista lomaketta (2) sisäänkirjautumista varten.</p>
<p>Kumpikaan kirjautumislomakkeesta ei todellisuudessa ohjaa uudelle sivulle vaan ainoastaan lähettää syötetyt tiedot hyökkääjän palvelimelle sekä näyttää “väärä käyttäjätunnus tai salasana” -ilmoituksen haavoittuneessa dokumentissa.</p>
<p>Jos käyttäjä on jo rekisteröitynyt palveluun, on myös mahdollista, että hänellä on käytössään selaimen suorittama tunnuksen ja salasanan esitäyttö sivuston omaan sisäänkirjautumislomakkeeseen. Tässä tilanteessa saamme suoraan poimituksi tunnuksen ja salasanan.</p>
<p>Lisäksi tarjoamme rekisteröitymismahdollisuutta (3), joka tässä tapauksessa avaa täytettäväksi dynaamisesti luodun dialogin. Samoin menettelemme myös “unohtuneen salasanan” (4) kohdalla.</p>
<p>Hyökkäyksen elinkaaren kannalta on tärkeää saada käyttäjä pidetyksi haavoittuneessa dokumentissa mahdollisimman pitkään.</p>
<p>Jokaiselta löytyy (tai ainakin pitäisi löytyä) useampia eri salasanoja, joita käyttää eri palveluissa. Tämän myötä on aivan mahdollista, että jo rekisteröitynyt käyttäjä tulee kokeilleeksi useampia käyttämiään salasanojaan yrittäessään kirjautua palveluun. Käyttäjän pyytäessä uutta salasanaa on varsin tavallista tiedustella käyttäjän sähköpostiosoitetta sekä mahdollisesti vastausta johonkin turvakysymykseen. Tämä mahdollistaa jälleen uusien, arkaluontoisten tietojen keruun.</p>
<p>Tämän kaiken lisäksi on mahdollista, että löydämme meitä hyödyttävää tietoa myös evästeistä tai muista sivustolla käytettävistä muuttujista.</p>
<h3>Lopputulos</h3>
<p>Tarjoamme käyttäjälle useamman mahdollisuuden syöttää joko olemassaoleva tunnus ja salasana palveluun tai rekisteröityä palveluun, jolloin voimme pyytää käyttäjältä muita henkilökohtaisia tietoja.</p>
<p>Vaikka lopputuloksena olisi se, että emme saisi yhdenkään käyttäjän tunnuksia, niin vahinko on jo tapahtunut. Vähintä (tai järkevintä), mitä haavoittuneen sivuston ylläpitäjä voi tehdä, on kertoa tilanteesta ja kehoittaa kaikkia käyttäjiä vaihtamaan salasanansa omassa palvelussaan sekä myös muissa palveluissa, joissa on käytössä sama salasana.</p>
<h2>Johtopäätös</h2>
<p>Kuten aiemmin totesin, XSS-haavoittuvuuksia löytyy jatkuvasti niin pieniltä kuin suurilta sivustoilta. Tein itse vain pienen pintaraapaisun käydessäni läpi joitakin Suomen suosituimpia sivustoja todeten, että yli puolessa palveluista löytyy haavoittuvuus. Kaiken kaikkiaan olen tänä vuonna raportoinut reilu viisikymmentä haavoittuvuutta, näiden tapausten ollessa yleensä todella ilmeisiä.</p>
<p>Olen valmis tekemään johtopäätöksen, että XSS-haavoittuvuuksiin joko suhtaudutaan verkkopalveluiden ylläpitäjien näkökulmasta liian kevyesti tai tietoisuus tästä haavoittuvuuden muodosta on aivan liian vähäinen. Toisena johtopäätöksenä on, että loppukäyttäjän ei voida koskaan olettaa olevan riittävän valveutunut tai vastuussa haavoittuvuuteen lankeamisesta, vaan vastuu on aina sivuston ylläpitäjällä.</p>
<p>XSS-haavoittuvuuksien hyödyntäminen vaatii jonkin verran luovuutta ja mielikuvitusta, eli “ei se tarina, vaan miten se kerrotaan”. Jos tavoitteena todella on aiheuttaa haittaa, niin keinojen keksiminen ei viime kädessä ole ongelma.</p>
<h2>Luettavaa</h2>
<ul>
<li><a rel="external" href="http://fi.wikipedia.org/wiki/Cross_site_scripting">Wikipedia: Cross Site Scripting</a></li>
<li><a rel="external" href="http://ha.ckers.org/xss.html">XSS Cheat Sheet</a></li>
<li><a rel="external" href="http://www.xssed.com/">XSSed – Cross Site Scripting attacks information and archive</a></li>
<li><a rel="external" href="http://blog.c22.cc/2010/03/16/alertxss-the-slow-death-of-xss/">“alert(‘xss’) – The slow death of XSS”</a></li>
<li><a rel="external" href="http://dev.opera.com/articles/view/opera-javascript-for-hackers-1/">Opera Dev Community: JavaScript for Hackers</a></li>
<li><a rel="external" href="http://blip.tv/file/3684946">Video: JavaScript: The Evil Parts (Billy Hoffman, JSConf 2010)</a></li>
<li><a rel="external" href="http://www.ihminen.org/xss/">Listaus XSS-haavoittuvuuksista Suomessa (päivitetty viimeksi 19.4.2008)</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://gfx.fi/2010/08/xss-%e2%80%93-aliarvioitu-uhka/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>jQuery:n käyttö dynaamisesti ladatun sisällön kanssa</title>
		<link>http://gfx.fi/2010/07/jqueryn-kaytto-dynaamisesti-ladatun-sisallon-kanssa/</link>
		<comments>http://gfx.fi/2010/07/jqueryn-kaytto-dynaamisesti-ladatun-sisallon-kanssa/#comments</comments>
		<pubDate>Mon, 26 Jul 2010 18:58:45 +0000</pubDate>
		<dc:creator>hoo</dc:creator>
				<category><![CDATA[Site building]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://gfx.fi/?p=2223</guid>
		<description><![CDATA[Eri selaimien ja selainversioiden kanssa tapellessa jQuery helpottaa Front-end-koodarin elämää valtavasti. jQuery on suuri tuskan poistaja esimerkiksi Ajax:in kanssa temppuillessa, mutta silti on vielä joitakin sudenkuoppia, mitä sivunrakentajan on syytä varoa.]]></description>
			<content:encoded><![CDATA[<p><strong>Eri selaimien ja selainversioiden kanssa tapellessa jQuery  helpottaa Front-end-koodarin elämää valtavasti. jQuery on suuri tuskan  poistaja esimerkiksi Ajax:in kanssa temppuillessa, mutta silti on vielä  joitakin sudenkuoppia, mitä sivunrakentajan on syytä varoa.</strong></p>
<p><a href="http://gfx.fi/wordpress/matsku/artikkeli-2223/index.html">Katso demo</a></p>
<p><a href="http://gfx.fi/wordpress/matsku/artikkeli-2223/jqueryn_kaytto_dynaamisesti_ladatun_sisallon_kanssa.zip">Lataa  tiedostot</a></p>
<p>Tämä opas on henkinen jatko-osa jutulle nimeltään <a href="../../2010/06/ajaxin-alkeet-jqueryn-avulla/">Ajax:in  alkeet jQueryn avulla</a>. Demosivu muistuttaa pitkälti edelliskertaista  sivua, mutta joitakin muutoksia on tullut:</p>
<p><strong>index.html:</strong></p>
<pre class="brush: xml;">
&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;fi&quot;&gt;

&lt;head&gt;
	&lt;meta charset=utf-8&gt;
	&lt;title&gt;Otsikko&lt;/title&gt;

	&lt;script src=&quot;http://www.google.com/jsapi&quot;&gt;&lt;/script&gt;
&lt;/head&gt;

&lt;body&gt;

	&lt;h1&gt;Otsikko&lt;/h1&gt;

	&lt;ul id=&quot;navigointi&quot;&gt;
		&lt;li&gt;&lt;a id=&quot;etusivu&quot; href=&quot;#&quot;&gt;Etusivu&lt;/a&gt;&lt;/li&gt;
		&lt;li&gt;&lt;a id=&quot;uutiset&quot; href=&quot;#&quot;&gt;Uutiset&lt;/a&gt;&lt;/li&gt;
		&lt;li&gt;&lt;a id=&quot;yhteystiedot&quot; href=&quot;#&quot;&gt;Yhteystiedot&lt;/a&gt;&lt;/li&gt;
	&lt;/ul&gt;

	&lt;div id=&quot;sisalto&quot;&gt;

	&lt;/div&gt;

&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>Nyt navigointilinkit eivät johda mihinkään ja sivun varsinainen  sisältö on poistettu, sillä tulemme hoitamaan tämän kaiken jQueryn ja  Ajaxin avulla. Näinhän ei tietenkään oikealla sivulla koskaan tulisi  toimia, mutta jotta juttumme pääasia tulisi mahdollisimman selväksi,  oiotaan mutkia tältä osin hiukan.</p>
<p>Kaikki sisältö on siirretty yhteen dokumenttiin nimeltään <strong>ajax.html</strong>,  jotta jatkossa osioiden käsittely jQueryllä olisi hiukan helpompaa.  Heitetään soppaan vielä mukaan pieni kuvagalleria jokaiselle osiolle:</p>
<p><strong>ajax.html:</strong></p>
<pre class="brush: xml;">

&lt;div id=&quot;etusivu&quot;&gt;
	&lt;h2&gt;Etusivun jutut&lt;/h2&gt;

	&lt;p&gt;Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua...&lt;/p&gt;

	&lt;ul id=&quot;kuvalinkit&quot;&gt;
		&lt;li&gt;&lt;a href=&quot;#&quot; class=&quot;kuva1&quot;&gt;Kuva 1&lt;/a&gt;&lt;/li&gt;
		&lt;li&gt;&lt;a href=&quot;#&quot; class=&quot;kuva2&quot;&gt;Kuva 2&lt;/a&gt;&lt;/li&gt;
		&lt;li&gt;&lt;a href=&quot;#&quot; class=&quot;kuva3&quot;&gt;Kuva 3&lt;/a&gt;&lt;/li&gt;
	&lt;/ul&gt;

	&lt;div id=&quot;galleria&quot;&gt;
		&lt;div class=&quot;kuva1&quot;&gt;&lt;/div&gt;
		&lt;div class=&quot;kuva2&quot;&gt;&lt;/div&gt;
		&lt;div class=&quot;kuva3&quot;&gt;&lt;/div&gt;
	&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;uutiset&quot;&gt;
	&lt;h2&gt;Uutiset&lt;/h2&gt;

	&lt;p&gt;Päivän tärkeimmät tapahtumat.&lt;/p&gt;

	&lt;ul id=&quot;kuvalinkit&quot;&gt;
		&lt;li&gt;&lt;a href=&quot;#&quot; class=&quot;kuva1&quot;&gt;Kuva 1&lt;/a&gt;&lt;/li&gt;
		&lt;li&gt;&lt;a href=&quot;#&quot; class=&quot;kuva2&quot;&gt;Kuva 2&lt;/a&gt;&lt;/li&gt;
		&lt;li&gt;&lt;a href=&quot;#&quot; class=&quot;kuva3&quot;&gt;Kuva 3&lt;/a&gt;&lt;/li&gt;
	&lt;/ul&gt;

	&lt;div id=&quot;galleria&quot;&gt;
		&lt;div class=&quot;kuva1&quot;&gt;&lt;/div&gt;
		&lt;div class=&quot;kuva2&quot;&gt;&lt;/div&gt;
		&lt;div class=&quot;kuva3&quot;&gt;&lt;/div&gt;
	&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;yhteystiedot&quot;&gt;
	&lt;h2&gt;Yhteystiedot&lt;/h2&gt;

	&lt;p&gt;Osoite, puhelinnumero yms...&lt;/p&gt;

	&lt;ul id=&quot;kuvalinkit&quot;&gt;
		&lt;li&gt;&lt;a href=&quot;#&quot; class=&quot;kuva1&quot;&gt;Kuva 1&lt;/a&gt;&lt;/li&gt;
		&lt;li&gt;&lt;a href=&quot;#&quot; class=&quot;kuva2&quot;&gt;Kuva 2&lt;/a&gt;&lt;/li&gt;
		&lt;li&gt;&lt;a href=&quot;#&quot; class=&quot;kuva3&quot;&gt;Kuva 3&lt;/a&gt;&lt;/li&gt;
	&lt;/ul&gt;

	&lt;div id=&quot;galleria&quot;&gt;
		&lt;div class=&quot;kuva1&quot;&gt;&lt;/div&gt;
		&lt;div class=&quot;kuva2&quot;&gt;&lt;/div&gt;
		&lt;div class=&quot;kuva3&quot;&gt;&lt;/div&gt;
	&lt;/div&gt;
&lt;/div&gt;
</pre>
<p>Galleriat sisältävät kolme ”kuvaa” jotka tulevat päivittymään <strong>#sisalto</strong>-divin  sisällä dynaamisesti käyttäjän klikkaillessa kuvalinkkejä. Tässä  esimerkissä simuloimme kuvia tyhjillä diveillä. Kuvat on oletuksena  piilotettu näkyvistä <strong>display: none;</strong> -määreellä.</p>
<p>Kirjoitetaan navigoinnista vastaava jQuery uusiksi:</p>
<pre class="brush: xml;">
google.load(&quot;jquery&quot;, &quot;1.4.2&quot;);
google.setOnLoadCallback(function() {

	// Ladataan etusivun sisällöt näkyviin
	$('#sisalto').load('ajax.html #etusivu');

	// Vaihdetaan näkymää klikatun linkin mukaan
	$('#navigointi a').click( function() {

		$('#sisalto').load('ajax.html #' + $(this).attr('id'));

		return false;

	});

});
</pre>
<p>Ensimmäinen jQuery-loitsu on  varmaankin aika selvä. Toisessa  pätkässä lataamme klikatun linkin id:tä vastaavan div:in <strong>ajax.html</strong>:stä.</p>
<p>Seuraavaksi voimmekin jatkaa edellisen perään galleriamme  toiminnallisuus. Logiikka on pitkälti sama, kuin aiemminkin:</p>
<pre class="brush: xml;">
google.load(&quot;jquery&quot;, &quot;1.4.2&quot;);
google.setOnLoadCallback(function() {

	// Ladataan etusivun sisällöt näkyviin
	$('#sisalto').load('ajax.html #etusivu');

	// Vaihdetaan näkymää klikatun linkin mukaan
	$('#navigointi a').click( function() {
		$('#sisalto').load('ajax.html #' + $(this).attr('id'));
		return false;
	});

	// Avaa klikattu kuva ja piilota edellinen
	$('#kuvalinkit a').click( function() {

		$('#galleria .' + $(this).attr('class')).show('slow')
		.siblings()
		.hide('slow');

		return false;

	});
});
</pre>
<p>Kaiken järjen mukaan edellisen koodin pitäisi toimia aivan kuten  navigoinninkin, mutta klikatessa kuvalinkkejä kuvat eivät kuitenkaan  aukea. Mitä oikein tapahtui?</p>
<h2>Ken vanhoja muistaa, sitä tikulla silmään</h2>
<p>Kun selain on saanut ladattua sivun rakenteen, <a href="http://en.wikipedia.org/wiki/Document_Object_Model">DOM</a>:in,  jQuery käy sen läpi ja lisää mm. klikkausten tapahtumakäsittelijät  (click event handlers) vaadituille elementeille, meidän tapauksessamme  kuvalinkeille. Kun lataamme Ajax-kutsulla <strong>#sisalto</strong>-diviin  jonkin sisältönäkymistä, muokkaamme tätä rakennetta jälkeenpäin. jQuery  ja JavaScript ovat tällä hetkellä hieman ulalla, sillä kukaan ei ole  kertonut heille, että sivuilla on jotain tapahtunut. Meidän täytyy siis  kertoa JavaScriptille jotenkin, että sivu on päivittynyt ja sen täytyy  ottaa huomioon myös uusi sisältö.</p>
<h2>Kun ei homma itseltä onnistu, delegoidaan</h2>
<p>jQueryn tuorein päivitys, 1.4.2, toi mukanaan uuden <a href="http://api.jquery.com/delegate/">.delegate()</a>-metodin, jolla  saamme ongelmamme ratkaistua. Delegate-metodin toimintaperiaate ei  välttämättä aukea aivan heti kaikille joten otetaanpa alkuun pieni annos  JavaScriptin teoriaa:</p>
<p>Tapahtumien kupliminen, tai event bubbling, on olennainen osa koko  JavaScriptin filosofiaa. Kun käyttäjä klikkaa elementtiä sivuilla, alkaa  taustalla erikoinen tapahtumaketju. Katsotaan vaikka esimerkiksi  demosivumme linkkilistaa: Klikatessa linkkiä listassa, laukeaa  klikkaustapahtuma tässä kyseisessä HTML-elementissä. Tämän jälkeen  linkkielementti ”mainostaa” tätä tapahtumaa isäntänään olevalle  LI-elementille. LI-elementti taas heittää tämän viestin ylöspäin  UL-elementille ja näin jatketaan ylöspäin aina dokumenttipuun alkuun  asti, ellei kuplimista jostain syystä erityisesti haluta katkaista.</p>
<p>Delegate-metodin temppuna on hakea jokin ylempi elementti sivuilta  ja sitoa kuplimisen kautta jonkin alempana dokumenttipuussa olevan  elementin tapahtuma, tässä tapauksessa klikkaus, siihen. Jotta saisimme  delegate-metodin käyttöömme, pitää meidän valita sivuilta jokin kaikille  linkeille yhteinen elementti, jota ei päivitetä Ajax-kutsuja tehdessä. <strong>Body</strong> on useasti aika varma valinta. Käytämme <strong>body</strong>:a  hyväksemme kierrättämällä klikkaustapahtumat sen kautta ja delegoimme  tapahtumat alaspäin uusille, Ajax:lla tuoduille elementeille.</p>
<p>Muutetaan alkuperäisiä kuvanvaihtolinkkiemme tapahtumakäsittelijöitä  hiukan niin, että otamme delegate-metodin mukaan leikkeihin:</p>
<pre class="brush: xml;">
// Avaa klikattu kuva ja piilota edellinen
$('body').delegate('#kuvalinkit a', 'click', function() {
	$('#galleria .' + $(this).attr('class')).show('slow')
	.siblings()
	.hide('slow');
	return false;
});
</pre>
<p>Nyt kuvalinkit pelaavat kaikissa alinäkymissä kauniisti. Olisimme  voineet sitoa delegoinnin myös lähemmäksi kuvalinkkejä demosivullamme,  esimerkiksi <strong>#sisalto</strong>-diviin, mutta suorituskyvyllisesti  tällä ei näin pienessä demossa ole merkitystä.</p>
<p>Mitä suuremmaksi Ajax-projektit kasvavat, sitä arvokkaammaksi  suorituskyvyn parantajaksi delegate nousee. Vanhemmissa  jQuery-versioissa käytetty <a href="http://api.jquery.com/live/">live()</a>-metodin  perusidea on pitkälle sama, kuin delegatella, mutta se sitoo  tapahtumakäsittelijät aina dokumentin alkuun. Delegatella voimme sitoa  klikkausten seurannan mahdollisimman lähelle klikkauksen alkujuuria ja  näin vähentää selaimen taakkaa JavaScriptin käsittelyssä.</p>
<p>jQueryn ja JavaScriptin optimoinnista syvemmin kiinnostuneiden  kannattaa katsoa <a href="http://paulirish.com/">Paul Irish</a>:in  esitelmä aiheesta: <a href="http://vimeo.com/10295601">jQuery  Anti-Pattern for Performance</a>.</p>
<p>Valmiin demon voit katsastaa <a href="http://gfx.fi/wordpress/matsku/artikkeli-2223/index.html">täältä</a>.</p>
<p><a href="http://gfx.fi/wordpress/matsku/artikkeli-2223/jqueryn_kaytto_dynaamisesti_ladatun_sisallon_kanssa.zip">Lataa  tiedostot</a></p>
]]></content:encoded>
			<wfw:commentRss>http://gfx.fi/2010/07/jqueryn-kaytto-dynaamisesti-ladatun-sisallon-kanssa/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Ajax:in alkeet jQueryn avulla</title>
		<link>http://gfx.fi/2010/06/ajaxin-alkeet-jqueryn-avulla/</link>
		<comments>http://gfx.fi/2010/06/ajaxin-alkeet-jqueryn-avulla/#comments</comments>
		<pubDate>Tue, 15 Jun 2010 09:36:08 +0000</pubDate>
		<dc:creator>hoo</dc:creator>
				<category><![CDATA[Site building]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://gfx.fi/?p=2196</guid>
		<description><![CDATA[Ajax-termiltä ei ole voinut välttyä varmasti yksikään, joka edes millään muotoa on harrastanut web-sivujen tekoa. Tässä oppaassa tutustumme Ajaxin alkeisiin, teemme yksinkertaisen demosivun ja päivitämme sen sisältöä dynaamisesti JavaScriptin avulla.]]></description>
			<content:encoded><![CDATA[<p><strong>Ajax-termiltä ei ole voinut välttyä varmasti yksikään, joka edes millään muotoa on harrastanut web-sivujen tekoa. Tässä oppaassa tutustumme Ajaxin alkeisiin, teemme yksinkertaisen demosivun ja päivitämme sen sisältöä dynaamisesti JavaScriptin avulla.</strong></p>
<p><a href="http://gfx.fi/wordpress/matsku/artikkeli-2196/index.html">Katso demo</a><a href="http://gfx.fi/wordpress/wp-content/uploads/2010/06/ajaxin_alkeet_jqueryn_avulla.zip"><br />
Lataa tiedostot</a></p>
<p>Monille ensimmäinen kosketus dynaamisten sivujen rakentamiseen on PHP:n <a href="http://php.net/manual/en/function.include.php">include</a>-ominaisuus jolla HTML-sivu voidaan koostaa useammasta pienemmästä kappaleesta. Näin esimerkiksi sivun navigointia ei tarvitse ei tarvitse toistaa HTML-koodissa uudestaan joka sivulla, vaan se voidaan hakea yhdestä tiedostosta joka kerta.</p>
<p>Tänä päivänä sivulle voi helposti  tuoda sisältöä myös sivun latauksen jälkeen. Tähän käytetään <a href="http://fi.wikipedia.org/wiki/Ajax_(ohjelmointi)" target="_blank"> AJAX-tekniikkaa</a>, joka mahdollistaa sivun sisällön päivittämisen ilman,  että koko sivu ladataan uudelleen.</p>
<p>Käytän esimerkeissä <a href="http://jquery.com/">jQuery</a> JavaScript-kirjastoa, joka harmonisoi mukavasti selainten erilaisen käyttäytymisen JavaScriptin kanssa, sekä helpottaa ja nopeuttaa kaiken kaikkiaan koodin kirjoittamista.</p>
<p>Tehdään alkuun yksinkertainen mallisivu, jolla on vain pieni navigointi ja yksi div-elementti, johon dynaaminen sisältö ladataan. Ei mitään liian jännää:</p>
<pre class="brush: xml;">
&lt;h1&gt;Otsikko&lt;/h1&gt;

&lt;ul&gt;
 &lt;li&gt;&lt;a id=&quot;etusivu&quot; href=&quot;index.html&quot;&gt;Etusivu&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a id=&quot;uutiset&quot; href=&quot;uutiset.html&quot;&gt;Uutiset&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a id=&quot;yhteystiedot&quot; href=&quot;yhteystiedot.html&quot;&gt;Yhteystiedot&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div id=&quot;sisalto&quot;&gt;
 &lt;h2&gt;Etusivun jutut&lt;/h2&gt;
 &lt;p&gt;Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua...&lt;/p&gt;
&lt;/div&gt;
</pre>
<p>Seuraavaksi voimme tehdä navigointia vastaavat sisältöosiot omiin tiedostoihinsa:</p>
<h3>uutiset.html</h3>
<pre class="brush: xml;">
&lt;h2&gt;Uutiset&lt;/h2&gt;

&lt;p&gt;Päivän tärkeimmät tapahtumat.&lt;/p&gt;
</pre>
<h3>yhteystiedot.html</h3>
<pre class="brush: xml;">
&lt;h2&gt;Yhteystiedot&lt;/h2&gt;

&lt;p&gt;Osoite, puhelinnumero yms...&lt;/p&gt;
</pre>
<p>Lisää vielä seuraava rimpsu sivusi <strong>head</strong>-osioon:</p>
<pre class="brush: xml;">
&lt;script src=&quot;http://www.google.com/jsapi&quot;&gt;&lt;/script&gt;
</pre>
<p>Edellinen koodinpätkä mahdollistaa jQueryn käytön suoraan Googlen palvelimelta, joten sinun ei tarvitse asentaa kirjastoa välttämättä itsellesi.</p>
<p>Nyt meillä on kaikki tarvittava sisältö ja voimme alkaa rakentamaan JavaScriptiä, joka hoitaa sisällön hakemisen <strong>#sisalto</strong>-diviin kun käyttäjä klikkaa navigoinnin linkkiä. Käytämme jQueryn <a href="http://api.jquery.com/load/">.load()</a>-metodia, jonka syntaksi on hyvin yksinkertainen:</p>
<pre class="brush: xml;">
// Ladataan jQuery Googlen palvelimelta ja ajetaan JS vasta kun
// koko dokumentti on latautunut.
google.load(&quot;jquery&quot;, &quot;1.4.2&quot;);
google.setOnLoadCallback(function() {

	// Kun Uutiset-linkkiä klikataan:
	$('#uutiset').click( function() {

		// Lataa uutiset.html-tiedoston sisältö 'sisalto'-divin sisään.
		// Samalla vanha sisältö pyyhkiytyy pois.
		$('#sisalto').load('uutiset.html');

		// Lopuksi estämme selainta turhaan seuraamasta linkkiä
		// klikattuun osoitteeseen.
		return false;

	});

	// Toistetaan sama temppu yhteystiedoille
	$('#yhteystiedot').click( function() {
		$('#sisalto').load('yhteystiedot.html');
		return false;
	});

});
</pre>
<p>Tällä hetkellä emme ole vielä tehneet mitään etusivulle vievälle linkille ja tässä yksinkertaisessa esimerkissä kaikki toimii jo nyt ok, mutta voimme ladata myös etusivun sisältöosuuden uudestaan etusivulle.</p>
<pre class="brush: xml;">
	// Ladataan etusivun sisällöt takaisin näkyviin ilman
	// koko sivun uudelleen päivittämistä
	$('#etusivu').click( function() {
		$('#sisalto').load('index.html #wrapper');
		return false;
	});
</pre>
<p>Syntaksi on hiukan muuttunut tällä kertaa. Koska etusivun jutuille ei ole olemassa omaa erillistä HTML-tiedostoaan, vihreiden arvojen kunniaksi kierrätämme index.html-tiedoston uusiokäyttöön, mutta otamme siitä vain tarvitun osan, eli sisällön:</p>
<pre class="brush: xml;">
$('#sisalto').load('index.html #wrapper');
</pre>
<p>Jos yrittäisimme käyttää edellisten esimerkkien koodia ja lataisimme vain suoraan #sisalto-divin vanhan #sisalto-divin sisään tapahtuisi aika epätoivottu reaktio:</p>
<pre class="brush: xml;">
&lt;div id=&quot;sisalto&quot;&gt;
 &lt;div id=&quot;sisalto&quot;&gt;
 &lt;h2&gt;Etusivun jutut&lt;/h2&gt;
 &lt;p&gt;Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua...&lt;/p&gt;
 &lt;/div&gt;

&lt;/div&gt;
</pre>
<p>Koska <a href="http://mashable.com/wp-content/uploads/2009/03/yo-dawg-yo-yos.jpg">Yo Dawg</a>-efekti ei ole tavoitteissamme, lisäämme alkuperäiseen index.html-tiedostoon ylimääräisen wrapperin heti #sisalto-divin jälkeen. Ylimääräisen HTML:n lisääminen ei ole kovin elegantti ratkaisu, mutta jokainen voi kotitehtävänä miettiä, miten edellä esitetty ongelma kierretään tyylikkäämmin.</p>
<p>Valmiin demon voit katsastaa <a href="http://gfx.fi/wordpress/matsku/artikkeli-2196/index.html">täältä</a>.</p>
<p><a href="http://gfx.fi/wordpress/wp-content/uploads/2010/06/ajaxin_alkeet_jqueryn_avulla.zip">Lataa tiedostot</a></p>
]]></content:encoded>
			<wfw:commentRss>http://gfx.fi/2010/06/ajaxin-alkeet-jqueryn-avulla/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Savalanche &#8211; sosiaalisen median verkkokauppa</title>
		<link>http://gfx.fi/2010/05/savalanche-sosiaalisen-median-verkkokauppa/</link>
		<comments>http://gfx.fi/2010/05/savalanche-sosiaalisen-median-verkkokauppa/#comments</comments>
		<pubDate>Sun, 23 May 2010 18:30:22 +0000</pubDate>
		<dc:creator>hoo</dc:creator>
				<category><![CDATA[Digiala]]></category>
		<category><![CDATA[verkkokauppa]]></category>

		<guid isPermaLink="false">http://gfx.fi/?p=2128</guid>
		<description><![CDATA[Saimme ainutlaatuisen tilaisuuden tutustua tulevaan suomalaiseen web-innovaatioon ja henkilöihin sen taustalla. Savalanche on uudenlainen verkkokauppakonsepti, joka menee sinne missä ihmiset ovat. Lue miten Savalanche saattaa mullistaa tulevaisuuden verkkokauppamaailman.]]></description>
			<content:encoded><![CDATA[<p><strong>Saimme ainutlaatuisen tilaisuuden tutustua tulevaan suomalaiseen web-innovaatioon ja henkilöihin sen taustalla. Savalanche on uudenlainen verkkokauppakonsepti, joka menee sinne missä ihmiset ovat. Lue miten Savalanche saattaa mullistaa tulevaisuuden verkkokauppamaailman.</strong></p>
<h2>Mikä Savalanche?</h2>
<p>Savalanche on uudenlainen verkkokauppapalvelu, joka rakentuu  Internetin sosiaalisen median palveluiden päälle &#8211; <em>tai oikeastaan niiden  sisälle</em>. Savalanchessa kuka tahansa voi perustaa kaupan, jopa ilman  omia tuotteita. Kaupassa voi nimittäin myydä muiden tahojen maahantuomia tai valmistamia  tuotteita, näin esimerkiksi suositun blogin tai keskustelupalstan  ylläpitäjä voi helposti ansaita lisätuloja.</p>
<p>Savalanche on periaatteessa tavanomainen täyden palvelun  verkkokauppapalvelu, jolla yritys voi viedä tuotteensa myyntiin  web-sivuilleen ja esim. Facebookin kaltaisiin sosiaalisiin medioihin. Juju piileekin siinä, että Savalanchea  hyödyntäen kuka tahansa voi rakentaa laajan, monikanavaisen verkkokauppaverkoston. Lisäksi palvelulla voidaan myös kerätä varoja esim. hyväntekeväisyyteen tai  urheiluseuroille.</p>
<h2>Kolme muskettisoturia</h2>
<p>Savalanche palvelun takana ovat kolme suomalaista IT-alan konkaria, jotka aikaisemmassa elämässään ovat olleet  suunnittelemassa, rakentamassa ja myymässä suuria tietojärjestelmiä ja ohjelmistoja matkapuhelinteollisuuden tarpeisiin. He muodostavat yhdessä <a href="http://vuole.fi/" target="_blank">Vuole Digitalin</a>.</p>
<p>Apuja kehitystyöhön on löytynyt omien alojensa asiantuntijayrityksistä. Palveluun uskovat muutkin, sillä tuotekehitystä ovat olleet tukemassa mm. <a href="http://www.tekes.fi" target="_blank">Tekes</a> ja <a href="http://www.finnvera.fi" target="_blank">Finnvera</a>.</p>
<h2>Kuinka palvelu erottuu tavanomaisista verkkokaupoista?</h2>
<p>Savalanchessa verkkokaupan voi perustaa ilman ainuttakaan omaa  tuotetta. Kuulostaa ehkä kummalliselta, mutta tämä on juuri se todellinen oivallus, sillä myymällä tuotteita muiden valikoimista voi ansaita provisiota  ilman omaa varastoa tai muuta päänvaivaa. Sen lisäksi käyttäjät voivat myydä myös omia tuotteitaan kuten normaalissa verkkokaupassa. Laajuudeltaan tuotevalikoima voi olla muutamasta kappaleesta satoihin.</p>
<p>Kuulostaisiko ura verkkokauppiaana hyvälle? Kohta se on helppoa kuin heinänteko. Savalanche on rakennettu toimimaan yhdessä  Facebookin kaltaisten sosiaalisen median palveluiden kanssa. Kuka tahansa voi perustaa verkkokaupan  Facebook-sivuilleen muutamassa minuutissa.</p>
<p>Savalanchen avulla käyttäjät voivat halutessaan kerätä rahaa myös  hyväntekeväisyyteen tai yhdistyksille, urheiluseuroille, koululuokille  jne. Tärkeän työn tukeminen on entistä helpompaa.</p>
<p>Savalanche on muutamasta markkinoilla olevasta <strong> social shopping -palveluista</strong> poiketen voimakkaammin <strong>social selling  -palvelu</strong>, jossa ihmiset luovat ystäväpiiriään ja samanhenkisiä ihmisiä kiinnostavia kauppoja ja valikoimia <strong>crowdsourcing  -hengessä</strong>.</p>
<h2>Savalanche käytännössä</h2>
<p>Verkkokaupan perustaminen omille sivuilleen, Facebookiin tai blogiin  tapahtuu <a href="http://www.savalanche.com" target="_blank">Savalanche.com</a>:ssa, tai suoraan Savalanchen  Facebook-sovelluksessa. Kaupan perustaminen on täysin  ilmaista ja vaikeustaso on samaa tasoa web-sähköpostipalveluun  rekisteröitymisen kanssa. Tämän jälkeen käyttäjälle alkaa kertyä myyntituottoja  sitä mukaa, kun hänen kaupastaan ostetaan tuotteita.</p>
<p>Savalanchen kautta esim. maahantuojat voivat listata  tuotevalikoimansa tai varastonsa sisällön palveluun, jolloin kuka  tahansa kiinnostunut voi myydä heidän tuotteitaan perustamassaan  verkkokaupassa. Senkin pitäisi olla lupauksen mukaan nopeaa, helppoa ja ilmaista.</p>
<h2>Kenelle Savalanche on suunnattu?</h2>
<p>Savalanchen pitäisi soveltua periaatteessa kaikille. Palvelusta hyötyvät niin maahantuojat ja tuotteiden valmistajat kuin  kuka tahansa Internetin aktiivi. Olennaisinta on tietysti se miten paljon lukijoita tai  kavereita on palvelussa, sillä tuottomahdollisuudet kasvavat sen mukaan.</p>
<p>Helpotusta pitäisi tulla myös nuoremmalle väelle ja varsinkin heidän vanhemmilleen. Urheiluseurat, koululuokat, yhdistykset ynnä muut voivat hankkia lisävaroja tai  korvata perinteisen (ja usein kovin turhauttavan) ovelta ovelle -myynnin keskittämällä varainkeruun  Savalanchen avulla webbiin.</p>
<p>Savalanchesta on iloa myös tiskin toiselle puolelle. Selailemalla kiinnostavaa blogia tai  ystävien kauppoja valikoimat vastaavat myös todennäköisesti omia tarpeita ja kiinnostuksen kohteita. Esimerkiksi  maastopyöräilyaiheisen keskustelupalstan ylläpitäjällä on  todennäköisesti erittäin hyvät valmiudet valita verkkokauppaansa  sellaisia tuotteita, jotka kiinnostavat myös hänen lukijoitaan.</p>
<h2>Kohti tulevaisuutta</h2>
<p>Kuuleman mukaan Savalanche käynnistyy suljettuna pilottina kesän 2010 aikana. Palveluun tehdään silloin viimeiset säädöt ja varmistetaan, että  luvattu helppokäyttöisyys ja selkeys toteutuvat myös käytännössä. Savalanchen pitäisi aueta kaikille suomalaisille syksyllä 2010. Gfx.fi toivottaa onnea uudelle lupaavalle palvelulle ja sen kehitystiimille. Jäämme odottamaan jännityksellä tulevaa syksyä.</p>
<p>P.S. Palvelun kehittäjät tarvitsevat kesän 2010 pilottiin vielä muutaman beta-testaajan. Heräsikö kiinnostus? Lisätietoja saat  sähköpostilla osoitteesta info@savalanche.com.</p>
]]></content:encoded>
			<wfw:commentRss>http://gfx.fi/2010/05/savalanche-sosiaalisen-median-verkkokauppa/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Opiskelemaan digialalle!</title>
		<link>http://gfx.fi/2010/05/opiskelemaan-digialalle/</link>
		<comments>http://gfx.fi/2010/05/opiskelemaan-digialalle/#comments</comments>
		<pubDate>Sun, 02 May 2010 15:19:50 +0000</pubDate>
		<dc:creator>hoo</dc:creator>
				<category><![CDATA[Digiala]]></category>
		<category><![CDATA[opiskelu]]></category>

		<guid isPermaLink="false">http://gfx.fi/?p=1990</guid>
		<description><![CDATA[Hyvä koulutus kehittää ammattitaitoa ja osaamista. Takataskussa komeileva tutkinto parantaa myös mahdollisuuksia työmarkkinoilla. Gfx päättikin selvittää missä kaikkialla Suomessa järjestetään digialaan liittyvää koulutusta. Lista ei valitettavasti ole kaiken kattava, vaikka saimmekin koottua sisältöä ihan mukavasti.]]></description>
			<content:encoded><![CDATA[<p><strong>Hyvä koulutus kehittää ammattitaitoa ja osaamista. Takataskussa komeileva tutkinto parantaa myös mahdollisuuksia työmarkkinoilla. Gfx päättikin selvittää missä kaikkialla Suomessa järjestetään digialaan liittyvää koulutusta. Lista ei valitettavasti ole kaiken kattava, vaikka saimmekin koottua sisältöä ihan mukavasti.<br />
</strong></p>
<p>Listalle on valittu 3. asteen opintopaikkoja ympäri Suomen &#8211; sisältäen ammattikorkeakouluja ja yliopistoja. Listalta löytyy mm. ohjelmointiin, graafiseen suunnitteluun ja viestintään liittyviä koulutusohjelmia. Lista on aakkosjärjestyksessä. Koulut ovat itse toimittaneet esittelymateriaalin koulutusohjelmistaan.</p>
<h2>Jyväskylän ammattikorkeakoulu</h2>
<p>Jyväskylän ammattikorkeakoulun Teknologiayksikössä olevalla ICT-tulosalueella on<br />
kolme koulutusohjelmaa, joissa koulutetaan tietoverkkoihin liittyvää osaamista:</p>
<ul>
<li>Mediatekniikan koulutusohjelma, jossa opiskellaan mm. verkkomultimediaa</li>
<li>Ohjelmistotekniikan koulutusohjelma, jossa aiheina ovat mm. web- ja mobiiliohjelmointi</li>
<li>Tietotekniikan koulutusohjelma, jossa keskitytään tietoverkkojen suunnittelun ja ylläpidon koulutukseen.</li>
</ul>
<p><a href="http://www.jamk.fi/koulutus/tutkinnot/nuoret/tekniikanjaliikenteenala" target="_blank">Lisätietoja koulutusohjelmista</a></p>
<h2>Kymenlaakson ammattikorkeakoulu</h2>
<p>Alla tietoa Kymenlaakson ammattikorkeakoulun digialan koulutuksesta sekä sitä läheltä liippaavista suuntautumisvaihtoehdoista.</p>
<h3>Viestintä</h3>
<p>Kymenlaakson ammattikorkeakoulu tarjoaa viestinnän koulutusohjelmassa av-median, digitaalisen median sekä graafisen suunnittelun koulutusta.</p>
<ul>
<li>Av-median suuntautuminen tuottaa osaajia audiovisuaalisen alan toteutus- ja suunnittelutehtäviin.</li>
<li>Monipuolinen verkko-osaajien suuntautumisvaihtoehto on Digitaalinen media, jossa suunnitellaan ja toteutetaansisältöjä 3D-, peli-, web-, ja mobiiliympäristöihin. Digitaalisen median sv:ssa opiskellaan muun muassa käyttöliittymäsuunnittelua, e-markkinointia, hakukoneoptimointia, sisällöntuotantoa, web-ohjelmointia sekä mobiili- ohjelmointia. Samoin tarjolla on pelituotantoon liittyvä opinto-osio. Sen painopiste on pelien suunnittelussa, konseptoinnissa, käsikirjoittamisessa sekä visuaalisten sisältöjen tuotannossa.</li>
<li>Graafinen suunnittelija hallitsee kuvallisen viestinnän eri medioissa.</li>
</ul>
<p><a href="http://www.kyamk.fi/Koulutus/AMK-tutkinnot/AMK%2C%20nuoret/Kulttuuriala/Viestint%C3%A4" target="_blank">Lisätietoja koulutusohjelmasta</a></p>
<h3>Tietotekniikka</h3>
<p>KyAMK:n tietotekniikan koulutusohjelman ohjelmistotekniikan suuntautumisvaihtoehdon opiskelijat sijoittuvat valmistumisensa jälkeen ohjelmistojen ja web-palvelujen kehitystehtäviin. Koulutus keskittyy ohjelmointiin ja tapahtuu osittain Ohjelmistoakatemiassa oikeissa ohjelmistoprojekteissa. Eritysalana KyAMK:ssa on valinnainen peliohjelmoinnin koulutus (18 op), jonka toteutukseen osallistuu peliteollisuus.</p>
<p><a href="http://www.kyamk.fi/Koulutus/AMK-tutkinnot/AMK%2C%20nuoret/Tekniikan%20ja%20liikenteen%20ala/Tietotekniikka" target="_blank">Lisätietoja koulutusohjelmasta</a></p>
<h2>HAAGA-HELIA AMK</h2>
<p>HAAGA-HELIAsta löytyy mm. tietojenkäsittelyn koulutusohjelman opetusta.</p>
<p>Tässä linkki suomenkieliseen <a href="http://www.haaga-helia.fi/fi/koulutus/amk-tutkinto/tietojenkasittelyn-ko-helsinki/index_html" target="_blank">opetussuunnitelmaan</a> ja tässä linkki <a href="http://tiko.haaga-helia.fi/" target="_blank">opiskelijatöiden esittelysivustoon</a>, jota kehitetään parasta aikaa.</p>
<h2>Vaasan ammattikorkeakoulu</h2>
<p>Vaasan ammattikorkeakoulussa (Vamkissa) on tarjolla mm. tietojenkäsittelyn ja tietotekniikan koulutusohjelmat.</p>
<p>Vaasan ammattikorkeakoulussa löytyy alan koulutusta  tietojenkäsittelyn koulutusohjelman muodossa. Koulutusohjelmassa valmistutaan ict-alan tradenomiksi ja digitaaliset palvelut on yksi suuntautumisvaihtoehdoista. Tietojenkäsittelyn koulutusohjelman tiedot löydät <a href="http://www.puv.fi/fi/koulutus/nuortenkoulutus/koulutusohjelmat/tietojenkasittely" target="_blank">täältä</a>.  Vastaava ruotsinkielinen ohjelma on <em>informationsbehandling</em>, josta  löytyvät tiedot <a href="http://www.puv.fi/fi/koulutus/nuortenkoulutus/koulutusohjelmat/informationsbehandling" target="_blank">täältä</a>.</p>
<p>Digitaalisen palvelun sisältö: Digitaaliset palvelut: graafisen tuotannon työkalut, sisällöntuotanto  verkossa, Flash ja animaatiot, multimedian tuotannon työkalut, videokuvaus ja  editointi, 3d-mallinnus ja animaatiot.</p>
<p><a href="http://www.puv.fi/fi/koulutus/nuortenkoulutus/koulutusohjelmat/tietotekniikka" target="_blank">Tietotekniikkaa</a> on tarjolla meillä suomenkielisessä koulutusohjelmassa  ja englanninkielellä <a href="http://www.puv.fi/fi/koulutus/nuortenkoulutus/koulutusohjelmat/informationtechnology" target="_blank">Information Technology -koulutusohjelmassa</a>.</p>
<h2>Hämeen ammattikorkeakoulu</h2>
<p>Alta löydät Hämeen ammattikorkeakoulun tietojenkäsittelyn ja liiketalouden<br />
koulutusohjelmien tiedot ja linkit.</p>
<p><em>Kaikki käyttävät nettiä, me teemme sitä!</em><br />
Opiskele <a href="http://www.hamk.fi/tietojenkasittely" target="_blank">tietojenkäsittelyn tradenomiksi </a>Hämeenlinnassa Hämeen ammattikorkeakoulussa.</p>
<p><em>Asiakastyytyväisyys, innovatiivisuus ja yhteistyökyky!</em><br />
Opiskele <a href="http://www.hamk.fi/liiketalous" target="_blank">liiketalouden tradenomiksi</a> Hämeenlinnassa Hämeen ammattikorkeakoulussa. Kurssisisältönä mm. Digital Enterprise 30 op.</p>
<h2>Tampereen yliopisto</h2>
<p>Tampereen yliopiston informaatiotieteiden tiedekunnassa on mm. seuraavia koulutuksia:</p>
<p><a href="http://www.uta.fi/opiskelijaksi/oppiaineet/inme.html" target="_blank">Interaktiivisen median maisterikoulutus</a></p>
<p><a href="http://www.uta.fi/opiskelijaksi/oppiaineet/tvop.html" target="_blank">Tietojenkäsittelytieteiden koulutusohjelma</a><em>:</em><br />
Koulutusohjelmassa mm. käyttöliittymien ohjelmistokehitykseen tai vuorovaikutteiseen teknologiaan syventävät maisterikoulutukset</p>
<h2>Vaasan yliopisto</h2>
<p><a href="http://www.uwasa.fi/giga" target="_blank">Teknisen viestinnän koulutusohjelma</a>.</p>
<p>Vuonna 1996 perustetun Teknisen viestinnän koulutusohjelman perusajatuksena on se, että viestintätieteiden ja tietotekniikan opiskelijat opiskelevat yhdessä koko koulutusohjelman ajan, vaikka he kuuluvatkin eri tiedekuntiin (filosofiseen ja teknilliseen) ja eri pääaineisiin.</p>
<p>Koulutusohjelman opiskelijoilla on yhteiset perus- ja aineopinnot sekä syventävät opinnot. Muut opinnot, kuten sivuaineet, suoritetaan oman<br />
oppiaineen ja tiedekunnan vaatimusten mukaan. Myös tutkinnot ovat tiedekuntakohtaisia. Koulutusohjelmasta valmistuu humanististen tieteiden kandidaatteja, filosofian maistereita, kauppatieteiden kandidaatteja ja kauppatieteiden maistereita.</p>
<p>Koulutusohjelmasta valmistuneet opiskelijat työskentelevät mm. www-toimittajina, www-ohjelmoijina, teknisinä viestijöinä (projektipäälliköinä erilaisissa dokumentointiprojekteissa, visuaalisina suunnittelijoina, teknisinä kirjoittajina jne.).</p>
<h2>Satakunnan ammattikorkeakoulu</h2>
<p>Satakunnan ammattikorkeakoulussa (SAMK) liiketoiminnan ja kulttuurin alalla on kaksi koulutusohjelmaa, jossa käsitellään verkossa tapahtuvaa suunnittelu- ja tuotantotyötä:</p>
<p><a href="http://www.samk.fi/viestinta" target="_blank">Viestintä</a><br />
<a href="http://www.samk.fi/kuvataide" target="_blank">Kuvataide</a></p>
<p>Koulutusohjelmien kuvaukset löytyvät yllä olevista linkeistä.</p>
<h2>Oulun ammattikorkeakoulu</h2>
<p>Alaan liittyviä koulutusohjelmia:</p>
<p><a href="http://www.oamk.fi/hakijalle/opas/koulutusohjelmat_fi/kultt/index.php?sivu=viestinta" target="_blank">Viestintä</a><br />
<a href="http://www.oamk.fi/hakijalle/opas/koulutusohjelmat_fi/liike/index.php?sivu=tietojenkasittely" target="_blank">Tietojenkäsittely</a></p>
<p>Koulutusohjelmien kuvaukset löytyvät yllä olevista linkeistä.</p>
<h2>Aalto-yliopiston taideteollinen korkeakoulu</h2>
<p><a href="http://www.taik.fi/osastot/visuaalinen_kulttuuri/opiskelu/visuaalisen_kulttuurin_osaston_koulutusohjelmat/graafinen_suunnittelu.html" target="_blank">Graafinen suunnittelu</a>:<br />
Opetusalueet kattavat graafisen viestinnän kaikki mediamuodot ja levityskanavat. Opiskelija saa valmiudet toimia erilaisissa alan työtehtävissä, kuten suunnittelijana, kuvittajana, taittajana, kirjagraafikkona, pakkaussuunnittelijana, mainosgraafikkona, informaatiosuunnittelijana sekä av- ja animaatiosuunnittelijana. Maisterin tutkinto kehittää valmiuksia konseptisuunnitteluun ja art director -tehtäviin sekä luo mahdollisuuksia tutkimuksen tekemiseen ja jatko-opintoihin siirtymiseen.</p>
<p><em>New Media</em> ja <em>Sound Design in New Media</em><br />
(+ suuntautumisvaihtoehtona uusi <em>Game Design and Production</em>):<br />
<a href="http://www.taik.fi/mela/" target="_blank">http://www.taik.fi/mela/</a> ja <a href="http://mlab.taik.fi/" target="_blank">http://mlab.taik.fi/</a></p>
<p>Uuden median opetukseen ja tutkimukseen erikoistuneen Medialaboratorion opetusaloja ovat uusmedian sisältötuotanto, &#8216;tiedon design&#8217;, vuorovaikutteinen kerronta, virtuaaliympäristöt sekä tulevaisuuden mediaratkaisut.</p>
<h2>Oulun Yliopisto</h2>
<p>Oulun yliopistossa selkeiten digimedian kenttään osuvat seuraavat:</p>
<p><a href="http://www.ee.oulu.fi/Opiskelijaksi/Koulutusohjelmat/Tietotekniikka" target="_blank">Tietotekniikka</a><br />
<a href="http://www.tol.oulu.fi/index.php?id=14" target="_blank">Tietojenkäsittelytieteiden koulutusohjelma</a></p>
<h2>Kajaanin ammattikorkeakoulu</h2>
<p>Kajaanin ammattikorkeakoulussa on Suomen ainoa korkeakoulututkintoon tähtäävä koulutus pelikehityksen alalle. Lisätietoa koulutuksesta löytyy osoitteesta: <a href="http://www.kajak3d.com" target="_blank">http://www.kajak3d.com</a></p>
<h2>Laurea-ammattikorkeakoulu</h2>
<p><strong>Digitaalisen median koulutusohjelma</strong></p>
<p>Tietojenkäsittelyn koulutusohjelmasta valmistutaan tradenomiksi. Koulutus antaa valmiudet toimia laaja-alaisesti tietojenkäsittelytehtävissä. Mahdollisia tehtäviä ovat mm. verkkosivujen suunnittelu, ohjelmistokehitystyö, käytettävyystutkimus, visuaalinen suunnittelu, yritysviestinnän teknisten ratkaisujen kehittäminen.</p>
<p>Opintoihin kuuluu pakollisena osana niin tietojenkäsittelyn, liiketalouden kuin viestinnänkin perusopinnot. Verkkosivujen kehittämisen perusosaamista syvennetään ohjelmointiosaamisen sekä käyttäjäkeskeisen käyttöliittymä- ja ohjelmistosuunnittelun alueille. Osaaminen syvenee myös visuaalisen suunnittelun ja erilaisten mediaelementtien käytön osalta.</p>
<h2>Eikä tässä kaikki&#8230;</h2>
<p>Yllä oleva lista on vain pieni osa mahdollisista opiskelupaikoista Suomen rajojen sisäpuolella. Jos huomaat tutun oppilaitoksen tai koulutusohjelman puuttumisen listalta niin lisää sen tiedot kommentin yhteyteen. Miten on &#8211; Häämöttääkö sinulla edessä opiskeleminen vai joko koulut on käyty?</p>
]]></content:encoded>
			<wfw:commentRss>http://gfx.fi/2010/05/opiskelemaan-digialalle/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>CSS3 Transitiot &#8211; olemmeko jo perillä?</title>
		<link>http://gfx.fi/2010/04/css3-transitiot-olemmeko-jo-perilla/</link>
		<comments>http://gfx.fi/2010/04/css3-transitiot-olemmeko-jo-perilla/#comments</comments>
		<pubDate>Mon, 26 Apr 2010 18:29:42 +0000</pubDate>
		<dc:creator>hoo</dc:creator>
				<category><![CDATA[Site building]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[css3]]></category>

		<guid isPermaLink="false">http://gfx.fi/?p=2056</guid>
		<description><![CDATA[Olen jakanut tämän aiheen kahteen artikkeliin. Ensimmäisessä artikkelissa käsittelen CSS3 Transitioita yleisesti. Lisäksi esittelen perustason käyttötapauksia muutamien CSS-arvojen avulla, joita voi hyödyntää CSS3-transitioita ja -transformaatioita luotaessa.]]></description>
			<content:encoded><![CDATA[<p><strong>CSS3 on ollut olemassa jo &#8220;jonkin aikaa&#8221; (<a title="Introduction to CSS3" href="http://www.w3.org/TR/css3-roadmap/">esiteltiin ensi kertaa 9 vuotta sitten</a>). Kaikesta huolimatta, CSS3:sta on ollut mahdollista käyttää yleisesti vain noin kahden vuoden ajan.</strong></p>
<p>CSS3-transitiot esiteltiin käytännössä <a title="CSS Animation" href="http://webkit.org/blog/138/css-animation/">loppuvuodesta 2007</a> Safarin toimesta. Tuohon aikaan, niihin viitattiin termillä &#8220;CSS Animations&#8221;, mutta terminologia muuttui Safarin esitellessä omat selainkohtaiset ominaisuutensa, joita nykyään kutsutaan <a title="CSS Animations" href="http://webkit.org/blog/324/css-animation-2/">CSS-animaatioiksi</a>.</p>
<p>Olen jakanut tämän aiheen kahteen artikkeliin. Ensimmäisessä artikkelissa käsittelen CSS3 Transitioita yleisesti. Lisäksi esittelen perustason käyttötapauksia muutamien CSS-arvojen avulla, joita voi hyödyntää CSS3-transitioita ja -transformaatioita luotaessa.</p>
<p>Tämä artikkeli sisältää myös viittauksia erinomaisiin CSS3-artikkeleihin. Joten artikkelin luettuasi, voit niiden avulla päivittää ja parantaa tietouttasi CSS3-transitioista.</p>
<p>Kuten jo totesin, aihe on jaettu kahdeksi artikkeliksi. Ensimmäisen osan nimi on &#8220;CSS3 Transitiot &#8211; olemmeko jo perillä?&#8221;, tarjoten yleisen katselmuksen CSS3-transitioiden tämänhetkiseen tilaan. Toisen osan nimi on &#8220;CSS3 Transitions &#8211; ongelmatilanteet ja ratkaisut&#8221;, joka pureutuu syvemmälle transitioihin ja niiden eroihin eri selainten välillä.</p>
<p>Ensimmäinen artikkeli rakentuu seuraavista osista:</p>
<ul>
<li><a href="#gettingStarted">Kuinka päästä alkuun</a> &#8211; mitä sinulta täytyy löytyä</li>
<li><a href="#theBasicsOfTheBasics">Perusteiden perusteet</a> &#8211; mitä sinun on hyvä tietää transitioista</li>
<li><a href="#theBasics">Perusteet</a> &#8211; mitä sinun täytyy tietää transitioista (demo-osio)</li>
<li><a href="#conclusions">Johtopäätökset</a> &#8211; eli olemmeko jo perillä vai emme?</li>
<li><a href="#resources">Ulkoiset viittaukset</a> &#8211; missä sinun kannattaa vierailla artikkelin luettuasi</li>
</ul>
<h2 id="gettingStarted">Kuinka päästä alkuun</h2>
<p>Alkuun päästäksesi tarvitset ainakin yhden selaimen, joka tukee CSS3-transitioita:</p>
<ul>
<li><a title="Apple Safari Download" href="http://www.apple.com/safari/download/">Apple Safari</a> (tuettuna Safari 3.1:sta ja iPhone OS 2.0:sta lähtien)</li>
<li><a title="Google Chrome Download" href="http://www.google.com/chrome/">Google Chrome</a></li>
<li><a title="Mozilla Firefox 3.7 a" href="http://ftp.mozilla.org/pub/mozilla.org/firefox/nightly/latest-trunk/">Mozilla Firefox 3.7 alpha</a> (tunnetaan myös Minefield:ina)</li>
<li><a href="http://www.opera.com/browser/ title=">Opera 10.5x</a> (tuettuna myös Opera Mobile 10 beta 2)</li>
</ul>
<h3>Entä Internet Explorer?</h3>
<p>Tällä hetkellä on ilmoitettu, että edes Internet Explorer 9 ei tule tukemaan CSS3-transitioita. Paras tuki Internet Explorerin transitioille ja transformaatioille voidaan luoda hyödyntämällä <a href="http://msdn.microsoft.com/en-us/library/ms533014(v=VS.85).aspx">Matrix Filteria</a>.</p>
<p>Lisäksi suosittelen lukemaan artikkelin <a title="Cross-Browser Animated CSS Transforms — Even in IE" href="http://www.useragentman.com/blog/2010/04/05/cross-browser-animated-css-transforms-even-in-ie/">Cross-Browser Animated CSS Transforms — Even in IE</a>, jonka on kirjoittanut <em>Zoltan “Du Lac” Hawryluk</em>. Hän on myös <a title="cssSandpaper – a CSS3 JavaScript Library" rel="external" href="http://www.useragentman.com/blog/csssandpaper-a-css3-javascript-library/">cssSandpaperin</a> luoja.</p>
<h2 id="theBasicsOfTheBasics">Perusteiden perusteet</h2>
<p>Ikävä kyllä CSS3-transitioiden luomiseksi ei ole olemassa vain yhtä sääntöä. Itse asiassa, jokaisella selaimella on oma selainkohtainen tapansa kirjoittaa sääntöjä. Onneksi syötettävien arvojen syntaksi on eri selainten välillä keskenään samanlainen.</p>
<h3>Mihin ominaisuuksiin transitiot vaikuttavat?</h3>
<p>Valtaosa ominaisuuksista tukevat transitioita enkä lähde listaamaan niitä ykistellen. Selainten välillä on kuitenkin joitain eroja ja selkein niistä on tällä hetkellä se, että Firefox 3.7a ei tue ollenkaan transformaatioiden transitiointia.</p>
<h3>Arvot transitioiden luomiseksi</h3>
<p>Transitiot voidaan määritellä maksimissaan neljän eri arvon avulla:</p>
<p><strong>Lyhyt muoto:</strong></p>
<pre class="brush: xml;">
-webkit-transition: property_name duration timing_function delay;
-moz-transition: property_name duration timing_function delay;
-o-transition: property_name duration timing_function delay;
transition: property_name duration timing_function delay;
</pre>
<p>Voit myös määritellä jokaisen arvon yksityiskohtaisesti:</p>
<p><strong>(Kohde)ominaisuus:</strong></p>
<pre class="brush: xml;">
-webkit-transition-property: property_name;
-moz-transition-property: property_name;
-o-transition-property: property_name;
transition-property: property_name;
</pre>
<p><strong>Kesto:</strong></p>
<pre class="brush: xml;">
-webkit-transition-duration: duration;
-moz-transition-duration: duration;
-o-transition-duration: duration;
transition-duration: duration;
</pre>
<p>Kesto (kuten viivekin) voidaan syöttää joko sekunteina (esim. <em>0.5s</em>) tai millisekunteina (esim. <em>500ms</em>). On kuitenkin tärkeää huomata, että ilman määrettä transitio ei toimi laisinkaan.</p>
<p><strong>(Liikkeen) ajoitus-funktio:</strong></p>
<pre class="brush: xml;">
-webkit-transition-timing-function: timing_function;
-moz-transition-timing-function: timing_function;
-o-transition-timing-function: timing_function;
transition-timing-function: timing_function;
</pre>
<p>Käytössä olevat ajoitus-funktiot:</p>
<ul>
<li><a title="Cubic Bezier Timing Function" rel="external" href="http://www.netzgesta.de/dev/cubic-bezier-timing-function.html">cubic-bezier(cp1<sub>x</sub>, cp1<sub>y</sub>, cp2<sub>x</sub>, cp2<sub>y</sub>)</a></li>
<li><em>ease</em> &#8211; sama kuin cubic-bezier(0.25, 0.1, 0.25, 1.0).</li>
<li><em>linear</em> &#8211; sama kuin cubic-bezier(0.0, 0.0, 1.0, 1.0).</li>
<li><em>ease-in</em> &#8211; sama kuin cubic-bezier(0.42, 0, 1.0, 1.0).</li>
<li><em>ease-out</em> &#8211; sama kuin cubic-bezier(0, 0, 0.58, 1.0).</li>
<li><em>ease-in-out</em> &#8211; sama kuin cubic-bezier(0.42, 0, 0.58, 1.0).</li>
</ul>
<p><strong>Viive:</strong></p>
<pre class="brush: xml;">
-webkit-transition-delay: delay;
-moz-transition-delay: delay;
-o-transition-delay: delay;
-transition-delay: delay;
</pre>
<p>Viive (kuten kesto) voidaan syöttää joko sekunteina (esim. <em>0.5s</em>) tai millisekunteina (esim. <em>500ms</em>).</p>
<p>Yleisesti ottaen transitiot kannattaa määritellä oletustason selektorille, ilman pseudo-luokkia. Tämän ansiosta transitio tapahtuu molempiin suuntiin, esimerkiksi vietäessä kursori elementin päälle ja pois elementin päältä.</p>
<p>Muista myös, että joudut syöttämään jokaisen ominaisuuden neljästi saavuttaaksesi kattavan selaintuen. Siksi on melkein aina parasta käyttää lyhyttä muotoa pitääksesi CSS-koodin siistinä.</p>
<h2 id="theBasics">Perusteet</h2>
<p>Tässä vaiheessa on hyvä demonstroida muutamia transitioita. Sinun tulee joko viedä kursori elementin päälle tai klikata elementin alla olevaa painiketta, jotta transitiot toimivat.</p>
<p>Kaikki koodiesimerkit on kirjoitettu jättäen selainkohtaiset määritykset pois tilan säästämiseksi.</p>
<h3>Perus-transitio: Ulottuvuudet ja skaalaaminen</h3>
<p>Aloitan esimerkillä yksinkertaisimmasta transitiosta. Samalla tässä tulee demotuksi, mitä eroa on perusominaisuuksilla width+height sekä scale-transformaatiolla.</p>
<pre class="brush: xml;">
#widthHeight {transition:all 500ms;}
#widthHeight:hover {width:200px; height:200px; line-height:200px;}
#scale {transition:all 500ms;}
#scale:hover {transform:scale(2.0, 2.0);}
</pre>
<div id="widthHeight" class="block">Width + Height</div>
<div id="scale" class="block">Scale</div>
<p>Kuten huomaat, leveys ja korkeus -arvot kasvattavat elementtiä normaalisti, mutta skaalaus vaikuttaa samoin kuin, jos elementti olisi suhteellisesti positioitu. Scale-transformaatiossa origo on keskellä, kun taas leveyttä ja korkeutta säädettäessä origo on vasemmassa yläkulmassa.</p>
<h3>Transitio ajoitus-funktioilla</h3>
<p>Alla on kaksi lohkoa, jotka pyörivät; ensimmäinen pyörii hyödyntäen <em>linear</em> ajoitus-funktiota käyttäen ja toinen käyttää <em>ease</em> ajoitus-funktiota.</p>
<pre class="brush: xml;">
#rotateLinear {position:relative; clear:both; left:0px; transition:all 2500ms linear;}
#rotateEasing {position:relative; clear:both; left:0px; transition:all 2500ms ease;}
#rotateLinear:target {left:200px; transform:rotate(360deg);}
#rotateEasing:target {left:200px; transform:rotate(360deg);}
</pre>
<div class="iframe-wrapper">
  <iframe src="http://gfx.fi/wordpress/matsku/artikkeli-2056" frameborder="0" scrolling="no" style="height:290px;width:585px;">Please upgrade your browser</iframe>
</div>

<p>Kuten luultavasti huomasit, elementtien liike oli keskenään erilaista, mutta itse transitio päättyy samaan aikaan (2500ms jälkeen).</p>
<h3>Transitio viiveellä</h3>
<p>Viiveestä on joskus hyötyä. Ja viiveen käyttöönottaminen transitioissa on vaivatonta:</p>
<pre class="brush: xml;">
#bgColorDelay {background-color:#12142B; transition:background-color 500ms linear 800ms;}
#bgColorDelay:hover {background-color:#336699;}
</pre>
<div id="bgColorDelay" class="block">800ms delay</div>
<h3>Peräkkäiset transitiot</h3>
<p>Useita transitioita voidaan ajaa myös peräkkäin. Tälle ei ole olemassa mitään oletusarvoa, mutta &#8220;ketju&#8221; voidaan saada aikaiseksi hyödyntäen viivettä:</p>
<pre class="brush: xml;">
#widthHeightOpacity {transition:width 500ms, height 500ms linear 500ms, opacity 500ms linear 1000ms;}
#widthHeightOpacity:hover {width:200px; height:200px; opacity:0.1;}
</pre>
<div id="widthHeightOpacity" class="block">w+h+opacity</div>
<p>Tässä on kuitenkin yksi miinus: transitio esitetään samassa järjestyksessä riippumatta siitä viedäänkö kursori elementin päälle vai pois sen päältä. Useimmissa tapauksissa, siinä ei ole mitään järkeä. Siksipä meidän tulee määritellä transitiot (aikaisempiin esimerkkeihin nähden) käänteisessä järjestyksessä:</p>
<pre class="brush: xml;">
#widthHeightOpacity {transition:width 500ms 1000ms, height 500ms linear 500ms, opacity 500ms linear;}
#widthHeightOpacity:hover {width:200px; height:200px; opacity:0.1; transition:width 500ms, height 500ms linear 500ms, opacity 500ms linear 1000ms;}
</pre>
<h3>Muita transitioita?</h3>
<p>Mahdollisesti on asioita, joita en tässä vaiheessa ymmärrä mainita. Mutta esimerkkien pääpaino on osoittaa kuinka yksinkertaista transitioiden käyttöönottaminen on (vaikka ne vaativatkin hieman lisätyötä kattavan selaintuen saavuttamiseksi).</p>
<h2 id="conclusions">Johtopäätökset</h2>
<p>Olemmeko jo perillä? Kyllä, olemme ainakin yli puolen matkan. Transitiot ovat yleisesti ottaen todella tyylikkäitä, kunhan niitä käyttää oikeissa tilanteissa.</p>
<p>Olen kuitenkin henkilökohtaisesti hieman epäileväinen CSS3-transitioiden suhteen: tässä vaiheessa niihin ei voi täysin luottaa ja lisäksi ne vaativat läpikohtaista selaintestaamista. Tulen käsittelemään näitä ongelmakohtia seuraavassa osassa. Lisäksi tulen vertailemaan CSS3-transitioita Javascript-kirjastojen (tässä tapauksessa jQuery) tarjoamien animaatioiden välillä.</p>
<p>Jos kuitenkin olet tekemisissä alustan kanssa, joka hyödyntää puhtaasti WebKit:iä (kuten iPhone tai Adobe AIR) niin älä jää ihmettelemään, vaan ota kaikki ilo irti sekä CSS3-transitioista ja Webkit-animaatioista.</p>
<h2 id="resources">Ulkoiset viittaukset</h2>
<p>Alla on listattuna hyviä viitteitä eri resursseihin, joita sekä selainvalmistajat että yksityishenkilöt ovat tuottaneet. Suosittelen ehdottomasti lukemaan ne.</p>
<ul>
<li><a title="Safari CSS Visual Effect Guide: Transitions" rel="external" href="http://developer.apple.com/safari/library/documentation/InternetWeb/Conceptual/SafariVisualEffectsProgGuide/Transitions/Transitions.html">Safari CSS Visual Effect Guide: Transitions</a></li>
<li><a rel="external" href="https://developer.mozilla.org/en/CSS/CSS_transitions">Mozilla CSS transitions &#8211; MDC</a></li>
<li><a title="Opera: CSS3 Transitions support in Opera Presto 2.3" rel="external" href="http://www.opera.com/docs/specs/presto23/css/transitions/">Opera: CSS3 Transitions support in Opera Presto 2.3</a></li>
</ul>
<ul>
<li><a title="CSS3.info" rel="external" href="http://www.css3.info/">CSS3.info</a></li>
<li><a title="CSS3 Please" rel="external" href="http://www.css3please.com/">CSS3, Please! The Cross-Browser CSS3 Rule Generator</a></li>
<li><a title="CSS Fundamentals: CSS 3 Transitions | NetTuts+" rel="external" href="http://net.tutsplus.com/tutorials/html-css-techniques/css-fundametals-css-3-transitions/">CSS Fundamentals: CSS 3 Transitions | NetTuts+</a></li>
<li><a title="CSS Transitions 101 | Webdesigner Depot" rel="external" href="http://www.webdesignerdepot.com/2010/01/css-transitions-101/">CSS Transitions 101 | Webdesigner Depot</a></li>
<li><a title="Going Nuts with CSS Transitions | 24 ways" rel="external" href="http://24ways.org/2009/going-nuts-with-css-transitions">Going Nuts with CSS Transitions | 24 ways</a></li>
<li><a title="Safari CSS Visual Effect Guide: Animations" rel="external" href="http://developer.apple.com/safari/library/documentation/InternetWeb/Conceptual/SafariVisualEffectsProgGuide/Animations/Animations.html">Safari CSS Visual Effect Guide: Animations</a></li>
</ul>
<h2>Kommentteja?</h2>
<p>Kommentteja artikkelista otetaan mielellään vastaan. Lisäksi, jos sinulla on lähettää hyviä viitteitä CSS3-transitioita käsitteleviin artikkeleihin, niin näistä on varmasti suurta apua minulle ja lukijoille.</p>
]]></content:encoded>
			<wfw:commentRss>http://gfx.fi/2010/04/css3-transitiot-olemmeko-jo-perilla/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Julkaisujärjestelmä – paras juttu ikinä</title>
		<link>http://gfx.fi/2010/03/julkaisujarjestelma-%e2%80%93-paras-juttu-ikina/</link>
		<comments>http://gfx.fi/2010/03/julkaisujarjestelma-%e2%80%93-paras-juttu-ikina/#comments</comments>
		<pubDate>Tue, 30 Mar 2010 20:46:34 +0000</pubDate>
		<dc:creator>hoo</dc:creator>
				<category><![CDATA[Digiala]]></category>
		<category><![CDATA[julkaisujärjestelmä]]></category>

		<guid isPermaLink="false">http://gfx.fi/?p=1958</guid>
		<description><![CDATA[Jokainen webbipulju myy nykyään julkaisujärjestelmää osana kotisivujaratkaisujaan. Superdynaamisen järjestelmän avulla asiakas voi päivittää kotisivunsa, imuroida makkarin ja varata liput U2:n keikalle. Vaan olisikohan vielä varaa parantaa?]]></description>
			<content:encoded><![CDATA[<p><strong>Jokainen webbipulju myy nykyään julkaisujärjestelmää osana  kotisivujaratkaisujaan. Superdynaamisen järjestelmän avulla asiakas voi  päivittää kotisivunsa, imuroida makkarin ja varata liput U2:n keikalle.  Vaan olisikohan vielä varaa parantaa?</strong></p>
<p>Kotisivujen jurakaudella kotisivubisnes oli totta tosiaan erilaista  kuin tänä päivänä. Päivittäminen oli teknistä ja kallista puuhaa, joten  sitä pyrittiin välttämään viimeiseen asti. Jos asiakas halusi sivuille  päivitystä, täytyi pirauttaa mainostoimiston tekniselle kaverille, joka  tuntihintaan lisäsi ajankohtaisen uutisen sinne, pilkun tänne.</p>
<p>Päivitystyötä helpottavien julkaisujärjestelmien esiinmarssi  viimeisen kymmenen vuoden aikana on muuttanut tilannetta ratkaisevasti.  Enää sisällönpäivityksessä ei ole kyse mustasta magiasta, vaan toimistot  uskaltavat myydä asiakkailleen ihan oikeasti helppokäyttöistä ja  käyttökelpoista päivitystyökalua. Kerrotaan järjestelmän eduista, ja  luvataan että <strong><em>”jos sulta tään Wordin ja Lärvikirjan käyttö onnistuu,  niin osaat sää sitte tänkin, heh heh!”</em></strong>.  Hommanhan pitäisi olla  nimenomaan näin, mutta kertoisiko joku miksi sitten niin moni  julkaisujärjestelmällä varustettu sivu jää kaikesta tästä huolimatta  päivittämättä?</p>
<h2>Räätälöity tuote, only for you!</h2>
<p>Eletään vuotta 2010. Voisiko olla, että <em>hyvän ja elävän</em> palvelun tuottamiseksi asiakas tarvitsisi muutakin apua kuin  könttähintaan tuntien puitteissa pykätyn päivitysjärjestelmän? Jos  asiakkaan asiakkaat ansaitsevat fiksut ja selkeät kotisivut, voisiko  asiakas itse ansaita <em>oikeasti</em> helppokäyttöisen ja hänen  tarpeitaan ajatellen säädetyn julkaisualustan? Saisiko asiakas peräti  tietää, mitä kaikkea netissä voitaisiin ihan pienelläkin vaivalla tehdä?</p>
<p>Tulee ymmärtää, että lähes kaikki web-sivustoja päivittävät henkilöt  tekevät päivitystä oman työnsä ohessa. Jokainen osaa konettaa käyttää,  mutta kukaan heistä ei ole digialan ammattilainen. Jos yrityksen  yhteystiedot muuttuvat, päivitetään uudet tiedot nettiin tietenkin  vaikka hampaat irvessä, koska asia on niin tärkeä. Mutta mikäli  päivityksessä jokin tökkii, ei aamupalaverissa pyydetä  teknologiajohtajalta blogikirjoitusta, lisätä messuilmoitusta tai  suunnitella kevätkampanjan esittelyä näyttävästi myös kotisivuilla.</p>
<p>Ihmiset innostuvat edelleen helposti nähdessään omaa kädenjälkeään  julkiwebissä. Jos päivitys ei suju kuin tanssi, innostus hiipuu.  Sivuston kehitystä ja päivitystyötä ei koeta tärkeäksi, jos se on  hankalaa! Tämä korostuu eksponentiaalisesti silloin, kun asiakkaan  ydinosaaminen ei rullaa webissä.</p>
<h2>Onko julkkari aina vain julkkari?</h2>
<p><img class="alignnone size-full wp-image-1959" title="30" src="http://gfx.fi/wordpress/wp-content/uploads/2010/03/30.jpg" alt="30" width="450" height="171" /></p>
<p>Pieni pulma on siinä, että sanalla <em>”julkaisujärjestelmä”</em> voidaan tarkoittaa lähes mitä tahansa. Järjestelmä voi olla WordPress,  Joomla, Drupal tai digiyrityksen oma, vuonna 1999 lanseerattu ja  sittemmin pintakuorrutettu muinaismuisto. <em>”Helppo päivitettävyys”</em> voi tarkoittaa mitä tahansa. <em>”Yksinkertainen”</em> voidaan käsittää  usealla eri tavalla. Varsinainen ongelma tulee kuitenkin vastaan siinä,  että edes käytetty julkaisualusta ei kerro vielä ollenkaan koko kuvaa  lopullisesta tuotteesta. Ei edes valveutuneelle asiakkaalle, joka tietää  eri järjestelmien erot ja ymmärtää omat tarpeensa täydellisesti!</p>
<p>Käsitteen hämäryys johtuu pitkälti siitä, että webbitoimistoissa  julkkaritöitä tehdään monesti liukuhihnalta. Teknisen puolen kaveri  vääntää yhden valmiiksi kuin kone, ja siirtyy sitten seuraavaan  keissiin. Hommassa on sen verran kiire, ettei tekijää kiinnosta miten  Maikki Mallikas 43v kokee työkalun nähdessään sen ensimmäisen kerran  omalla koneellaan. <em>Myynnin Pena hoitaa koulutuksen, mä teen niinku  ennenki että sekin tajuu.</em> Tekijän mielipide on se, että hommahan  selvästi toimii – <em>näin helppoa se on, katsokaas</em> – ja se saa  luvan riittää. <em>Näitä on tullut tehtyä viime vuosina monia, ja  valituksia ei ole kuulunut. Teen siis hyvää työtä.</em></p>
<p>Kuitenkin massatuotannossa käy usein niin, että julkaisujärjestelmään  jää näkyville sellaisia toimintoja, joita ei yksittäisissä tapauksissa  käytetä. Voikohan asiakkaalla mennä sormi suuhun? <em>Mitähän nuo  tiedostokategoriat ovat? Entä avainsanat? Keskustelun asetukset? Ei  tällaisesta koulutuksessa puhuttu&#8230;</em></p>
<p>Asiakas ei ymmärrä, ja kokee ettei käsitä työkalusta kaikkea.  Epävarmuus iskee aivan turhaan.</p>
<p>Harmi kyllä päivitystyökalujen ongelmat harvoin rajoittuvat vain  siihen, että ylimääräistä informaatiota ei ole karsittu pois. Usein myös  ominaisuudet toteutetaan tavalla joka kyllä toimii, muttei välttämättä  ole kaikkein intuitiivisin. Budjetit ovat rajalliset, ja siitä syystä  asioita ei ole varaa pyöritellä kaiken aikaa, vaan mennään siitä mistä  aita on matalin. Mennään sieltä mistä on aiemminkin menty. Onko näin  toimiminen kaiken aikaa järkevää bisnestä?</p>
<p>Sivujen koostajana paljon töitä tehneenä minua aina masentaa, kun  poikkean kuukausia aiemmin toteuttamalleni saitille vain huomatakseni,  että ensimmäisen ”Sivusto on julkaistu”-viestin jälkeen  ajankohtaispalstalle ei ole ilmaantunut mitään. Viimeisin päivitys  mihinkään on tehty viikko sivujen julkaisun jälkeen. Tiedän että sivut  on kyllä maksettu, olen saanut palkan ja asiakas on ollut niihin  ilmeisen tyytyväinen. Mutta väkisinkin mieleen hiipii ajatus: eikö  tehtäväni alan ammattilaisena ole nimenomaan auttaa asiakasta  kommunikoimaan webissä omien asiakkaidensa kanssa? Enkö ole jossain  suhteessa tässä tavoitteessani nyt epäonnistunut?</p>
<h2>Asiakasko tietää mitä tahtoo?</h2>
<p>Kun asiakas hakee kotisivuilleen uutta ilmettä ja tyyliä vuonna 2010,  hän hakee myös apua kiinnostavan sisällön tuottamiseen ja kävijöiden  houkutteluun, ymmärsi hän sitä itse tai ei. Mainostoimisto ei  useastikaan voi tuottaa asiakkaan sivujen sisältöä, vaan aloitteen on  tultava asiakkaalta itseltään. Toimisto voi kuitenkin ehdottomasti  miettiä tapoja opettaa asiakasta aktivoimaan kotisivuissa piilevät  voimavarat.</p>
<p>On molempien tahojen yhteinen etu, kun asiakkaan web-presenssi elää  ja voi hyvin. Tulee käsittää, että harva asiakas todella ymmärtää  internetin mahdollisuuksia tiedonjakokanavana, varsinkaan jurojen  punastelijoiden luvatussa maassa, Suomessa. Web on hieno asia! Asiakasta  tulee innostaa kantamaan oman kortensa kekoon! Mikään ei ole typerämpi  sijoitus kuin nettisivut, joilla ei ole mitään eikä koskaan vieraile  ketään.</p>
<p>Kokemani perusteella web elää erittäin nopeasti, mutta asiakkaille  suuremmat mullistukset tulevat aina pienellä viiveellä. Ennen riittivät  pelkät näyttävät sivut, sitten keksittiin myydä päivitettävyyttä ja rich  mediaa. Tärkein asia tästä hetkestä ikuisuuteen on kuitenkin sisältö.  Ehkä seuraavaksi myytäisiinkin apua sisällöntuottoon?</p>
<p>Niin, tai ehkä ei. Se on aika vaikeaa hommaa. <em>Emmä kyllä tiedä  mitä meidän asiakkaat oikeasti haluu.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://gfx.fi/2010/03/julkaisujarjestelma-%e2%80%93-paras-juttu-ikina/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

