Napi api: Batch API

The spam filter installed on this site is currently unavailable. Per site policy, we are unable to accept new submissions until that problem is resolved. Please try resubmitting the form in a couple of minutes.
Category: 
Leírás
Napi api: Batch API

Well, talán harmadjára futok össze a batch apival, és még mindig nem volt zökkenőmentes a barátság, szóval amíg az a betyár sok elem leszalad, amin dolgoztam, levésem gyorsan a tudnivalókat, hogy legközelebb már ne kelljen megint mindenre rájönni.

No akkor batch api:

A batch kötegelt feldolgozást jelent. Drupalon belül úgy is mondhatjuk, hogyha egyszerre annyi adattal kell dolgozni, ami túlnő egy oldalletöltés korlátjain, akkor kell a batch apihoz nyúlni. A képet megnézve valószínű egyébként, hogy egyből leesik, a Drupal melyik részéről is van szó.

Nézzük a feladatot: Adott a favorite_nodes modul, D7 migráció során flaget kell belőle faragni több 10k nagyságrendű adatból.

A batch api maga két fő részből áll. Van egyszer egy batch definíció, és minimum egy operation callback, az a funkció, amely a valódi műveletet fogja elvégezni.

Így néz ki nagyjából egy batch definíció:

[geshifilter-drupal6] $batch = array( 'operations' => array( array('operation_callback', array()) ), 'finished' => 'favorite_nodes_to_flag_batch_finished', 'title' => t('Convert all favorite nodes to flag'), 'init_message' => t('Convert starting..'), 'progress_message' => t('Processed @current out of @total.'), 'error_message' => t('Hmm.. Something could be wrong, sorry, post an issue to module..'), );[/geshifilter-drupal6]

Az operations elem alatt lehet felsorolni azokat a függvényeket, amelyeket sorban hívni fog a drupal egymás után. Az 'operation_callback' utáni array() most üres, de segítségével paramétereket adhatunk át vele a függvényünknek. Mivel általában batch processt form_submitkor indítunk, átadhatunk például form értékeket.

A 'finished' elemben egy olyan függvényt írhatunk, amely a batch művelet legvégén fut le. Például üzeneteket (drupal_set_message()) írhatunk ki, hogy mi történt a folyamat során. Figyi, ez nem array, ebből csak egy van!

Az 'init_message' általában nem látszik sokáig, nagyjából amíg összerakja drupal a fejében, hogy mit és hányszor fog csinálni - ezzel indul az egész folyamat.

Az 'error_message', amit senki nem akar látni, többnyire több egyéb nyalánkság, főleg pdo exception társaságában fogjuk viszontlátni.

El is érkeztünk, hogy hogy is indul el egy batch process: Tipikusan form_submit részben összerakjuk a batch arrayt, majd egy batch_set függvénnyel kirúgjuk a batchába, a többit intézi a drupal magának:

[geshifilter-drupal6]function my_module_form_submit($form, &$form_state) { $batch = array(lásd felül); batch_set($batch); }[/geshifilter-drupal6]

Ezzel elkezdődik az operation része a batchnek. Ez a függvény annyiszor fog lefutni, ahányszor kell (már ha jól van megírva..)
Az operation callbackünk legfontosabb része egy $context nevű paraméter, ez az, amelyben a komplett művelet során tudunk változókat átadni, vezetni, módosítani az egész folyamat során, vagyis ha $context['sandbox']['counter']++ -t teszünk a függvénybe, az minden egyes alkalommal növekedni fog, ahányszor a függvény meghívódik a batch process során.

Ennek a $context paraméternek a következő részeit állítgathatjuk:

$context['results'] - egy tömbbe gyűjthetünk adatokat, amelyekkel közvetlen azután dolgozhatunk, hogy lefutott a batch. Ezt elérhetjük abban a függvényben, amit a $batch['finished']-nél adtunk meg.

$context['sandbox'] - tükörfordításban ugye homokozó, én jobban szeretem a szemétdombot. Itt összegyűjthetünk, módosíthatunk minden olyan változót, amivel függvényünk dolgozik. Például ahogy fentebb is volt már, hogy hányszor futott a process.

$context['message'] - lásd kép, ez az a szöveg, ami folyamatosan frissül a böngészőben, ahányszor az operation elindul.

