Posts Tagged: web

2009
03
júl

Projekt elnevezési irányelvek


Kutakodásom során belebotlottam ebbe az ősrégi wiki bejegyzésbe és késztetést éreztem, hogy magyarítsam amennyire tőlem telik, hogy aztán visszaolvassam újra és újra, hogy tanuljak belőle. Mert lehet belőle tanulni még ha rég lerágott csontról van is szó.

Legyen használható és rövid. A hosszú neveket – mint például a “Gutenblog” – a közösség nagy valószínűséggel rövidíteni fogja (“GB”) ami így megtéveszthető lehet. Az emberek lusták, az idő pénz, a sávszélesség drága és hasonlók… A rövidség a szótagokra és a karakterekre is vonatkozik: maximum két szótag. Könnyen és helyesen leírhatónek kell lennie, kérdezz csak meg bárkit akinek a domain neve provokálja az elírásokat.

Kerüld a betűszavakat. Ezek már idejétmúltak. Isten hozott a 21. században. Figyelmeztető jelnek kell lennie, hogy milyen zavar van az RSS és a W3C betűszógyártó-motorja által készített egyéb nevek körül.

Legyen egyedi és megjegyezhető. Előnyei: kevesebb névütközés más projektekkel; kevesebb zavar a jelentéssel kapcsolatban amiben használják; azonnal felismerhető bármilyen környezetben azok számára akik már ismerik; elválasztja a nevet bármilyen meglévő címkétől vagy jelentéstől amire az emberek felfigyelnek; könnyeb a népszerűséget mérni a keresőmotorokkal. Az elírt szavak érdekesek lehetnek (pl. Wyre) csakúgy mint a kitalált szavak (pl. Panovox).

Legyen általános. Az olyan elemeket mint például a “blog” kerülni kell, mert az szűkíti az értelmezési kört. Ugyanakkor ez ne riasszon el attól, hogy más szinonímára alapozzál, csak bizonyosodj meg róla, hogy ne legyen túl behatárolt.

Legyen multikulturális. A névnek pozitív csengésűnek kell lennie a legtöbb nyelven. Emlékezz csak a Chevy Nova autómárka különös történetére, a névre amely egyszerűen nem működött Spanyolországban (ami persze csak egy városi legenda, ugyanakkor tanulságos mese).

Törvényi erő. Mi a követelmény a domain névvel kapcsolatban, ha van ilyen egyáltalán? A .com vagy .org elengedhetetlen? Sok megosztott név található a különböző termékek és szolgáltatások között, gondolj csak a Maverickre vagy az Apple-re. Mások egyedi és általában kitalált nevet használnak, amely vagy védelmet nyújt az eltérő használattal szemben, mint például a Kodak, vagy elvesznek az általánosításban, mint az aspirin és a formica. Az uspto.gov-on lehet keresni a védjegyekre.

Az ügyes, retrós, érdekes, mézédes és megdöbbentő nevek a legjobbak. Kerüld az gyakorta elcsépelt és túlszajkózott szavakat, úgy mint “meta”, “web”, “simple”, “open”, “new”. Fordulj a görög etimológiához, érdekes betűkombinációkhoz és hasonlókhoz.

Tiszta kiejtés. Minél kevésbé félreérthető a szó kiejtése annál kevesebb félreértés származik a verbális kommunikáció során (bár, talán a nehezebb kiejtés elsősegíti a kiemelkedést a tömegből).

Használható legyen főnévként és igeként. Ha megnézed a múltbéli példákat, az olyan szavak mint “Hoover” és “Google” hamar igévé váltak ahogy a népszerűségük nőtt. Bár a Google lépéseket tesz, hogy a védjegyüket ne lehessen igeként használni, ez nem fog sikerülni. A projektnek el kell fogadnia ha igévé vagy általánossá válik a neve.

2009
23
feb

Elindultunk a bétával: Backlog.hu


Backlog.hu - Időnyilvántartás, feladatkezelés és számlázás

Egy hosszú tervezési és fejlesztési folyamatot követően, a mai napon elindult a Backlog.hu bétája, ami egy online idő- és feladatnyilvántartó valamint számlázó szolgáltatás. Az időnyilvántartó szót használom a “time tracker” funkcionalitás megjelölésére, mert egyszerűen nem találtam rá jobb magyar megfelelőt. A kezdetek-kezdetén GtdDesk kódnév alatt futott a projekt, de valószínűleg nem lett volna szerencsés beskatulyázni a GTD címke alá így a finisben jött az átnevezés. Az új domain még olyannyira friss és ropogós, hogy épp most száradnak a bitek a domain DNS szerverének rekordjain.

