Archive for the 'Hírek' Category

Cache header-ök használata

Az alkalmazásokban található, ritkán változó tartalmak/adatok cache-elése hasznos a sávszélesség megtakarítására a gyakori, ismétlődő kérések esetén. A képek, hangok lokálisan történő átmeneti tárolása hatékonyabb megoldás, mint azok sorozatos újra letöltése.

A cache használata közös érdek, csökkenti az alkalmazásokat kiszolgáló szerverek terheltségét, és az iWiW szervereinek külső adatforgalmát.

Így arra kérünk titeket, hogy alkalmazásaitok nem változó tartalmait legyetek szívesek minél hosszabb lejárati idővel ellátott cache fejlécekkel kiszolgálni!

Hírfolyam az iWiW nyitóoldalon: csoportosítás

Zárva a bejegyzés sorozatunkat a címlapon megjelenő hírfolyam elemek kapcsán, bemutatjuk a második opciót, melyet használhattok a hírek kiküldésekor: a csoportosítást. Ennek kapcsán az OpenSocial activity két további lehetőségét vezettük be az iWiW-en a hírfolyam elemeknél: a sablonok támogatását, és a hírfolyam elemek csoportosítását. A bejegyzésben bemutatjuk a sablonok használatát, illetve hogy hogyan készíthetőek olyan sablonok, melyek csoportosításra is alkalmasak.

Sablonok

Hírfolyam sablonokat kétféleképpen lehet hozzáadni alkalmazásunkhoz: vagy az alkalmazás XML-jébe ágyazva, vagy külső fájlként meghivatkozva (szintén XML formátum). Mindkét esetben a ModulePrefs részbe kerülnek információk. Az XML-ben elhelyezés a következőképpen néz ki (természetesen ahogy eddig is, a ModulePrefs további tulajdonságai, gyermek elemei megadandóak):

<ModulePrefs>
  <Locale>
    <msg name="uzenet_cime">
      Hello Világ!
    </msg>
    <msg name="uzenet_szovege">
      Ez itt egy szimpla Hello Világ üzenet.
    </msg>
  </Locale>
</ModulePrefs>

A példában ugyan két üzenet szerepel csak, de bármennyit definiálhatunk. Az üzenetek címét és szövegtörzsét két külön sablonnal kell definiálni. Külső XML-re hivatkozni pedig így lehet:

<ModulePrefs>
  <Locale messages="http://example.hu/my-activity-messages.xml"/>
</ModulePrefs>

A hivatkozott XML felépítése:

<?xml version="1.0" encoding="UTF-8"?>
<messagebundle>
  <msg name="uzenet_cime">
    Hello Világ!
  </msg>
  <msg name="uzenet_szovege">
    Ez itt egy szimpla Hello Világ üzenet.
  </msg>
</messagebundle>

Egy ilyen üzenet sablonra a “name” tulajdonságával lehet hivatkozni hírfolyam elem létrehozásakor:

var options = {};
options[opensocial.Activity.Field.TITLE_ID] = "uzenet_cime";
options[opensocial.Activity.Field.BODY_ID] = "uzenet_szovege";
opensocial.requestCreateActivity(opensocial.newActivity(options));

Egy sablonban változókat is használhatunk:

<msg name="osszeadas">
  Az ${a} + ${b} művelet eredménye: ${vegeredmeny}.
</msg>

A paramétereket a következőképpen adhatjuk át:

var options = {};
options[opensocial.Activity.Field.TEMPLATE_PARAMS] = { a: "12", b: "13", vegeredmeny: "42" };
options[opensocial.Activity.Field.TITLE_ID] = "uzenet_cime";
options[opensocial.Activity.Field.BODY_ID] = "osszeadas";
opensocial.requestCreateActivity(opensocial.newActivity(options));

Egy speciális változó is rendelkezésünkre áll, “Subject” névvel, és az aktuális felhasználó adataival. Ezt a következőképpen használhatjuk:

<msg name="osszeadas">
  ${Subject.DisplayName} most ütötte meg a főnyereményt.
</msg>

Ezt a paramétert átadnunk sem kell, a példa a felhasználó nevét - belinkelve a profil oldalára - fogja behelyettesíteni.