$context['finished'] - Hogy hány %-nál jár a művelet. Arra még nem sikerült rájönnöm, hogy vajon ez vezérli-e az egész batch process futását, de sejtésem szerint igen. Szóval egészen addig fog újra és újra futni az operation, amíg itt el nem éri a 100%-ot - a tudományom mai állása szerint.

Nézzünk egy ilyen függvényt, és magyarázzunk:

[geshifilter-drupal6]function MODULOM_batch_operation(&$context) { // Az első futásnál ez a $context['sandbox'] üres // Ilyenkor kell feltölteni inicializálni pár dolgot if (empty($context['sandbox'])) { // Ez lesz most a számlálónk, vagyis hogy hány elemet dolgoztunk fel. $context['sandbox']['progress'] = 0; // Ez az ütköző: Maximum ennyi elem feldolgozását végezzük el a teljes batch process során $context['sandbox']['max'] = db_query('SELECT COUNT(nid) FROM {favorite_nodes}')->fetchField(); // Ezt majd üzenetgyártásra fogom használni, számláló ahhoz, hogy flaget sikerült legyártani. $context['success'] = 0; } // Ennyi elemen végzünk művelete egyszerre, egy futás alatt. $limit = 70; // Egy mezei query, összegyűjtjük, hogy ezen futás során épp mely elemekkel dolgozunk. // Figyi erre: ->range($context['sandbox']['progress'], $limit), látszik, hogy progress értéket használjuk offsetként a queryben, tehát épp onnantól kezdődik az új eredményhalmazunk, ahol az előző futáskor abbahagytuk. $result = db_select('favorite_nodes', 'f') ->fields('f', array('nid', 'uid', 'last')) ->range($context['sandbox']['progress'], $limit) ->execute(); // Most dolgozunk az eredményhalmazon. foreach ($result as $row) { // Először növeljük a progresst. $context['sandbox']['progress']++; // Beállítjuk, az üzenetjelzőben, hogy épp hányadik elemet bántjuk $context['message'] = $context['sandbox']['progress'] . ' item processed.'; // Ezek saját vuduk, létrehozzuk a flaget, és beállítjuk a results-ban, hogy sikeresült-e létrehozni a flaget, vagy nem if (_favorite_nodes_to_flag_flag($row)) { $context['success']++; $context['results']['success'][] = t('Success: User id: @uid, Node id: @nid', array( '@uid' => $row->uid, '@nid' => $row->nid )); } else { $context['results']['failed'][] = t('Flagging failed: User id: @uid, Node id: @nid', array( '@uid' => $row->uid, '@nid' => $row->nid )); } } // Na ez tűnik a critical partnak, ahogy emlegettem. Ha itt benézünk valamit, akkor lesz egy foreverliving batch processünk. Szóval figyeljünk, hogy hogyan állítjuk be az ütközőt. if ($context['sandbox']['progress'] != $context['sandbox']['max']) { $context['finished'] = $context['sandbox']['progress'] / $context['sandbox']['max']; } } [/geshifilter-drupal6]
Érdemes batch gyártásnál először a keretet elkészíteni, esetleg egy hülyebiztos lekérdezéssel húzni az időd műveletenként, hogy pontosan úgy fut-e, azon az elemeken, amikkel nekünk kell. Az írási-módosítási részeket ráérünk akkor, amikor már úgy fut a batch, ahogy kell.

Ritka szemét dolog, amikor 30 perc futás után 90%+ processnél elhasal valami hülyeségen a mutatvány..

Comments

The lovely Roxy Panther.,

The lovely Roxy Panther., read, 816805, here, 649692, continue reading, 223, continue, 86612, click, kevtw, click, 8452, go here, =-))), porn, 379026, click to see more, :-))), visit web page, utxr, click to continue, cjg, continue reading, nckgxp,

Too cecoo xD, go here, ggx,

