Etiqueta: ‘arcadina’

Objetivos 2010

31-12-2009 | Categoría: Personal

Hoy último día del año 2009 creo que corresponde repasar los objetivos que me marqué para este año que termina y establecerlos para el 2010.

Objetivos 2009



  1. Mantener la forma física. Me propuse mantenerme por debajo de los 100Kg. y lo he conseguido por los pelos. Voy dos días a la semana ha hacer spinning, hago footing menos de lo que me gustaría. Pero me he dejado demasiado una dieta equilibrada. Nota: 7.

  2. Traducir un producto. No lo hemos conseguido. Se empezó a preparar el software de LaGaleríaDigital para tenerlo en multidioma, pero nos dimos cuenta que el propio producto no estaba en el status adecuado para lanzarlo internacionalmente, y decidimos trabajar intensamente para mejorarlo y corregir bugs antes de dar el paso este. Nota: 2

  3. Aprender a decir NO. Esto lo he conseguido a medias. Me han propuesto varias cosas, las he analizado y he dicho que no a casi todas. Pero a nivel personal me he “complicado” un poco más la vida, ahora soy el presidente de la asociación de madres y padres del colegio de mis hijos. Estoy ahí por decisión propia (y sobre todo porque los socios me votaron), feliz y contento de la oportunidad que me han ofrecido, pero muy consciente de que me va a obligar a un esfuerzo extra. Nota: 8

  4. Continuar en la mejora del proceso interno de producción. No hemos podido mejorar ostensiblemente, pero si se ha arraigado el uso de scrum para la gestión del proceso de desarrollo. Hemos adoptado el uso de subversion para todo. Hemos desarrollado, aún lo estamos ultimando, un nuevo CMS interno para las webs que hacemos, que nos permitirá hacer mejores webs al poder dedicar más tiempo al diseño y menos a la codificación. Nota: 8

  5. Buscar inversores. Félix, mi socio, se ha movido mucho en este tema. Hemos tenido contactos, hemos avanzado, aún no se ha fraguado nada, pero hay buenas perspectivas. Nota: 9


En el post donde indicaba los objetivos para el 2009 comentaba que haría una revisión para junio, no lo hice, por lo tanto un 0 en ese punto.

Resumiendo una nota media de 5,6 un aprobado justito… sin dudas he de mejorar.

Objetivos 2010. Personales.



  1. Mejorar condición física. He de perder unos 8 kg. y conseguir mantenerlos. Para ello voy a volver a hacer una dieta más equilibrada, y además de spinning quiero buscar el hueco en mi apretado horario para hacer body-pump u otra actividad anaeróbica.

  2. Hacer un viaje con la familia, y una escapada con la pareja. Este año 2009 no ha sido posible hacer ningún viaje, por múltiples motivos. En el 2010 quiero hacer dos viajes como mínimo; uno con Mar, mi esposa, un fin de semana, donde sea, me da igual, pero los dos solos. Y otro viaje con todos.

  3. No embarcarme en nada mas. Es una continuación del “aprender a decir NO”. Ya tengo suficientes ocupaciones.


Objetivos 2010. Empresa.



  1. Encontrar inversión. Este año que llega ha de ser el año en que Arcadina de el gran salto, el año en que empecemos a crecer a un ritmo importante. Para ello tenemos claro que necesitamos inversión, que la buscaremos tanto externa como internamente.

  2. Focalizarnos, más. Durante el 2009 se tomaron decisiones muy importantes. Cerramos “latiendadelfotografo.com”, también “ftpprivado.com”. Tenemos intención de seguir en la línea de focalizarnos más en aquellos productos y servicios en los que realmente podamos ser competitivos y fuertes.

  3. Aumentar beneficios. A pesar de la crisis, el 2009 ha sido muy bueno, pero aún así no nos conformamos, somos más ambiciosos, queremos multiplicar beneficios por un factor importante. Para ello queremos mantener nuestra plantilla, aumentarla en lo justo, pero incrementar notablemente las suscripciones a nuestros servicios, tenemos un plan comercial que estamos a punto de poner en marcha, y con ello aumentar las ganancias.


Esta vez no quiero pillarme los dedos, si puedo revisaré públicamente estos objetivos, si no, pues a final del 2010.

Desde este humilde blog os deseo a todos un año 2010 cargado de felicidad, amistad, amor y si viene con algo más de riqueza para todos no lo rechazaremos.