Tudnivalók az iWiW-en:

  • Minden, a hivatkozott sablonokban szereplő változóhoz értéket kell rendelnünk a TEMPLATE_PARAMS segítségével.
  • Csak string adható át paraméterként, objektum, vagy például egy OpenSocial Person átadása nem támogatott.
  • Sablon használata esetén a rendszer nem teszi automatikusan a hírfolyam elejére a felhasználó nevét, ezt magunknak kell megtennünk. A hírfolyam nevesítése, ahogyan az értesítéseknél is, kötelező.

Csoportosított hírfolyam elemek

A hírfolyam elemek csoportosítása a sablonok segítségével történik. A “sima” hírfolyam elemen felül definiálni kell azok csoportosított változatát is. Csoportosítás a sablon bármely változó eleme alapján történhet. Például egy alap üzenet:

Példa Béla lájkolt egyet.
Madonna zenésztől Like a Virgin szám a kedvence.

Itt változó paraméter lehet a felhasználó neve, az album neve és magának a számnak a neve. Ez sablonnal így nézhet ki:

<msg name="title">${Subject} lájkolt egyet.</msg>
<msg name="body">${artist} zenésztől ${song} szám a kedvence.</msg>

További sablonok segítségével csoportosíthatóvá tehetjük a hírfolyam elemet, például ha (az aktuális felhasználó ismerősei közül) több felhasználó (vagy egy felhasználó, de többször) is ugyanazt az előadót lájkolja, akkor:

<msg name="title:artist">${Subject.Count} ismerősöd ${artist} ${artist.Count} db számát lájkolta.</msg>
<msg name="body:artist">${Subject.List} kedvenc dalai: ${song.List}.</msg>

A sablon neve után kettősponttal kell jeleznünk, hogy melyik változó szerint kívánunk csoportosítani. Ha a hírfolyamban több hír is megjelenne úgy, hogy az adott változó értéke megegyezik, akkor a rendszer csoportosítani fogja azt a csoportosítást lehetővé tevő sablonokat felhasználva. Ebben a példában egyből láthatóak speciális értékek, a .List felsorolásként jeleníti meg az adott sablon paraméter értékeket, a .Count pedig a darabszámot helyettesíti be.

Lehet csoportosítani felhasználó szerint is, avagy ha az adott felhasználó több számot lájkol egymás után, akkor ahhoz így kell sablont rendelni:

<msg name="title:Subject">${Subject} ${song.Count} dalt lájkolt.</msg>
<msg name="body:Subject">Kedvenc dalai: ${song.List}. Kedvenc zenészei: ${artist.List}</msg>

Ha nincs alapértelmezett (nem csoportosított) sablon, akkor a rendszer a nem-csoportosított esetben a sorrendben legelső sablont használja megjelenítésre. A címlapra kikerüléshez kötelező legalább egy jellemző paraméter szerint csoportosítani mindegyik üzenettípust az alkalmazáson belül (az alap üzenet definiálásán kívül).

Végül, de nem utolsó sorban fogadjátok szeretettel példa alkalmazásunkat, a Rádió Aktivitást.

Hírfolyam az iWiW nyitóoldalon: alapok

Az elmúlt napokban a hírfolyamokat illetően több jelentős változás is történt: a hírfolyam elemek köre kibővült számos iWiW-es “core” eseménnyel, több lehetőséget biztosító moderációs lehetőséget adtunk a felhasználók kezébe, továbbá az iWiW nyitóoldalon is megjelennek immáron ezek az információk. A hírfolyam ebben a formában jóval hangsúlyosabb megoldást, egyben az alkalmazások sikeres terjedéséhez jóval hatékonyabb eszközt jelent a korábbi aloldali megjelenéshez képest. Ebben a bejegyzésben összefoglaljuk a változásokat, és leírjuk, hogy milyen feltételekkel lehet megjelenni az alkalmazások activityjével az iWiW nyitóoldalon, a következő két bejegyzésben pedig példakódokkal illusztráljuk az opciókat.