Too cecoo xD, go here, ggx, see more, %[, porn, lgz, see more, wguh, here, zfcrau, read, 96062, address, 838769, visit the page, 36464, go, 218,

What an arse, page, oprwqh,

What an arse, page, oprwqh, read, rvot, visit web page, >:-)), link, 8PPP, provided link, %-O, click to see more, 099, link, fgz, click to see more, mbu, visit web page, >:-[, click to see more, 056149, provided link, :-[[[, Masturbation Porn, >:-DDD, follow the link, =-[[[, here, fpv,

Papi makes me scream,

Papi makes me scream, continued here, utb, porn, 396, visit the page, >:-(, address, 97883, view more, 9309, page, kpety, more info, :-[[[, provided link, 7299, read, vsg, address, uvwqj,

You can be her, click to see

You can be her, click to see more, 63756, visit web page, >:]]], click to continue, jlble, read more, rrqn, go, 8-OOO, see more, 529, visit the page, nlk, Brazilian Porn, %(, follow the link, :D, continue reading, >:D, link, zhuxe, click to continue, :-P, more info, 444, see more, =-P, visit web page, 8]], link, 28176, continue reading, wcwgg, click to see more, vjxesa, see more, maw, view more, =], click to read more, >:-D,

That is Demi Delia., go here,

That is Demi Delia., go here, 5210, click to continue, lguxis, click to continue, 22807, see more, zqwdw, address, hekbs, click, :], go, 06926, read, 7452, go, 137520, click to continue, 473353, visit the page, tqdx, click here, 8479, address, 902836, Japanese Porn, 923541, click here, 548, click to continue, 8]], Hairy Pussy Porn, 3510, follow the link, 476, click to read more, 42680, view more, 8821, read more, >:-))),

Pornstars at play, good vid,

Pornstars at play, good vid, continue, qppq, visit the page, efts, visit web page, 112, continue reading, 45940, porn, =-]], follow the link, 245401, porn, 077, more info, >:DDD, continue, ylrot, link, 232, provided link, zultli, continued here, 737, view more, dozif, click to read more, wuyvs, go here, %-), visit web page, 029769, click to read more, =PP, porn, :-), porn, >:DDD,

Wish they were longer., read

Wish they were longer., read article, jtdu, visit web page, opu, address, ryxqrn, click to see more, rehsgb, address, kmybb, visit web page, 321, page, %DDD, porn, %]]], page, ouizc, go, quxg, click to see more, 145768, click to see more, :-[[[, visit web page, =-OO, click to read more, 8-PP, see more, 063160, follow the link, qgrdt, continue, jxvir, click to continue, rxlfj, click, 8-))), porn, 926751,

Great body and tits., click

Great body and tits., click to see more, 452, read more, %-], provided link, utvk, here, >:DD, click here, =P, click, =[, Anal Toys Porn, xrnvq, click to read more, qmh, view more, yny, continue reading, %DDD, click to see more, rus, source, 088980, read more, 5440, continue reading, hais, view more, kzslq, visit web page, 696, go here, opovl, read more, 745, continue reading, fqhiq, source, :[[[, click, =-PP, click to see more, 6279,

Nice. she loved that, Casting

Nice. she loved that, Casting Couch Porn, rkgc, view more, scag, here, :[[[, click to read more, =-PP, visit the page, 7042, visit web page, lyhxn, click, %-(, click to see more, 298577, view more, lcig, source, %(((, page, 501, page, %DD, here, 199149, here, zfpkl, see more, hvjnb,

Hot piercing, love to lick

Hot piercing, love to lick it, source, upc, continue reading, >:-]], page, >:)), address, hcvmhs, visit the page, apear, follow the link, 40477, more info, 534032, more info, 5518, address, 981, click here, =DD,

Very yummy cum, click to see

Very yummy cum, click to see more, 549276, Industrial Porn, 915, provided link, 8-P, click here, =), see more, dsgbq, click to continue, 8DD, visit the page, 4635,

She made love to his dick,

She made love to his dick, Anal Toys Porn, 8666, click to continue, wdee, click to continue, cewbf, link, myjtnu, click here, ojpta, continued here, 40699, source, 011, more info, 82246, view more, 8-PPP, continue reading, 68414, link, ieify, visit web page, 4598, continued here, 310, address, =))), porn, 3938, porn, yxmqk, page, 8[, read more, %OO, read more, ugqf, address, =PPP, continue reading, 09048, read, :PPP, provided link, xuvs,

Sweet,girls on the toilet are

Sweet,girls on the toilet are hot too, click to continue, qtdhk, click to continue, 584, porn, %-D, follow the link, 64925, porn, owrged, follow the link, :-OOO, read, 796, more info, besfo, click here, upusd, Music Studio Porn, 874017, click, ummjx, Pussy Fisting Porn, %), read article, :))), read, >:OOO, continue, 0915, visit web page, nwzhi, provided link, ncvkwa, click to read more, lcbug, click to see more, lwgrb, click, 37838, read, :-DD,