Tratamiento del AJAX en un solo fichero

18-08-2009 | Categoría: Desarrollo

Últimamente estoy desarrollando sobre todo con PHP+JavaScript (jQuery). En un proyecto interno de Arcadina, que hace un uso intensivo del AJAX, decidí probar un planteamiento diferente del utilizado hasta ahora.

Normalmente las llamadas a la parte AJAX del servidor se hacen a diferentes scripts PHP en función de lo que deseamos obtener (query) o guardar (submit). Por ejemplo, si estamos tratando una lista de clientes podemos llamar a get_cliente.php para solicitar los datos de un cliente pasando su identificador, podemos llamar a delete_cliente.php para eliminarlo o a save_cliente.php para guardar cambios en la ficha, etc. (tengo la manía de utilizar spanglish en el nombre de funciones, procedimientos, etc.). Ejemplo de llamada según esté método:

?Descargar form1.php
1
2
3
4
5
<form name="ejemplo1" action="/api/save_cliente.php" method="post">
<input type="hidden" name="id" value="<?= $cliente->id ?>">
Nombre: <input type="text" name="nombre" value="<?= $cliente->nombre ?>"><br/>
EMail: <input type="text" name="email" value="<?= $cliente->email ?>"><br/>
</form>

Según el proyecto va avanzando nos podemos encontrar con decenas de scripts: get_<em>loquesea</em>, delete_<em>loquesea</em>.... En cada uno de ellos añadir el código de validación, los includes, etc. Se me ocurrió centralizarlo en dos ficheros ajaxsubmit.php y ajaxquery.php, y utilizar un parametro para indicar la acción a realizar. Ejemplo de un formulario utilizando este sistema:

?Descargar form2.php
1
2
3
4
5
6
<form name="ejemplo2" action="/api/ajaxsubmit.php" method="post">
<input type="hidden" name="ajaxsubmit" value="save_cliente">
<input type="hidden" name="id" value="<?= $cliente->id ?>">
Nombre: <input type="text" name="nombre" value="<?= $cliente->nombre ?>"><br/>
EMail: <input type="text" name="email" value="<?= $cliente->email ?>"><br/>
</form>

Como se ve tampoco es que varíe mucho en la parte que se envía al navegador, se añade un nuevo campo oculto “ajaxsubmit” que indica la acción que queremos realizar. Veamos el ajaxsubmit.php:

?Descargar ajaxsubmit.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
<?php
 
// Incluimos código mínimo de autenticación y librerías
include('includes.inc.php');
 
// Si no está logeado el usuario, devolvemos error
if (!isset($usuario_login) || ($usuario_login == '')) {
 
	$respuesta['resultado'] = 'nok';
	$respuesta['mensaje'] = 'Error: primero debe identificarse';
 
} else {
 
	$respuesta['resultado'] = 'nok';
	$respuesta['mensaje'] = 'Error no identificado';
 
	$ajaxsubmit = $_POST['ajaxsubmit'];
 
	// "AS_" viene de AjaxSubmit ... ;)	
	$funcion = 'AS_' . $ajaxsubmit;
	// Comprobamos que tenemos una función con ese nombre
	if (function_exists($funcion)) {
		$funcion(); // Llamamos a la función AS_ que indique el ajaxsubmit
	} else {
		$respuesta['resultado'] = 'nok';
		if ($ajaxsubmit == '') {
			$respuesta['mensaje'] = 'No se ha indicado "ajaxsubmit"';
		} else {
			$respuesta['mensaje'] = 'AjaxSubmit: orden "' . $ajaxsubmit . '" no reconocida.';
		}		
	}
 
}
 
// Si el resultado es NOK registramos en el log de errores
if ($respuesta['resultado'] == 'nok') {
	error_log('*** AJAXSUBMIT - error - ' . $respuesta['mensaje']);
}
 
// ---------------------------------------------------------------------------------------
// Devolvemos respuesta en formato JSON
$json = new Services_JSON;
echo $json->encode($respuesta);
 
exit;
 
// =======================================================================================
// Procesos de guardar, eliminar, actualizar, etc...
// =======================================================================================
 