Egy alkalmazás vagy core funkció által küldött hírfolyam elemnek három állapota lehet a megjelenés helyét illetően:

  • sehol sem jelenik meg (felhasználó letiltotta)
  • csak a hírfolyam aloldalon (iwiw.hu/pages/activity/activities.jsp) jelenik meg (ez az alapértelmezés, vagy a felhasználó így rendelkezett)
  • mind a nyitóoldalon, mind a hírfolyam aloldalon megjelenik (ez az alapértelmezés, vagy a felhasználó így rendelkezett)

Az egyes felhasználók szabadon felülbírálva az alapértelmezést letilthatják az adott forrásból származó hírelemeket, vagy a blokkolt alkalmazások oldalról visszaállíthatják, esetleg csak a hírfolyam aloldalra korlátozhatják azokat.

Az iWiW-es funkciók alapértelmezése, hogy a nyitólapon és a hírfolyam aloldalon is megjelennek.

Az API-hoz csatlakozó, általatok fejlesztett alkalmazások tekintetében két opció közül legalább egyet teljesítenetek kell, hogy az adott alkalmazáshoz központilag bekapcsoljuk a nyitólapi megjelenést is. (Az iWiW nyitólapra engedését minden esetben egyedileg fogjuk elbírálni, elképzelhető, hogy a kiengedéshez kérni fogjuk, hogy mindkét kritériumnak feleljen meg az alkalmazás.)

A két opció a következő:

  • Az alkalmazásból kiküldött hírek kapcsán a felhasználótól egy (div-vel megvalósított) “popup” segítségével a felhasználó hozzájárulását kell kérnetek a hírelem kiküldéséhez, tájékoztatva a felhasználót a hírelem pontos tartalmáról, és a kiküldés tényéről.
  • A kiküldött híreknél meg kell valósítanotok a hírelemek csoportosíthatóságát, vagyis hogy a címlapon az adott alkalmazás felől érkező híreket összefoglalva tudja megjeleníteni az iWiW.

A “popup” elkészítését és megjelenését rátok bízzuk, de egy jQuery-re és Boxy-ra épülő megoldást a következő bejegyzésben bemutatunk példaként. Itt a lényeg a fentebb is leírt adattartalom, és hozzájárulás.

A hírelemek csoportosításához üzenet sablonokat kell majd készítenetek, és ezeket használni a kiküldéskor, ezek használatáról, és a pontos technikai részletekről szintén egy külön bejegyzésben fogunk részletesebben is írni.

Módosul az iWiW Fejlesztői ÁSZF

2009. szeptember 10-i hatállyal módosul az iWiW Fejlesztői ÁSZF (Az iWiW Alkalmazások Általános Szerződési Feltételei Fejlesztők részére).

Az új ÁSZF-et itt olvashatjátok.

A legfontosabb változások röviden:

8.7 - az alkalmazásokba kötelező lesz Medián WebAudit mérőkódokat beépíteni, erre vonatkozóan egy külön részletes blogbejegyzést teszünk közzé a napokban.

17 - az alkalmazásokban megjelenő hirdetésekre csak jogi személyekkel tudunk szerződni.

Bővülő adatkör a felhasználókról, random ismerőslista, paraméterek átadása

Az elmúlt napokban több új lehetőség élesedett mind a Homokozóban, mind az éles rendszerben is elérhetően, továbbá két kisebb változás is volt a Fejlesztői Portálon. A részletek:

Bővebb adatok a felhasználókról

Az első és talán egyben a legizgalmasabb újdonság, hogy bővült a felhasználókról lekérdezhető adatok köre. Eddig a következő adatokat lehetett lekérni:

  • Felhasználó azonosítója: opensocial.Person.Field.ID
  • Felhasználó neve: opensocial.Person.Field.NAME
    • Vezetékneve: opensocial.Name.Field.FAMILY_NAME
    • Keresztneve: opensocial.Name.Field.GIVEN_NAME
    • Egyben: opensocial.Name.Field.UNSTRUCTURED
  • Felhasználó profil oldalának URL-je: opensocial.Person.Field.PROFILE_URL
  • Felhasználó 64×64-es méretű profilképének URL-je: opensocial.Person.Field.THUMBNAIL_URL
  • Felhasználónak telepítve van-e az aktuális alkalmazás: opensocial.Person.Field.HAS_APP