Mint ahogyan azt alkalmazás blogjában is írtam rengeteg munka van a projekt mögött és hatalmas megkönnyebbülés, hogy végre ebbe a stádiumba érkezett a szolgáltatás. Nagyon-nagyon sok tennivaló van még hátra, hiszen igazi prémium szintű szolgáltatást kívánunk nyújtani minden regisztráló felhasználónknak. Rengeteg tervünk van melyeket szeretnénk még a szolgáltatásba integrálni, de az alapszolgáltatások továbbfejlesztését is folyamatosan végezzük, így hamarosan egy komplett, teljesen integrált, online szolgáltatáscsomaggal fogjuk megnyitni a Backlog alkalmazás kapuit.

Jelenleg meghívásos alapon történik a regisztráció, de amint lehetséges és lehullik a béta címke a szolgáltatásról, megnyílik a szabad regisztráció lehetősége.

2008
20
feb

Asztalhoz ragadva


Ezer felől hallom, hogy egy trendi tech geek GTD eszköze a Gmail és kizárólag a Gmail. Nincs Mail.app, sem Thunderbird de még csak iCal sem. Egy szimpla böngésző és kész. Már többször is próbálkoztam hasonlóval, mindeddig hiába.

Nálam a levelezés kondicionálódott valamely – platformtól függő – levelezőklienssel, amelytől egyszerűen nem vagyok képes megválni! Windowson és Linuxon Thunderbird, Mac-en Mail.app. Gmail-ről, IMAP-en keresztül szinkronizálom le a leveleket. Ha minden kötél szakad, akkor böngészőből még mindig bármikor és bárhol rá tudok kukkantani a fiókomra.