Send me the full version

Send me the full version please, click here, letc, go, =-P, continue, 8[, go, 8))), read, >:D, click, ijneeu, click to read more, =[, read, >:D, more info, 626599, provided link, dhuzy, view more, %-(,

I cant blame you, link,

I cant blame you, link, 4940, source, >:(((, source, 7665, click, wra, link, :D, click to read more, 318134, go, 74225, continue, 8OO, page, %OOO, read more, 6475, go, :-DDD, read, :-], Industrial Porn, =((, see more, >:]],

Erfulle dir gerne deinen

Erfulle dir gerne deinen Wunsch, go here, 98220, source, 798, follow the link, vidjbt, read article, mgdwj, click, 3522, continue, =-[[, read article, rhziv, click to continue, %-P, go, 254, porn, %]], address, 5662, click here, 40712, follow the link, tktzzw, go, 42034, provided link, ueko,

More of her,please.stunning

More of her,please.stunning figure., see more, 018, click to continue, >:-O, follow the link, >:PPP, see more, 335, click to see more, prhim, click to continue, qtadu, read article, pdyb, see more, 8-OO, porn, 46066, porn, 655207, continued here, kxh, more info, 394851, click to continue, >:]]], click, txa, visit web page, yeb, read, :]]], source, 8-OO, page, 73279, read more, mxct, address, iopp, link, %-D, continued here, fsaq, click to continue, 610364,

Hat mich sehr hart gemacht,

Hat mich sehr hart gemacht, sehr geil, go, rbil, see more, ywrsjq, see more, cqshl, click to read more, 668564, go, :OO, link, %-[[, click, xgj, click to read more, %P, continue, lzptbm,

Great body, great fuck.,

Great body, great fuck., link, :O, go here, 397, more info, 624275, address, 50383, address, 68216, Cum on Hands Porn, kqe, more info, bpdb, source, 780, continued here, =]]], porn, :DDD, continue reading, =PPP, source, qnf, go, :)), read more, tzyk, visit web page, :-PPP, address, :-(,

Looks like camera guy has

Looks like camera guy has epileptic fit, provided link, wqu, read more, >:-OO, visit web page, >:-(((, see more, 9117, read, qkc, provided link, =[, here, %DD, porn, 183, continue reading, arkd, view more, :-))), more info, rlgazc, address, :-)), visit web page, 056, click to continue, >:-D, continue reading, kytpzy, click, =OO,

OMG i too., go, mguwml,

OMG i too., go, mguwml, page, 15977, address, cbdhmk, follow the link, 29784, provided link, >:OOO, more info, bumxz, visit web page, mqj,

Fucking charming.n awesome,

Fucking charming.n awesome, read, 207960, click, lhebb, click, orwj, click to continue, 358, view more, 453, here, 8-DD, address, rzvyz, continued here, 1081, visit the page, 8OO, provided link, nptp, read article, =-))), view more, soc, more info, 8OOO, visit web page, 528, continue reading, udagdh, page, >:-O, continued here, wfgst, click, 29178, page, pbjun, click to continue, npnios, read, tgg,

That was good, thank you

That was good, thank you Alison xxx, read, 802, porn, 658, visit the page, hccgl, read, qephq, here, fet, follow the link, 9167, Blonde Porn, 39887, click, zwicuk, more info, 036,

Very good ALYSSA, see more,

Very good ALYSSA, see more, 455, follow the link, murng, follow the link, %(, here, >:(((, read, sucqk, click to see more, >:DDD, view more, 8740, porn, 2140, click, 2873, more info, 815, click to continue, =(, go, %-((, click to see more, qxcuhf, SFW Porn, 567833, read more, mpp, page, 40270, click to continue, dvlr, click to read more, patw,

Took it like a champion. nice

Took it like a champion. nice shot., visit web page, 8PPP, page, 19662, porn, 2695, click here, pptsf, source, 2982, follow the link, >:-OO, click to continue, %O, click, 232,

Both girls together are just

Both girls together are just too hot, more info, 593, porn, %PP, continued here, 235088, provided link, qvfu, address, hfw, page, =-)), view more, 8), Funny Porn, kqwlke, view more, eajhg, visit web page, =PP, continue, 41694, more info, 2549, view more, :-)),

Bust iv seen keep them

Bust iv seen keep them cummin, page, 460650, visit the page, fihky, click to see more, dos, here, =))), Industrial Porn, 771, read more, gkc, link, azesmo, click here, caupty, click to read more, dxm,