A kör a következő paraméterekkel bővül:

  • Felhasználó beceneve:  opensocial.Person.Field.NICKNAME
  • Felhasználó neme: opensocial.Person.Field.GENDER
  • Felhasználó helye: opensocial.Person.Field.CURRENT_LOCATION
    • Felhasználó országa: opensocial.Address.Field.COUNTRY
    • Felhasználó települése: opensocial.Address.Field.LOCALITY
  • Felhasználó időzónája: opensocial.Person.Field.TIME_ZONE
  • Felhasználó által beszélt nyelvek: opensocial.Person.Field.LANGUAGES_SPOKEN

Az adatokat külön kérni kell a szervertől, amennyiben az alkalmazásnak szüksége van azokra - alapértelmezetten nem küldjük el ezeket az információkat (kímélendő az adatbázist, illetve gyorsítva ezzel az adatlekéréseket). Az egyes mezők neve, illetve értéke az OpenSocial szabvány által definiáltakhoz igazodik. Érdemes lehet az OpenSocial Dev App segítségével átnézni a lehetőségeket, egy felhasználó adatainak lekérdezésekor ott megjelennek a bővített információk.

Íme egy példakód a fentiek használatára:

var params = {};
params[opensocial.DataRequest.PeopleRequestFields.PROFILE_DETAILS] = [opensocial.Person.Field.GENDER];
var req = opensocial.newDataRequest();
req.add(req.newFetchPersonRequest(opensocial.IdSpec.PersonId.VIEWER, params), 'viewer');
req.send(function(response){
  var gender = response.get('viewer').getData().getField(opensocial.Person.Field.GENDER).key;
  if (gender == "MALE") { alert("Hello spaceboy!"); }
  if (gender == "FEMALE") { alert("Hello spacegirl!"); }
});

Mivel a nem-et leszámítva ezeket az információkat nem kötelező megadni az iWiW-en, arra számítsatok, hogy ezen adatok nem minden felhasználónál lesznek elérhetők!

FONTOS!!! Amennyiben már jóváhagyott és élesben lévő alkalmazásod van, és szeretnéd bővíteni az alkalmazás által használt adatok körét, kérjük, hogy ezen szándékodat előzetesen mindenképp jelezd a dev kukac iwiw hu e-mail címen. Adott esetben szükséges lehet az alkalmazás adatkezelési szabályainak frissítése.

Ismerősök véletlenszerűen

Pár véletlenszerű ismerős megjelenítéséhez eddig le kellett kérdezni az összes ismerőst, majd azokból véletlenszerűen választani. Ennek kiváltására és hatékonyabbá tételére bevezettük a “random” sorrendbe rendezhetőséget, melyet a következő példakód szemléltet:

var req = opensocial.newDataRequest();
var spec = opensocial.newIdSpec({"userId": "OWNER", "groupId": "FRIENDS"});
var params = { "sortOrder": "random", "max": 3 };
req.add(req.newFetchPeopleRequest(spec, params), "friends");
req.send(function(response){
  response.get("friends").getData().each(function(person) {
    alert(person.getDisplayName());
  });
});

Kérjük alkalmazásaitokkal igazodjatok ehhez a lehetőséghez!

Paraméterek átadása az alkalmazásnak

Bár az eddigiekben is lehetőséget teremtettünk az alkalmazásnak URL-en keresztüli paraméterátadásra, az adatok nem mentek át, ha a felhasználónak nem volt feltelepítve az alkalmazás (telepítőképernyőnél elveszett), vagy ha éppen nem volt belépve (login képernyőnél elveszett) amikor a linkre kattintott. Ez javítva lett, avagy a paraméterek megmaradnak a bejelentkezés, alkalmazás telepítés során is. Példakód:

gadgets.views.requestNavigateTo(gadgets.views.getSupportedViews()["canvas"], {
foo: 'bar',
url: 'http://dev.iwiw.hu/?foo=bar'
});
var params = gadgets.views.getParams();
alert(params['foo']);

Az első kódrészlet a canvasra navigálást mutatja meg, a második pedig hogy hogyan lehet kiolvasni az átadott paramétereket. Paramétereket nem csak a requestNavigateTo segítségével történő átnavigáláskor, hanem hírfolyamban és értesítésben szereplő linkekben is át lehet adni.