function AS_save_cfg() {
 
	global $respuesta;
	$cfg = array();
 
	foreach($_POST as $clave => $valor) {
		// Comprobar si $clave empieza por 'cfg_'
		if (ereg('^cfg_', $clave)) {
			$k = ereg_replace("^cfg_", "", $clave);
			$cfg[$k] = $valor;
		}
	}
	$errormsg = SaveConfig($cfg);
	if ($errormsg == 'ok') {
		$respuesta['resultado'] = 'ok';
		$respuesta['mensaje'] = 'Configuración guardada';
	} else {
		$respuesta['resultado'] = 'nok';
		$respuesta['mensaje'] = $errormsg;
	}
 
}
 
function AS_save_cliente() {
 
	global $respuesta;
 
	// Código simplificado para el ejemplo: se debería
	// añadir validación y protección contra SQL injection
	$cliente = new Cliente($_POST['id']);
	$cliente->nombre = $_POST['nombre'];
	$cliente->email = $_POST['email'];
 
	$errormsg = $cliente->Save();
	if ($errormsg == 'ok') {
		$respuesta['resultado'] = 'ok';
		$respuesta['mensaje'] = 'Cliente guardado';
	} else {
		$respuesta['resultado'] = 'nok';
		$respuesta['mensaje'] = $errormsg;
	}
}
 
?>

La “gracia” del código está en ésta parte:

19
20
21
22
23
24
25
	$ajaxsubmit = $_POST['ajaxsubmit'];
 
	// "AS_" viene de AjaxSubmit ... ;)	
	$funcion = 'AS_' . $ajaxsubmit;
	// Comprobamos que tenemos una función con ese nombre
	if (function_exists($funcion)) {
		$funcion(); // Llamamos a la función AS_ que indique el ajaxsubmit

Lo que se envia en la variable “ajaxsubmit” es el nombre de la función a llamar, pero la precedemos de “AS_” para evitar conflictos con otros nombres de funciones. Entonces gracias a la magia de PHP, porque es un lenguaje de script, aprovechamos la variable $funcion para realizar una llamada a una funcion: $funcion()

¿Qué ventajas tiene este sistema? Tenerlo centralizado, de esa forma, añadir una capa de autenticación o variar el formato de salida de JSON a XML, por ejemplo, es mucho más sencillo. Evidentemente si alguna función es compleja se puede separar en un fichero aparte y hacer el correspondiente include, que además lo recomiendo.

Para facilitar la labor de serializar los inputs de un formulario y enviarlo por ajax estoy utilizando el plugin ajaxForm para jQuery.

LaGaleríaDigital: nueva versión

12-03-2009 | Categoría: Empresa

Ya hace unos días que actualizamos nuestro producto LaGaleríaDigital, y por unas cosas u otras no había escrito del asunto.

Nueva versión de LaGaleriaDigital

La Galería Digital es un servicio orientado a fotógrafos para que puedan mostrar fotos, vender y que los clientes las seleccionen. Hay muchos sistemas de galerías de fotos, pero el nuestro tiene unas particularidades: cada fotógrafo tiene su propio subdominio “lentecb.lagaleriadigital.com”, puede tener álbumes públicos y privados que sólo podrá acceder el usuario que se indique. Se puede personalizar mucho, y todavía se podrá mas próximamente. Por ejemplo se puede poner un slideshow en la portada, con las fotos que se quieran o, como en este ejemplo, unas ofertas o promociones:

Muestra y venta de fotos. Slideshow en portada.

El fotógrafo cobra directamente la venta de fotos, Arcadina no interviene para nada en ese proceso, nosotros alquilamos el servicio y del resto se ocupa el fotógrafo.

Hemos aprovechado para revisar algunos aspectos de la web del producto: el apartado “Información” se ha rediseñado, el apartado de “Clientes” también (en este punto estamos preparando una sorpresa dentro de poco).

Además estamos ofreciendo la modalidad de contratación anual donde hay un ahorro de la cuota de 2 meses respecto a la modalidad mensual. Ver Precios.

Estamos ya trabajando en más mejoras, cada vez tenemos más galerías, los clientes no parán de aumentar, cada vez se utiliza más. En fin, que estamos muy contentos.

Como comenta mi socio Félix, en Arcadina no tenemos inversores externos, es autofinanciación 100%. Estamos consiguiendo llevar adelante nuestro proyecto, mejorar los productos y seguir creciendo con capital propio. Si tuvieramos inversores seguramente iríamos más rápidos y todavía tendríamos mejores cifras.