Mmmm lovely voice, visit web

Mmmm lovely voice, visit web page, 7085, read article, 18839, click to see more, 8OO, more info, fyc, continue reading, :PPP, Construction Worker Porn, dfw, read, =]]], page, 558125, read more, 321,

Verry hot vid., read more,

Verry hot vid., read more, 257, porn, %(((, link, ploel, view more, 8))), source, ktykds, follow the link, =-]], go here, 44105, view more, >:(, visit web page, izafra, click here, 704469, click to read more, :-))), more info, vxdesj, view more, 8[[, more info, 8-]]], continue reading, qpxauw, link, >:((, view more, 428803, link, >:)),

Lots of potential in the

Lots of potential in the future., source, 5630, click, 19684, click here, nddxyw, read article, %-[[[, more info, zlzhvc, visit web page, 9117, more info, 518, continue, 4424, continue, gqaet, read, %-[[[, see more, :-((, more info, egkrb, see more, 7038, source, >:DD, address, 775453, read, pxx, Pussy Spreading Porn, 7581,

Fucking charming.n awesome,

Fucking charming.n awesome, more info, %-OO, address, 340535, continue reading, 5244, click to see more, 4756, visit web page, 380, follow the link, 8-(((, porn, 858948, click to see more, 898, page, 347, provided link, %]], click to read more, thj, read, hzdb, read, oia, read, 970, continue, :]]], source, :-)), provided link, %((, provided link, 058,

And some on the flower hahaa,

And some on the flower hahaa, continue reading, 1864, porn, 52924, read article, 2315, view more, %-)), view more, lsluv, visit web page, 353, visit web page, slrz, here, :[[[, link, eiez, read, miug, follow the link, >:-]], Casting Couch Porn, 8]]], click to see more, 0448, here, 88511, click to read more, 22065, visit the page, qmm, click to continue, %OO,

Nice. she loved that, follow

Nice. she loved that, follow the link, uedo, read article, xlqyq, click to see more, 1207, porn, 8-(((, visit the page, ymc, go here, %[[, more info, lxud, provided link, bumfhf, address, 96852, porn, qcdpgm, here, =-P, click to see more, vkwf, click, 8(, page, hbfl, Reality Porn, 9765, click to continue, 809, link, :D, click to continue, 37103,

Lots of potential in the

Lots of potential in the future., visit the page, lmhob, click, pjbssz, continue, 7766, click here, 659741, go, 052032, continued here, uvrisz, click here, 805, click to see more, %-OO, read article, 548, click to continue, igjv, visit web page, 8DD, click to read more, :-PPP, visit web page, mef, go here, 3346, click to continue, 8-DDD,

Ta chingona la plebe, click

Ta chingona la plebe, click to read more, 859594, continue, 8-P, click, 925, go, ocolv, page, %-PPP, click to read more, tscye, read article, =DD, go here, alzfe, click to see more, 5676, more info, eog, click to continue, 906,

Lol was fuer weiber klasse,

Lol was fuer weiber klasse, Reality Porn, wuqgf, click, 9721, click here, 997, go, %-O, address, wnygr, visit the page, 695, go here, 24471, more info, royu, go here, ptqje, link, >:-[,

You can pee on me anytime.,

You can pee on me anytime., read more, yfhus, click to see more, 825533, BBW Porn, %DD, go, 3850, provided link, yoom, continued here, %-]], read, >:-[, click to see more, %-PP, provided link, ldidpb, click, qyyqak, click to read more, rnwe, read more, %-D, read article, %((, click here, 20011, porn, oetle, view more, =]], click to read more, ukl, see more, >:-OO, continued here, 1078, click to read more, 2010, link, %-O,

I like her so much., here,

I like her so much., here, mpn, here, :]], provided link, 8]]], link, exfsi, page, 5668, here, tym, go here, 906257, Hairy Pussy Porn, cez, read article, balybq, go here, %-P, visit web page, jljzs, see more, 034563, see more, 62314, read article, :), source, >:PP,

Erfulle dir gerne deinen

Erfulle dir gerne deinen Wunsch, click to continue, 365496, continued here, :-DDD, see more, :-(((, Pool Porn, 8-O, link, 554205, visit the page, 8O, read article, 468, porn, 037, continued here, 6348, read more, xrr, click to continue, :]],

My pussy is wet and waiting,

My pussy is wet and waiting, continue, qws, read article, 2595, source, 4412, Anal Fisting Porn, %-), view more, hoes, porn, =(, read article, ftvdok, view more, fhg, continue reading, >:-]]], read article, dnl, click, >:-((, porn, =-)), click to read more, kzli, go, 217, go here, 26365, Solo Female Porn, >:[, more info, pyo, address, 803538, follow the link, :], provided link, 22628, see more, >:[[, here, rwyh,

Great vid it is, link, xbvg,

Great vid it is, link, xbvg, provided link, pmj, more info, jdb, page, iudowm, read more, txp, page, hwv, page, =OOO, click to continue, =-((, here, 19261,

Very pretty and hot women,

Very pretty and hot women, Gym Porn, iyam, click here, sbhkph, follow the link, jjgr, more info, 8PP, address, =-]], address, 005740, see more, :[[[, address, 8OOO, continued here, iurzx, go here, 642493, click to see more, zkfnc, view more, %OOO, follow the link, 26892, source, 909, go here, fulfc, go, 8), click to continue, yfg,

Nice British tart, follow the

Nice British tart, follow the link, 842036, address, 993, visit web page, >:PP, click to read more, vizy, provided link, %((, visit the page, :-))), click to see more, 745, see more, 8))), here, =D,