Fejlesztői portál

A fejlesztői portálon is végeztünk kisebb fejlesztéseket. Az egyik változás, hogy az eddig nem túl egyértelmű “Alkalmazás frissítése” gombnak immár az elhelyezkedése és leírása is jelzi, hogy minden környezetben (Homokozó is, éles rendszer is) frissül az alkalmazás, amennyiben megnyomjátok a gombot (emiatt érdemes külön fejlesztői verziót felvenni külön az alkalmazásból).

Egy másik változás, hogy újonnan hozzáadott alkalmazás XML megadása után nem kell kattintgatni ahhoz, hogy a Homokozón megjelenjen az alkalmazás, hanem egyből elérhető, aktív lesz ebben a környezetben.

Alkalmazások élesítése az iwiw.hu alatt

Zajlik a jóváhagyási folyamat, és napokon belül kiküldjük visszajelzéseinket a beküldött alkalmazásokkal kapcsolatosan. Sok alkalmazásnál csak kisebb formai vagy technikai problémák vannak csak, ezek gyors kijavítására számítunk. Az egyes feladatokról e-mailt küldünk.

A következő lépés innen már az alkalmazás élesbe állása, az iwiw.hu alatti megjelenése lesz, az ezirányú teendőiteket gyűjtöttük össze.

Az alkalmazás jóváhagyásáról egy emailt fog kiküldeni a rendszer, de ez nem jelenti az alkalmazás élesbe állását is - ezt a fejlesztő tudja megtenni az alkalmazás Aktív állapotba állításával. Ezt a Fejlesztői Portálon az alkalmazás Vezérlőpult menüpontja alatt éritek majd el.

Amint megkaptátok a formális értesítést a jóváhagyásól, kérjük ellenőrizzétek a következőket:

  • az alkalmazás tesztadatai, a Homokozóban felvitt információk törölve vannak
  • ha az alkalmazás igényli, fel van töltve kezdeti adatokkal, információkkal (pl. a cserebogarak különböző fajtáit bemutató alkalmazás legalább két-három cserebogarat bemutat)
  • az alkalmazás külön kezeli a Homokozót és az éles rendszert, elkülöníti az adatokat. A Homokozó és az éles rendszer mind a JavaScript kódban, mind a szerver oldalon elkülöníthetőek egymástól. JavaScriptből az opensocial.getEnvironment().getDomain() függvényhívás adja vissza az éppen aktuális domaint, míg szerver oldalon a signed requestek segítségével, a kérés során átadott oauth_consumer_key paraméter ellenőrzésével dönthető el, hogy honnan érkezett a kérés.
  • a nem élesbe szánt fejlesztéseket egy külön kódon végzitek, ugyanis amint lejár a cache ideje, vagy amikor frissítitek az alkalmazást a Homokozón, a legfrissebb kód fog megjelenni élesben is

A visszajelzésünk kiküldése után nem lesz sok időd, hamarosan indulunk! Várhatóan április 22-én, szerda reggel állnak élesbe az alkalmazások.

Új terminológia: “történések” helyett “hírek”

Egy terminológiai változásról szeretnénk hírt adni: az eddigi “történések” kifejezést a felhasználók számára talán érthetőbb “hírek” kifejezésre fogjuk cserélni a közeljövőben. Ez igazából csak pár szöveg átírását jelenti a Homokozóban, de itt a blogon, és a wikiben is már “hírek”-ként fogunk hivatkozni az opensocial.requestCreateActivity függvény segítségével előálló tartalomra.

Döntésünk nem hoz azonnali változásokat a blogban és a wikiben, de igyekszünk mihamarabb átállni mi is a friss kifejezésre, s a jövőbeni blogbejegyzésekben, illetve a wikiben már az új nevet használni. Ha az alkalmazásotokban hivatkoztok erre a lehetőségre (például annak FAQ-jában), akkor javasoljuk, hogy írjátok át a szövegeiteket az új formára.

Adatvédelmi nyilatkozat