Ami nagyon megfog a böngészőből való levelezésben, hogy egy helyen el tudom érni a levelezésemet, a naptáramat és a naptárba integrált todo listámat is. Nem kell görcsölni szinkronizálással. Ott van minden és kész. De mikor oda kerülök, hogy levelet kell írnom és a böngésző bambul rám eközben, akkor elbizonytalanodok. Nem megy. Fapados és ingerszegény. Egy fél napom ráment, hogy erre megint rájöjjek :-(

2007
28
dec

Ajax és a Zend Framework


Szerettem volna egy egyszerű, minimalista kis alkalmazást készíteni a Zend Framework segítségével, Ajax-os hívások kiszolgálására, de nem találtam egyetlen példát sem ami valóban az egyszerűséget és a lényegi működést lett volna hivatott bemutatni. Egészen addig amíg bele nem botlottam William Graham Ajax 101: A Simple Example of Using Ajax with the Zend Framework című írásába. Ezen a példán dolgozgattam, gyurmázgattam egy kicsit az alábbi eredménnyel:

Tényleg csak a lényeg van benne, semmi extra. A kliens oldalon begépelt szöveget megfordítja vagy változatlanul hagyja szerver oldalon, persze oldal újratöltés nélkül. Persze az érdemi munkát a Prototype library végzi, de a Zend_Json osztály is besegít a munkába. A lényegi részek az alábbiak:

index.php

<?php
error_reporting(E_ALL|E_STRICT);
date_default_timezone_set('Europe/Budapest');
 
set_include_path('.' . PATH_SEPARATOR . './library'
	. PATH_SEPARATOR . './application/models/'
	. PATH_SEPARATOR . get_include_path());
 
include "Zend/Loader.php";
 
Zend_Loader::loadClass('Zend_Controller_Front');
 
$frontController = Zend_Controller_Front::getInstance();
$frontController->throwExceptions(true);
$frontController->setControllerDirectory('./application/controllers');
 
$frontController->dispatch();

IndexController.php

<?php
 
class IndexController extends Zend_Controller_Action
{
	function init() {
		$this->view->baseUrl = $this->_request->getBaseUrl();
		Zend_Loader::loadClass('Zend_Debug');
		Zend_Loader::loadClass('Zend_Json');
	}
 
	function indexAction() {
		$this->view->title = "Zend Ajax 101";
	}
 
	function getDataAction() {
		$this->_helper->viewRenderer->setNoRender();
		$state = $this->_request->getParam('state');
		$data = Zend_Json::decode($state);
		sleep(1);
 
		switch ($data['func']) {
			case 'reverse':
				echo "The text reversed: " . strrev($data['intext']) . "!!";
				break;
			default:
				echo "The text received: " . $data['intext'] . "!!";
		}
	}
}

index.phtml

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
	<meta http-equiv="Content-type" content="text/html; charset=utf-8">
	<title><?php echo $this->title; ?></title>
	<link rel="stylesheet" href="public/styles/boxy.css" type="text/css" media="screen" title="no title" charset="utf-8">
	<script type="text/javascript" src="public/scripts/prototype.js"></script>
	<script type="text/javascript" src="public/scripts/ajax_funcs.js"></script>
</head>
<body>
	<p>
		<input type="text" name="intext" value="" id="intext" />
		<input type="button" name="buttonReverse" value="Reverse" id="buttonReverse" OnClick="callAjax('intext', 'reverse')" />
		<input type="button" name="buttonNormal" value="Normal" id="buttonNormal" OnClick="callAjax('intext')" />
	</p>
	<img src="public/images/loader.gif" id="update" style="display: none"/>
	<span id="hello">boring pre-Ajax-call text ...</span>
</body>
</html>

ajax_funcs.js

function callAjax(s, method)
{
	if (method===undefined) method='';
	if (method == 'reverse')
		var data = {func: 'reverse', intext: $F(s)};
	else
		var data = {func: '', intext: $F(s)};
	var myAjax = new Ajax.Updater('hello', 'index/getData',
		{ 
			method: 'post', 
			parameters: {state: Object.toJSON(data)},
			onCreate: function(transport) {
				$('update').show();
				$('hello').innerHTML = "Loading...";
			},
			onComplete: function(transport) {
				$('update').hide();
			} 
		}
	);
}
2007
18
okt

Drupal elérési út


Mindenek előtt szeretném pontosítani a félreértések elkerülése végett, hogy elérési út alatt a path-t – vagyis az url-ben a host neve után megadott útvonalat – értem (Clean URL használata mellett). Készítek egy Dupal motorral hajtott honlapot. A template a tartalomnak megfelelő módon változik, vagyis a site egyes aloldalai és a főoldal eltérő layouttal rendelkezik a standard oldalakhoz képest. Az eltérő oldalakon belül azonban vannak azonosak, tehát egyes oldalak A típusú (standard) layoutot használnak, míg más oldalak B típusút. A főoldal pedig egy C típusú. A Drupal lehetőséget biztosít a megfelelő névkonvenciók alkalmazásával, hogy az egyes oldalak más template-et használjanak. Például a page-front.tpl.php a főoldalhoz, a page-node-sorszam.tpl.php pedig a sorszám számú node-hoz biztosítja a megfelelő sablont. (Persze csak ha léteznek ezek az állományok).

Mivel a 4-es és 8-as node-jaim ugyanabból a B típusú oldalsablonból építkeznek ezért nem szerettem volna ismételni a page-node-8.tpl.php állományban lévő sablont a page-node-4.tpl.php-ban is. A legkézenfekvőbb megoldásnak tűnt, hogy készítek egy a-template.tpl.php és egy b-template.tpl.php nevű sablont, majd a megfelelő page-node template-ben egy include() segítségével hivatkozom be a megfelelő állományt. A fentiekre visszautalva a page-node sablonokba a következő tartalom kerülhetett volna:

include('b-template.tpl.php');

Csavartam azonban egyet a dolgon (többnyelvű site-ról lévén szó nem akartam elveszni a node azonosítók rengetegében), és a következő koncepció szerint építettem fel az oldalsablonokat. Van egy page-node.tpl.php controllerem ami ugye minden egyes node típusú tartalom esetén betöltődik. Szándékosan nem sablont írtam, mert ebben az esetben ez az állomány nem sablonként, hanem vezérlőként fog funkcionálni, mégpedig oly módon, hogy az oldal elérési útjának megfelelő sablont tölti be. Tehát a www.example.com/sample1 esetén az A, míg a www.example.com/sample2 és www.example.com/sample3 esetén a B sablonokkal jeleníti meg az oldalt, valahogy így:

<?php 
switch ($node->path) {
	case "sample2":
	case "sample3":
		include_once('b-template.tpl.php');
		break;
	case "frontpage":
		include_once('c-template.tpl.php');
		break;	
	default:
		include_once('a-template.tpl.php');
		break;
}
?>

A dolog szépséghibája, hogy a $node->path csak hitelesített felhasználók esetén ad vissza értéket, anonim látogatók esetén a $node nem is tartalmaz path elemet. Az alábbi trükköt alkalmaztam:

<?php 
$nid = arg(1);
$path = drupal_get_path_alias("node/$nid");
 
switch ($path) {
	case "sample2":
	case "sample3":
		include_once('b-template.tpl.php');
		break;
	case "frontpage":
		include_once('c-template.tpl.php');
		break;	
	default:
		include_once('a-template.tpl.php');
		break;
}
?>

A drupal_get_path_alias() függvény és a node azonosító [arg(1)] segítségével szerencsére kinyerhető az adott oldal elérési útja és a template megfelelően működik. A trükk eredete: Path / Clean URLs not showing up – anonymous users don’t get a path.