<?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>netninja.hu &#187; online news room</title>
	<atom:link href="http://netninja.hu/tag/online-news-room/feed/" rel="self" type="application/rss+xml" />
	<link>http://netninja.hu</link>
	<description>$net-&#62;ninja</description>
	<lastBuildDate>Wed, 05 Oct 2011 23:55:50 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>A szerkesztőségi rendszer – Bevezető – Első rész</title>
		<link>http://netninja.hu/2010/02/17/a-szerkesztosegi-rendszer-bevezeto-elso-resz-multi-domain-cms/</link>
		<comments>http://netninja.hu/2010/02/17/a-szerkesztosegi-rendszer-bevezeto-elso-resz-multi-domain-cms/#comments</comments>
		<pubDate>Wed, 17 Feb 2010 09:57:06 +0000</pubDate>
		<dc:creator>syck</dc:creator>
				<category><![CDATA[core]]></category>
		<category><![CDATA[cms]]></category>
		<category><![CDATA[online news room]]></category>
		<category><![CDATA[online ujsagiras]]></category>
		<category><![CDATA[szerkesztosegi rendszer]]></category>

		<guid isPermaLink="false">http://netninja.hu/?p=892</guid>
		<description><![CDATA[<table cellpadding='10'><tr><td valign='top' align='left'><p>Categories: <a href="http://netninja.hu/category/core/" title="View all posts in core" rel="category tag">core</a></p><p>Tags: <a href="http://netninja.hu/tag/cms/" rel="tag">cms</a>, <a href="http://netninja.hu/tag/online-news-room/" rel="tag">online news room</a>, <a href="http://netninja.hu/tag/online-ujsagiras/" rel="tag">online ujsagiras</a>, <a href="http://netninja.hu/tag/szerkesztosegi-rendszer/" rel="tag">szerkesztosegi rendszer</a></p>Ez a post egy 2002-es munkajegyzet alapján készült. A post témája az internetes hír siteok, hírportálok szerkesztőségi rendszerének tervezése, üzemeltetése, fejlesztése. Reményeim szerint a kezdőktől a haladókig mindenki talál benne hasznosat. A téma szerteágazó volta miatt több postot szánok a témának. Az első két részben áttekintést nyújtok a szerkesztőségi rendszer működéséről, elemeiről. A további részekben [...]<table width='100%'><tr><td align=right><p><b>(<a href='http://netninja.hu/2010/02/17/a-szerkesztosegi-rendszer-bevezeto-elso-resz-multi-domain-cms/' title='A szerkesztőségi rendszer – Bevezető – Első rész'>Read more...</a>)</b></p></td></tr></table></td></tr></table>]]></description>
			<content:encoded><![CDATA[<p>Ez a post egy 2002-es munkajegyzet alapján készült. A post témája az internetes hír siteok, hírportálok szerkesztőségi rendszerének tervezése, üzemeltetése, fejlesztése. Reményeim szerint a kezdőktől a haladókig mindenki talál benne hasznosat.</p>
<p>A téma szerteágazó volta miatt több postot szánok a témának. Az első két részben áttekintést nyújtok a szerkesztőségi rendszer működéséről, elemeiről. A további részekben a felszínesebb bemutató után a legfontosabb elemekkel kapcsolatos ismereteim, tapasztalatom alapján <a href="http://netninja.hu/2010/01/21/a-breaking-cimlaprok/">próbálok gyakorlatias ötleteket, inspirációt adni</a>. Reményeim szerint minden fontosabb témáról külön post lesz, így ami ebben a postban még homályos az idővel részletes leírást kap.</p>
<p><strong>Pre és pro</strong></p>
<p>A CMS alkalmazások kikerülhetetlenek, ha webes fejlesztésekkel foglalkozunk. A fejlesztők általában nagyon gyorsan eljutnak oda, hogy saját CMS-t akarnak írni. A project managerek nagyon gyorsan szembesülnek azzal, hogy a legtöbb problémát a CMS jelenti cégen belül. Az újságírók nagyon hamar megutalják a nehézkes, logikátlan alkalmazást.</p>
<p>Sokszor hallom (általában sárgaöves) fejlesztőktől, hogy miért kell CMS-t írni, ott vannak a jól bevált opensource CMS rendszerek, azokkal bármilyen siteot meglehet csinálni, és még ingyenes is. Barnaövtől felfelé már jól ismertek az okok:</p>
<ul>
<li>megterheltség,</li>
<li>biztonság,</li>
<li>fejleszthetőség.</li>
</ul>
<p>Az ingyenes rendszerek mellé általában legalább olyan képzettségű fejlesztő kell, mintha nulláról fejlesztenénk saját CMS-t. Természetesen lehetséges jól üzemelő, nagy forgalmú siteot készíteni opensource rendszerekkel, de fejlesztés során szem előtt kell  tartani, miért is választottuk azt a CMS-t amit.</p>
<p>Ugyanakkor tény, a php frameworkök egyre jelentősebb szerepet kapnak a fejlesztések során, egyre inkább közeledik az időszak, mikor már megéri a framework alapú fejlesztés nagy megterheltségű rendszerek esetében is.</p>
<p>A legfontosabb indok azonban az online újságírói igények. A siker kulcsa az újságírói munka maximális kiszolgálása. A project sikere azon fog, múlni, mennyire tudjuk felmérni az igényeket és mennyire vagyunk képesek fejleszteni újságírói gondolkodásmóddal. Sok esetben az online újságírók közel digitális analfabéták, a szerveri oldali technológiákhoz (a szakírót nem beleszámítva) alig pár újságíróért. El kell fogadni, meg kell érteni, hogy nem dolguk ismerni a lehetőségeket.</p>
<p>&lt;sarcasm&gt;CMS-t fejleszteni igazán kreatív és kihívásokkal teli feladat. &lt;/sarcasm&gt; A legfontosabb: take it easy. Ha megvan a zen, ne engedjük el.</p>
<h2>CMS vs. szerkesztőségi rendszer</h2>
<p>Az online szerkesztőségek életében a CMS sokszor csak egy szoftver „elnevezése”, amivel weben keresztül viszik fel a cikkeket, híreket a site-ra. Fejlesztőként, project managerként azonban tovább kell gondolkodni. A CMS fejlesztésénél a következő területeken is tervezni kell:</p>
<ul>
<li>Üzemelési környezet</li>
<li>Hardware</li>
<li>Szerkesztőségi work flow</li>
<li>Online sales</li>
<li>SEO</li>
<li>GUI-k</li>
<li>Kimenetek, formátumok</li>
<li>Hírügynökségi területek</li>
<li>Újságírási munkafolyamatok, szokások,      szerkesztőség működés</li>
</ul>
<p>Még egyértelműben, a szerkesztőségi rendszer az alábbi modulokból áll (a teljesség igénye nélkül):</p>
<ul>
<li>CMS ADMINGUI ::content admin,</li>
<li>CMS ADMINGUI ::content pool (news room),</li>
<li>CMS ADMINGUI ::statisztika report,</li>
<li>CMS ADMINGUI ::webmester, moderátor,      traffic/admester,</li>
<li>CMS PUBLICGUI ::user felületek</li>
<li>CMS SERVER::LOGGER</li>
<li>CMS SERVER::CACHE BUILDER</li>
<li>CMS SERVER::OUTPUT API</li>
<li>CMS SERVER::SEARCH INDEXER / CACHE</li>
<li>CMS SERVER::NEWSLETTER / CONTENT PUSHERS</li>
<li>SERVER::SQL</li>
<li>SERVER::LOAD BALANCER</li>
<li>SERVER::BACKUP</li>
<li>SERVER::MAIL</li>
</ul>
<h2>CMS. De hogyan? Az Elmélet</h2>
<p>Az alábbiakban egy multi domain CMS-t veszek példának. Ahogy előbb utóbb mindenből kalapács (vagy szög) lesz, a CMS-ből is multi domain szoftver lesz.</p>
<p>A multi domain CMS lényege, hogy egy engine több, egymástól teljesen függetlenül működö hír siteot szolgál ki, úgy hogy az adatbázis egységes, és a különböző domaineken futó hír siteok újságíróit segíti a közös munkában. Figyelem, ez a koncepció nem azonos a fejlesztőcégek által használt weblap "gyár" CMS-ekkel. A hangsúly a közös munkán, az egységes hírgyártás és a content átjárhatóságán van, nem a gyors fejleszthetőségen.</p>
<h2>Röviden</h2>
<p>A hírsiteok esetén multi domain CMS-k kialakulásáért a hírverseny a felelős. Magyarországon különösen, khm finoman fogalmazva is, necces a hírfogyasztási szokás, a nagyon széles horizontális portálok idővel igyekeznek a jól menő rovatokat vertikális oldalakká alakítani</p>
<p>Ideális esetben a CMS-t ilyenkor a domain vezérli, de gyakori, hogy a CMS engine-t "klónozzák" szerverekre. (Utóbbi egyébként hibás elgondolás abban az esetben, ha az adatbázisok között nincs strukturális kapcsolat, pl. eltérő tag adatbázis, más hiearchiában épített tag csoportok, összerendelhetetlenség.)</p>
<p>A portálosodás hatása, hogy a rovatoldalak általában elhalnak, nagyon minimális user számmal rendelkeznek. A forgalmat siteon belül nehézkes terelni, az aggregátor siteokról érkező traffic nagy átlagban zárja a böngészőt, további cikkeket ritkán olvasnak.  A korábban már említett hírverseny miatt nagyon sok hír eltűnik egy nagyon széles, vertikális (hír)portálon. Ezért sok esetben a rovatokból önálló brand válik, önálló szerkesztőséggel, önálló tartalmi koncepcióval, a széles vertikális site helyett több, vertikális site jön létre, melyre optimális esetben a horizontális gyűjtő siteról érkező userek mellett direkt traffic is létre jön idővel.</p>
<p>A web CMS fejlesztés során meg kell ismerkednünk a tartalom biznisz alapjaival, mindennapi működésével. Nagy általánosságban elmondható, hogy a tartalom biznisz a sok látogató = sok tartalom képlet alapján működik. Ez számszerűsítve azt jelenti, hogy egy nagy forgalmú hír site képes százas nagyságrendben cikkeket előállítani naponta.</p>
<p>A multi domain CMS lényege az azonos adatbázis (struktúra), mely átjárhatóságot biztosít a tartalmak között. A tartalmak cross linkelése mellett olyan "láthatatlan" funkcióval is felruházható, mint a közös news room, ki, milyen témával dolgozik, hol melyik téma forog. A news room kollaborációs funkció, melynek segítségével a tartalmi piramisok, időzített körbe linkelések alakíthatóak ki, külön megbeszélések nélkül. A vertikális szerkesztőség önálló munkája így egy - egy téma esetén napokig, hetekig a felszínen tud tartani jól pörgő anyagokat.</p>
<p>Példa: Egy cikk megjelenhet a hírportálon. Megjelenhet a tematikus site-on. Mindkét megjelenési helyen más címkéket kaphat. Licenszelési okok miatt a kisebb forgalmú oldalon több képet, galériát kaphat. Megjelenhet más nyelven. Más szöveget kaphat. Megjelenhet más platformon pl. print. Eladható hírügynökségi tartalomként. A későbbiek során, a szerkesztőségi felületen listázható a cikk összes verziója, megjelenési formái, helyei.</p>
<h2>Hosszabban</h2>
<p>Az újságírók ideje drága. De nem annyira drága, mint az információ. Nem meglepő módon a világban keletkező hírek száma véges. A mai magyar média piacon talán a legnagyobb pénz a hírcsinálásban van. Az álhír piac dübörög, ha nincs hír, akkor csinálni kell, különben nincs mit eladni.</p>
<p>Egy jól szervezett szerkesztőségi rendszerben nincs elveszett információ, a jól megírt cikkek körbe mennek a networkön, a lehető legtöbb olvasót kell elérnie, az a bizonyos bőr sokszor lesz lehúzva.  A digitális média, bár nem beszélünk róla, még mindig erős versenyben van a print és elektronikus médiával. A print médiát az online már megverte nagyon sok területen, de a legfontosabban, a bevételekben még csúnyán alulmarad. (A printet egyébként a saját területén tudná megverni egy online cég, a délutáni "sávban" szabadon van az ingyenes, metropol jellegű újságok piaca.) Az elektronikus média pedig nagyon mélyen van beégve a hírfogyasztási szokásokba, jó pár év kellene mire megverhetnénk, de ez idő alatt valószínűleg a két platform nagyon közel fog egymáshoz járni, más jellegű verseny fog kialakulni.</p>
<p>A magyar piacon is létező üzleti modell, hogy külföldi (társ)oldalakon keletkezett cikkeket fordítanak magyarra. Ez a tartalom refactoring jelenleg az egyik legjobb megoldás a "költséghatékony" tartalom előállításra. A refactoring  (becézve hírgyár) a gyakorlatban egy információ feldolgozása, több stílusban, több platformra. Az MTI ebben profi, az áltála gyártott hírek (bocs) gyakorlatilag platform függetlenek.</p>
<p>A célunk tehát a hír refactoring maximalizálása. Az újra "megírt" cikkeket a lehető legtöbb felületen meg kell jelenítenünk és a CMS rendszerünknek tudnia kell, mi, hogyan, mikor jelent meg és ezekkel az adatokkal, információkkal támogatni kell a főszerk, szerkesztők, újságírók munkáját.</p>
<p><strong>News room, info queue</strong></p>
<p>Az újságírás meglehetősen időigényes dolog. Az újságíró kollegák munkáját egy jól megírt news room modul nagymértékben segítheti. A news room modul feladat a témamutatás, a felhasználható infók és cikkek áttekintése.</p>
<p>Ideális esetben a news room nem csak a belső anyagokat mutatja, de trendeket, ügynökségi anyagokat, RSS forrásokat is beránt. Egyre fontosabbá válik a real-time események figyelése, nyomkövetése, a hype hullámok elsőkénti meglovagolása.</p>
<p>A news room tehát minden keletkező hírt, tartalmat megjelenít. Közös munka felületet ad az újságíróknak, figyeli a konkurencia híreit, integrálja a külső információforrásokat, trendeket figyel.</p>
<h2>A szerkesztőségi rendszer. A gyakorlat</h2>
<p>Az igények 90%-a fejlesztés közben fog érkezni. Akkor, mikor már látható, hogyan is működik a szoftver. A project ilyenkor nagyon közel állt a végtelen loophoz, tapasztalatom szerint érdemes hetes ciklusokkal "kifárasztani" az ötletbörzét és ez idő alatt a lehető legtöbb kívánságot megvalósítani, még akkor is, ha életképtelen az ötlet. Az idő előre haladtával szépen letisztul minden funkció. Csak(!) idővel és idegekkel kell bírni.</p>
<p>A megterheltségi mutatók és hardware tervezésekor a skálázhatóság, hirtelen peakek jelentik a legnagyobb problémát. A CMS fejlesztésekor a kódnak, a cache rendszernek és az sql enginenek minimum rendundásnak kell lennie és lehetőség szerint maximalizáni kell a cache használatot. De. A hírnek realtime meg kell jelennie minden frontenden egy időben. Ez általában fájl cachet jelent, kisebb nagyobb dinamikus elemekkel tűzdelt statikus html fájl.</p>
<p>Template rendszereket, opcode-t, sql cache megoldásokat kell alkalmazni a tartalom megjelenítéshez. Logikailag érdemes különválasztani a tartalom megjelenítést a user funkcióktól, azaz a tartalom megjelenítés prioros, ha választani kell, akkor a user belépés, testre szabási funkciók kikapcsolása kisebb veszteség, mint az üres vagy timeoutolo oldal.</p>
<p>Fizikálisan mindenképp külön működik a szerkesztőség, a frontendek, meghalhatnak, az admin felület nem. A stabilitás kulcskérdés, az egy-két frontendes, fél rack szekrényt elfoglaló megoldások mellett ismert és széles körben használt a sok, kicsi noname pc alapú szerverfarmok és valamilyen load balancer (dns, cél hardware, szoftveres) megoldással vitt rendszer. Ízlések, pofonok, pénztárca.</p>
<h2>A lényeg: az adatbázis</h2>
<p>A db fizikai megvalósítására mindenki rendelkezik saját, jól bevált módszerrel, technológiával.</p>
<p>Az alábbiakban az adatstruktúra darabolását mutatom be, ami ugyan sok programozói irányelvnek mond ellent, de a gyakorlatban több, tőlem független projectben bevált.</p>
<p>Az adatstruktúra darabolás nem keverendő össze a db sharding-gal. Előbbi esetében a priorizált adatoknak adunk dedikált vasat, utóbbiban az adatokat daraboljuk ideális méretűre.</p>
<p>Funkció szintű SQL adatbázis bontásra példa, adat priorizálva:</p>
<ul>
<li>content,</li>
<li>design,</li>
<li>ad, banner, reklámok,</li>
<li>archívum (keresés),</li>
<li>userek,</li>
<li>log (user, ad),</li>
<li>stat (user, ad).</li>
</ul>
<p>A túlságosan darabolt adat struktúra ugyanakkor más jellegű problémákat hozhat, melyeket az egyre több eleme folyamatba vonása generál. A darabolás előnye a skálázhatóság, a funkció szintű adatbázis "sharding". Hátránya a több hiba lehetőség, további hátrány lehet a kód fejleszthetőség és kód rugalmasság csökkenése, kódlassulás.</p>
<p>A darabolás meglehetősen egyszerű okokra vezethető vissza. Az olvasást igénylő táblákról leválasztott írást igénylő táblák fizikálisan más RDBM kapnak, eltérően optimalizált konfiggal. Ha jó arcok a rendszergazdák, a hardware is tükrözi az RDBM funkcióját.</p>
<p>Az adatbázisok esetén rengeteg eszköz áll a rendelkezésünkre. Amiket nyugodt szívvel ajánlok:</p>
<ul>
<li>connection pool managerek, load balancerek</li>
<li>tárolt eljárások, triggerek alkalmazása,</li>
<li>adatbázis klónozás, master, slave megoldások,</li>
<li>tablespace alapú optimalizálás (gyors tábláknak      kisebb, de gyorsabb disk / ssd terület megadása).</li>
</ul>
<p>Amit nem ajánlok, és nem is próbáltam:</p>
<ul>
<li>egy darab index.php fájl</li>
<li>egy nagy adatbázis a contentnek, design elemeknek      stb stb.</li>
</ul>
<p>Összegezve: a CMS lelke az adatbázis. A fizikális adatstruktúra elválasztható a logikai struktúrától. Az adatbázis és az RDBM optimalizálható írásra, olvasásra. <span style="text-decoration: line-through">Spice must flow.</span> Az admin felületnek minden körülmények között élnie kell, inkább legyen duplázódás az adatokban, mint üresjárat a szerkesztőségbe. Adatot nem veszíthetünk. A RDBM megterheltség skálázható</p>
<h2>Ninjaken::Cache</h2>
<p>Cache alatt sok mindent értünk, a lehető legtöbb adatot, fájlt szeretnénk a klienssel cacheltetni, a lehető legtöbb tartalmi és design adatot szeretnénk memória és fájl cacheban tartani.</p>
<p>A cache tervezésekor a rugalmasságot érdemes szem előtt tartanunk. A cache építés időigényes folyamat, lehetőség szerint saját vezérlésű eljárással építendő, a felhasználói requesttel indított cachelést csak biztonsági folyamatként érdemes a kódban tartani.</p>
<p>A legjobb megoldás folyamatos cache ellenőrzés és cache replace, az adat bemeneti pontoknál, tipikusan admin felület, triggereljünk cache modósítást, lehetőség szerint a cacheből nyert adatok bővítsük és ne a teljes cachet építsük újra.</p>
<p>A cache folyamatokat érdemes logolni és a missed cahce hit-ekről értesítést küldetni a fejlesztőknek, üzemeltetőknek.</p>
<p>Végül: sose bízz a cacheban. Vagy ott van, vagy nincs amit keresel. Ha ott van, örülünk, ha nincs irány az adatforrás.</p>
<h2>Admin GUI</h2>
<p>Bár szakmailag nem a legnagyobb kihívás, mégis a CMS admin felületével fogjuk aratni a leghangosabb sikereket. Ismételten le kell szögezni. Ebben a projectben az újságíró a király. Az admin felület ennek megfelelően a legidétlenebb funkciókat kaphatja. Ugyanakkor a "statikus" funkciókat érdemes "dinamikussá" tenni. Ilyen magic funkció az automatamentés, a kapcsolódó írások mutatása, a tag ajánlás, a word "kompatibilitás", az előre-hátra lépegetés hibaüzenet nélkül, az on-the-fly preview, a drag and drop cikk elem (kép, videó, keretes) mozgatás, a session független user auth (egy-két évig aktív session), és ami a legfontosabb: böngésző függetlenség. Talán az IE5 nem fog szerepelni, de azon kívül szinte bármi felbukkanhat. Ez persze nem azt jelenti, hogy minden böngésző alatt ugyan annak kell megjelennie, de minden böngészővel működnie kell a cikk felvitelnek. Technikai okok miatt nem állhat újságírói munka.</p>
<p>Gyakori, hogy az admin gumi valamilyen erőszak eredményeképpen megkapja a site designt. Az admin felületeket nyugodtan kezeljük webappként. Ennek megfelelően gazdagon alkalmazhatunk website idegen megoldásokat. Lehetőség szerint gondoljunk a "modemes" újságírókra, akik terepről, mobilneten keresztül próbálkoznak. Jó irány, ha egy heavy light, minimál design fogadja őket és ha akarnak váltanak a javascripttel tuningolt csilivili felületre. Ha pedig mindez meg eszköz (felbontás) függő designnal is megcsináljuk, jogosan érezhetjük magunkat fekete övesnek. Hint: az interneten a gyorsaság az elsődleges.</p>
<p>Összegezve: az admin legyen egyszerű, de az egyszerűség ne korlátozza a funkcionalitást. A sok funkció közül keveset fog használni az újságíró, ha nem vezetjük a felülettel. Az újságírók általában a MS Wordön edukálódtak. Az office shortcutok közül a ctrl+s beépítése a felületbe sokat segíthet az újságíró lelki állapotán, még akkor is, folyamatosan mentjük a munkáját. Az újságíró bárhonnan, bármivel belogolhat az adminra cikkírás okán.</p>
<p>A quest akkor sikeres, ha ninjaként minden technikai nehézségtől megóvjuk újságíróinkat és képesek vagyunk több tízezernyi cikket összelinkelni különböző sitekon. Akár utólag is, az új cikket linkelni a régebbi cikkben.<br />
A következő részek tartalmából: folyamatos fejlesztés, content delivery network, ajax, user gui, site kereső optimalizálás, mail server optimalizálás, biztonságtechnikai kontrollok, üzemelési környezet optimalizáció és még sok minden más.</p>
<p class="author-link">Google+ <a href="http://netninja.hu/author/syck/" rel="author">syck</a></p>]]></content:encoded>
			<wfw:commentRss>http://netninja.hu/2010/02/17/a-szerkesztosegi-rendszer-bevezeto-elso-resz-multi-domain-cms/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk: basic (Feed is rejected)
Page Caching using memcached
Database Caching 4/8 queries in 0.001 seconds using memcached
Object Caching 274/274 objects using memcached

Served from: netninja.hu @ 2012-02-10 16:42:57 -->