Többetektől is felmerült kérdésként, hogy pontosan mikor kell adatvédelmi nyilatkozatot készíteni, s hogy ezt hogyan kell a felhasználók felé prezentálni. Az utóbbi napok frissítései kapcsán megjelent egy olyan fejlesztésünk, mely immár lehetővé teszi az adatvédelmi nyilatkozatok megadását az alkalmazásoknál, egészen pontosan a Fejlesztői Portálon, az Alkalmazásaim alatt az egyes alkalmazások alapadatainál. Itt lehetett korábban megadni a Felhasználási feltételeket is, s itt jelent most meg egy új szövegdoboz, ahova az adatkezelési nyilatkozatot lehet bemásolni.

Azt, hogy mikor kell adatvédelmi nyilatkozat egy alkalmazáshoz, azt a hazai jogrendszer szabályozza. Segítségül leírtuk a Fejlesztői Útmutató IV. pontjában, továbbá a Fejlesztői Útmutató kivonatának Adatkezelésről szóló részében, hogy ez pontosan mit jelent. Tovább pontosítva egyes részeket, melyek kapcsán kérdéseket kaptunk, az alábbiakat tudjuk mondani:

Nem kell adatkezelési nyilatkozat, ha az alkalmazás:

  • csak iwiw-től kapott adatokat használ, és azt nem tárolja külső szerveren
  • nem kér be semmilyen adatot a usertől
  • ha nem kér be semmilyen személyes adatot (pl. cím, telefonszám, IP cím, családi állapot, stb.)
  • ha nem tárol személyhez kötötten adatot, csak anonim/aggregált módon

Biztosan kell adatkezelési nyilatkozat, ha az alkalmazás:

  • nem a fejlesztő kezeli az adatot, hanem egy alvállalkozó
  • személyes adatot kér be
  • valamilyen tranzakcióra ösztönöz - vegyél ezt/azt, akkor azt milyen feltételekkel veszed, stb.
  • például nyereményjátékhoz adatokat kér be (mit csinál a válaszokkal, ez fontos)

Amennyiben az alkalmazás tevékenysége során minimális adatkezelést végez, a felhasználási feltételek részeként is megfogalmazható a nyilatkozat.

A felhasználási feltételekkel kapcsolatosan hamarosan közzéteszünk egy mintát a Wikin.

Hamarosan lezárul a verseny

Hamarosan, március 31-én, kedden éjfélkor lezárjuk a versenyre jelentkezés lehetőségét. Figyeljetek erre a határidőre, mert ettől már nem szeretnénk eltérni, küldjétek be időben a fejlesztéseket! Több visszajelzést is kaptunk azt illetően, hogy a Fejlesztői Portál, illetve a Homokozó instabilitása miatt a fejlesztéssel akadályokba ütköztetek, s kéritek, hogy hosszabbítsuk meg a versenyt emiatt. Megértve a nehézségeket melyeket környezetünk problémái okoztak, de figyelembe véve azt, hogy közeleg az alkalmazások megjelenése az éles rendszeren, arra jutottunk, hogy a versenyre beérkező alkalmazások elbírálását rugalmasan kezeljük.

Az alkalmazások rugalmas kezelése konkrétan a következőt jelenti:

  • be kell küldenetek határidőre az alkalmazást,
  • az alkalmazásnak működőképesnek kell lennie,
  • március 31. éjfélkor lezárjuk a jelentkezést, s másnap elkezdjük elbírálni az alkalmazásokat,
  • a jóváhagyásra beküldés során megjegyzésként az alkalmazás fejlesztője jelezheti, hogy igényel még pár nap fejlesztést, pontosan megjelölve hogy mely részeket szeretné még véglegesre csiszolni, s hogy ehhez mennyi napra van szüksége - április 6. éjfélig erre lehetőséget biztosítunk.

StartUP Konferencia

Az idei, március 17-ére szervezett StartUP Konferencián részt veszünk egy Új platformok című beszélgetésen, melynek egyik kiemelt témája az iWiW alkalmazások lesz - főként üzleti szemszögből körbejárva a kérdést. A konferencián a részvétel ingyenes (de regisztrációhoz kötött), ha eljuttok rá, ajánljuk ezt a blokkot!