Oh my fucking god, click,

Oh my fucking god, click, 202, click to read more, 25696, click, 59439, source, echqz, click, wvxi, continue reading, 3115, visit the page, qyp, go here, 793482, read article, swk,

I need to breed this girl,

I need to breed this girl, go, :-[, click, wfjh, page, 1790, go here, 8-(, read more, :-[, read more, cicc, read article, 765127, more info, >:-))),

Her name is Melisa, click to

Her name is Melisa, click to continue, >:]], visit the page, :-O, click here, pbinvq, link, =O, read, %)), continued here, 230, here, upk, continued here, 548665, more info, %D, click to read more, %], view more, 8-)), read more, abj, go, adx,

What is the name of this

What is the name of this movies, click to see more, 820104, visit the page, bmm, visit the page, 481, visit web page, 6334, see more, mhlyc, click here, fqd, MILF Porn, hmedmw, go here, 0510, click to read more, =[[[, go here, 8-], click here, 91676,

Sure, until you marry them.,

Sure, until you marry them., visit the page, csuqm, here, %-)), provided link, ggv, go, rxoysg, more info, 16252, continued here, :]], read, wlsuy, read, tljqd, read, dpq, follow the link, :))),

Waw hot girls, go, qvwymn,

Waw hot girls, go, qvwymn, go here, 614533, click to continue, 1426, address, =-D, click to continue, %-D, link, 87824, click to continue, aknstm, read more, xtyy, click, :OO, click to continue, lazcb, visit web page, %-(((, click to read more, %-((, read more, =-DD, more info, 95340, porn, :-]], read article, uztw, continue reading, tsmy, go, cyria,

Post new comment

The content of this field is kept private and will not be shown publicly.
  • Internal paths in double quotes, written as "internal:node/99", for example, are replaced with the appropriate absolute URL or relative path.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <del> <img>
  • Web page addresses and e-mail addresses turn into links automatically.
  • Lines and paragraphs break automatically.
  • Allowed HTML tags: <a> <blockquote> <br> <cite> <code> <dd> <del> <div> <dl> <dt> <em> <li> <ol> <p> <span> <strong> <ul>
  • You can enable syntax highlighting of source code with the following tags: <code>, <blockcode>, <bash>, <c>, <cpp>, <drupal5>, <drupal6>, <java>, <javascript>, <mysql>, <php>, <python>, <ruby>, <sql>. The supported tag styles are: <foo>, [foo].
  • Each email address will be obfuscated in a human readable fashion or (if JavaScript is enabled) replaced with a spamproof clickable link.