Posted by touzas on Ene 6, 2010 in
General
Estos días al estar de vacaciones he estado mirando las distintas posibilidades que nos ofrece el mercado para cambiar nuestra nómina de bando y como todos nos dan algo, pues hay me fui yo de bancos y… estos son los resultado de los consultados hasta ahora.
Comparativa Cuentas Nómina.
|
|
|
|
|
|
|
|
|
ING |
Santander |
BBVA |
PASTOR |
CaixaNova |
|
| Comisiones de Mnto. |
0 |
0 |
0 |
0 |
0 |
|
| Transferencias Nacionales |
0 |
0 |
0 |
0 |
0 |
|
| Ingresos de cheches |
0 |
0 |
0 |
0 |
0 |
|
| Alerta SMS |
0 |
NO |
0 |
* |
? |
|
| Disposición de efectivo (Tarjeta Débito) |
Cualquier 4B |
Sólo Santander |
Solo BBVA |
Sólo Pastor |
Sólo Caixanova |
|
| Renovación de tarjetas |
0 |
0 |
0 |
>Cantidad |
0 |
|
| Prestamos por anticipo de nómina |
NO |
NO |
3 Nominas |
* |
6 Nóminas |
|
| Descubierto por recibos |
3 días |
(300-600) |
3 dias* |
Sï |
Sí(2,5% anual) |
|
| Tarjeta de Débito |
0 |
0 |
0 |
6€? |
0 |
|
| 2ª Tarjeta cotitular |
0 |
0 |
14 € |
9€? |
0 |
|
| Devolución de Recibos (Luz, agua,…) |
2% |
0 |
3% |
5% |
No |
|
| ING: Dispone de oficinas pero en algunas no tienen efectivo. Para retirarlo, a través de cajeros 4B. |
|
|
|
¿Cantidades Grandes? |
desde 600€ a 3000€ máx día |
|
|
¿Ingresos en cuenta? |
A través de Cajero |
|
|
Lo único que puedo decir después de ver todo esto y sin aún mirar un par de opciones que me quedan, que me voy para ING Direct.
Ah! y por si no los sabéis todo lo que nos devuelven los bancos en cuanto a los recibos más comunes, se lo hay que reenbolsar a hacienda a final de año en un porcentaje del 18%
¿Alguien tiene alguna experiencia mala al respecto?
Etiquetas: comparativa, ing-direct, nomina
Posted by touzas on Sep 17, 2009 in
Programación
PHP Patterns – VO & DAO
Como encuentro poca información por internet acerca del patrón de diseño que utilizo yo, voy a relatar la forma de usarlo y por qué lo uso.
Comenzé a utilizar patrones de diseño hace ya unos añitos, cuando alguien me hablo de ellos, o leí en alguna parte que existian, me llamo la atención y quise saber más.
Encontré el patrón VO DAO.
Que significa esto:
1.- VO => Value Objects.
2.- DAO => Data Access Objects.
Creo que todo esto se verá muchísimo mejor con un ejemplo. Vamos con ello.
Imaginemos que tenemos la siguiente estructura en una tabla de nuestra base de datos:
CREATE TABLE `pruebas`.`probando` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`nombre` VARCHAR( 250 ) NOT NULL ,
`Observaciones` VARCHAR( 250 ) NOT NULL ,
`borrado` TINYINT( 1 ) NOT NULL DEFAULT ‘0'
)) ENGINE = InnoDB
Yo tengo el costumbre (no sé si bueno o malo) de tener mi propia clase para la capa de datos.
————————————— Capa de Datos —————————
class dbClass {
public $conexion;
private $server = “localhost”;
private $user = “user”;
private $password = “pass”;
private $database = “pruebas”;
public function getServer(){
return $this->server;
}
public function getUser(){
return $this->user;
}
public function getPassword(){
return $this->password;
}
public function getDB(){
return $this->database;
}
function conecta() {
$this->conexion = mysql_connect ( $this->server, $this->user, $this->password ) or die ( “No se puede establecer la conexión: ” . mysql_error () );
if ($this->conexion != null) {
mysql_select_db ( $this->database );
}
}
function desconecta() {
mysql_close ( $this->conexion );
}
function selectFromSQL($sql) {
$this->conecta ();
$resultado = mysql_query ( $sql, $this->conexion ) or die ( “Error: ” . mysql_error () . ” <br/> ” . $sql );
$this->desconecta ();
return $resultado;
}
function countReg($sql) {
$this->conecta ();
$query = mysql_query ( $sql, $this->conexion ) or die ( “Error: ” . mysql_error () . ” <br/> ” . $sql );
$data = mysql_fetch_array ( $query );
$resultado = $data [0];
$this->desconecta ();
return $resultado;
}
function setReturn($sql) {
$this->conecta ();
$result = mysql_query ( $sql, $this->conexion ) or die ( “Error: ” . mysql_error () . ” <br/> ” . $sql );
$lastId = 0;
if (! $result) {
echo mysql_error ();
die ();
}else{
$sql = “SELECT @@IDENTITY as lastId”;
$ridentity = mysql_query($sql, $this->conexion) or die(”Identity Error: “. mysql_error(). “<br/>”);
if ($ridentity){
$row = mysql_fetch_row ( $ridentity );
$lastId = $row [0];
}
}
return $lastId;
}
function set($sql) {
$this->conecta ();
$result = mysql_query ( $sql, $this->conexion ) or die ( “Error: ” . mysql_error () . ” <br/> ” . $sql );
if (! $result) {
return mysql_error ();
echo mysql_error ();
die ();
}
return true;
}
}
?>
————————-
Una vez tenemos Base de Datos y Clase para trabajar con ella vamos con lo que nos ocupa, los objetos para poder trabajar:
<?php
class probandoVO{
var $Id;
var $Nombre;
var $Observaciones;
var $Borrado;
public function probandoVO($Id = “”, $Nombre= “”, $Observaciones = “”, $Borrado = “0?) {
$this->Id = $Id;
$this->Nombre = $Nombre;
$this->Observaciones = $Observaciones;
$this->Borrado = $Borrado;</span>
<span style="font-size: 8pt; font-family: 'Verdana'; color: #0000ff;">}
}
class probandoDAO {
var $tableName = “probando”;
public function getItem($id) {
$sql = “select * from ” . $tablename . ” where id=” . $id . ” and borrado = 0?;
$data = new dbClass ( );
$result = $data->selectFromSQL ( $sql );
while ( $row = mysql_fetch_array ( $result ) ) {
$item = new probandoVO ( $row ["Id"], $row ["Nombre"], $row ["Observaciones"], $row ["Borrado"] );
return $item;
}
return null;
}
public function get() {
$sql = “select Id, Nombre, Observaciones, Borrado from ” . $tablename . ” where borrado = 0?;
$data = new dbClass ( );
$result = $data->selectFromSQL ( $sql );
$datos = array ();
while ( $row = mysql_fetch_array ( $result ) ) {
$item = new probandoVO ( $row ["Id"], $row ["Nombre"], $row ["Observaciones"], $row ["Borrado"] );
$datos [] = $item;
}
return $datos;
}
public function insert($vo) {
$sql = sprintf ( “insert into ” . $tablename . ” (Nombre, Observaciones, Borrado) values (’%s’, ‘%s’, ‘%s’, ‘%s’)”,
addslashes ( $vo->Nombre ), addslashes ( $vo->Observaciones ), addslashes ( $vo->Borrado ) );
$data = new dbClass ( );
$result = $data->setReturn($sql);
return $result;
}
public function update($vo) {
$sql = sprintf ( “update ” . $tablename . ” set Nombre=’%s’, Observaciones=’%s’, Borrado=’%s’ where id=’%s’”,
addslashes ( $vo->Nombre ), addslashes ( $vo->Observaciones ), addslashes ( $vo->Borrado ), $vo->Id );
$data = new dbClass ( );
$result = $data->set ( $sql );
return $result;
}
}
?>
————————–
Una vez tenemos nuestros objectos creados solo tenemos que trabajar con ellos.
Para pintar:
$dao = new probandoDAO();
$arr = $dato->get();
foreach($arr as $data){
echo “Id: ” . $data->Id;
echo “Nombre: ” . $data->Nombre;
echo “Observaciones: ” . $data->Observaciones;
}
Para guardar, se supone que con un formulario y tal…:
$vo = new probandoVO();
$vo->Id = $_POST["Id"];
$vo->Nombre = $_POST["Nombre"];
$vo->Observaciones = $_POST["Observaciones"];
$dao = new probandoDAO();
if ($vo->Id > 0){
$dao->insert($vo);
}else{
$dao->update($vo);
}
Espero que os sirva de ayuda. Para mí fue un mundo nuevo, sobre todo pensando que lo más dificil de una aplicación es el mantenimiento, y generando todo el código de esta forma es muy sencillo realizar cualquier cambio.
Etiquetas: Pattern, PHP, VO-DAO
Posted by touzas on Sep 2, 2009 in
Linux

Mi nueva adquisición
Esta es mi nueva adquisición. Necestiaba un cambio de ordenador;;P
Posted by touzas on Jun 17, 2009 in
Linux
gDesklets is a system for bringing mini programs (desklets), such as weather forecasts, news tickers, system information displays, or music player controls, onto your desktop, where they are sitting there in a symbiotic relationship of eye candy and usefulness. The possibilities are really endless and they are always there to serve you whenever you need them, just one key-press away. The system is not restricted to one desktop environment, but currently works on most of the modern Unix desktops (including GNOME, KDE, Xfce).
http://www.gdesklets.de/
Etiquetas: desktop, Linux
Posted by touzas on Jun 17, 2009 in
Linux
Para aquellos que no lo conocen, Enlightenment o simplemente E es un gestor de ventanas para Unix y GNU/Linux muy atractivo y con efectos visuales alucinantes.
La DR17 es la versión en desarrollo de Enlightenment pero ofrece una gran estabilidad y una buena integración con el entorno, todo con una arquitectura gráficamente espectacular y flexible. Para más detalles de Enlightenment visita la página oficial
Bueno, ahora a lo que vinimos; en este post explicaré como instalar la versión DR17 (E17) en Debian Lenny.
Primero agregamos los repositorios de desarrollo de Enlightenment a nuestro /etc/apt/sources.list:
deb http://debian.alphagemini.org/ unstable main
deb-src http://debian.alphagemini.org/ unstable main
Luego agregamos la clave gpg ejecutando estas instrucciones en la consola:
# gpg --keyserver pgp.rediris.es --recv-keys 7E5D69A103CA4243
# gpg --armor --export 7E5D69A103CA4243 | apt-key add -
Hacemos una actualización de la lista de paquetes:
# aptitude update
Y por último instalamos el gestor de ventanas:
# aptitude install e17
Etiquetas: e17, enlightenment
Posted by touzas on May 8, 2009 in
Linux
Hi, for install Enlightenment E17 on debian:
Download and install Enlightenment DR 17 with all it components from svn.
- Download: easy_e17.sh
- Release: 1.2.4 (2009-03-29)
- Installation hints:
Run the script with `/bin/bash easy_e17.sh -i`.
- Features:
- easy installation of e17
- commandline arguments for changing the install path, skipping packages, updating…
- setting autogen options
- svn checkout
- `nice`-options
- config file support (~/.easy_e17.conf)
…much more
Original font: http://omicron.homeip.net/projects/#easy_e17.sh
Etiquetas: debian, e17, enlightenment, Linux
Posted by touzas on Abr 21, 2009 in
Programación
En un post anterior los enlaces a las descargas de las Dll no funcionan, así que aquí os posteo el código que utilizo:
using System;
using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions;
namespace confVars {
public class validaciones {
public static Boolean validaNIFCIF(string data) {
if (data == null) return false;
if (data == String.Empty) return false;
if (Char.IsLetter(data, 0) && data.Substring(0, 1).ToUpper() == “X”)
data = data.Substring(1, data.Length – 1);
if (data.Length <
return false;
if (Char.IsLetter(data, 0)) {
if (new Regex(“[A-Za-z][0-9]{7}[A-Za-z0-9]{1}$”).Match(data).Success) {
return true;
//return validadCIF(data);
} else
return false;
} else if (Char.IsLetter(data, data.Length – 1)) {
//Valida NIF
if (new Regex(“[0-9]{8}[A-Za-z]“).Match(data).Success || new Regex(“[0-9]{7}[A-Za-z]“).Match(data).Success)
return validarNIF(data);
else
return false;
}
return true;
}
private static string getLetra(int id) {
Dictionary<int, String> letras = new Dictionary<int, string>();
letras.Add(0, “T”);
letras.Add(1, “R”);
letras.Add(2, “W”);
letras.Add(3, “A”);
letras.Add(4, “G”);
letras.Add(5, “M”);
letras.Add(6, “Y”);
letras.Add(7, “F”);
letras.Add(8, “P”);
letras.Add(9, “D”);
letras.Add(10, “X”);
letras.Add(11, “B”);
letras.Add(12, “N”);
letras.Add(13, “J”);
letras.Add(14, “Z”);
letras.Add(15, “S”);
letras.Add(16, “Q”);
letras.Add(17, “V”);
letras.Add(18, “H”);
letras.Add(19, “L”);
letras.Add(20, “C”);
letras.Add(21, “K”);
letras.Add(22, “E”);
return letras[id];
}
private static bool validarNIF(string data) {
if (data == String.Empty)
return false;
try {
String letra;
letra = data.Substring(data.Length – 1, 1);
data = data.Substring(0, data.Length – 1);
int nifNum = int.Parse(data);
int resto = nifNum % 23;
string tmp = getLetra(resto);
if (tmp.ToLower() != letra.ToLower())
return false;
} catch (Exception ex) {
Console.WriteLine(ex.Message);
return false;
}
return true;
}
private static bool validadCIF(string data) {
try {
int pares = 0;
int impares = 0;
int suma;
string ultima;
int unumero;
string[] uletra = new string[] { “A”, “B”, “C”, “D”, “E”, “F”, “G”, “H”, “I”, “J”, “K”, “L”, “M”, “N”, “0″ };
string[] fletra = new string[] { “A”, “B”, “C”, “D”, “E”, “F”, “G”, “H”, “I”, “J” };
int[] fletra1 = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
string xxx;
/*
* T P P N N N N N C
Siendo:
T: Letra de tipo de Organización, una de las siguientes: A,B,C,D,E,F,G,H,K,L,M,N,P,Q,S.
P: Código provincial.
N: Númeración secuenial dentro de la provincia.
C: Dígito de control, un número ó letra: Aó1,Bó2,Có3,Dó4,Eó5,Fó6,Gó7,Hó8,Ió9,Jó0.
*
*
A. Sociedades anónimas.
B. Sociedades de responsabilidad limitada.
C. Sociedades colectivas.
D. Sociedades comanditarias.
E. Comunidades de bienes y herencias yacentes.
F. Sociedades cooperativas.
G. Asociaciones.
H. Comunidades de propietarios en régimen de propiedad horizontal.
I. Sociedades civiles, con o sin personalidad jurídica.
J. Corporaciones Locales.
K. Organismos públicos.
L. Congregaciones e instituciones religiosas.
M. Órganos de la Administración del Estado y de las Comunidades Autónomas.
N. Uniones Temporales de Empresas.
O. Otros tipos no definidos en el resto de claves.
*/
data = data.ToUpper();
ultima = data.Substring(8, 1);
int cont = 1;
for (cont = 1; cont < 7; cont++) {
xxx = (2 * int.Parse(data.Substring(cont++, 1))) + “0″;
impares += int.Parse(xxx.ToString().Substring(0, 1)) + int.Parse(xxx.ToString().Substring(1, 1));
pares += int.Parse(data.Substring(cont, 1));
}
xxx = (2 * int.Parse(data.Substring(cont, 1))) + “0″;
impares += int.Parse(xxx.Substring(0, 1)) + int.Parse(xxx.Substring(1, 1));
suma = pares + impares;
unumero = int.Parse(suma.ToString().Substring(suma.ToString().Length – 1, 1));
unumero = 10 – unumero;
if (unumero == 10) unumero = 0;
if ((ultima == unumero.ToString()) || (ultima == uletra[unumero - 1]))
return true;
else
return false;
} catch (Exception ex) {
Console.WriteLine(ex.Message);
return false;
}
}
}
}
Espero que os sirva,
Etiquetas: cif, nie, nif, validar
Posted by touzas on Abr 8, 2009 in
Linux
1º -Instalamos los paquetes:
aptitude install sshfs fuse-utils
2º- Cargamos el módulo de fuse y lo metemos en /etc/modules para que cargue al inicio:
modprobe fuse
echo fuse >> /etc/modules
3º- Damos permiso al usuario que montará la carpeta y no olvidemos que estos permisos serán efectivos cuando cierre la sesión y vuelva a logearse en el sistema (e mi caso touzas):
addgroup touzas fuse
4º- Creamos un directorio en donde montaremos el directorio remoto e introducimos el comando para montarlo:
mkdir /media/directorio_local
$ sshfs usuario_remoto@servidor_remoto:/directorio_remoto /media/directorio_local
Cuidado porque las dos últimas instrucciones se ejecutan como usuario normal y no como root.
Listo!!
Etiquetas: ssh linux mount
Posted by touzas on Abr 1, 2009 in
Linux
Con estos sources tengo todo mi equipo correctamente configurado y funcionando a las mil maravillas.
Linux desarrolo 2.6.26-1-amd64 #1 SMP Fri Mar 13 17:46:45 UTC 2009 x86_64 GNU/Linux
deb http://ftp.debian.org/debian/ lenny main contrib non-free
deb http://security.debian.org/ lenny/updates main contrib
#Adobe Reader
deb http://www.debian-multimedia.org/ stable main
#Deja dup – Copias de seguridad
deb http://ppa.launchpad.net/deja-dup-team/ubuntu intrepid main
deb-src http://ppa.launchpad.net/deja-dup-team/ubuntu intrepid main
#Enlightment e17
deb http://debian.alphagemini.org/ unstable main
deb-src http://debian.alphagemini.org/ unstable main
#KDE4
deb http://kde4.debian.net/ lenny main
#Compiz fusion
deb http://download.tuxfamily.org/shames/debian-sid/desktopfx/unstable/ ./
deb ftp://ftp.debian.nl/debian/ lenny contrib main
#Docky
deb http://ppa.launchpad.net/do-core/ppa/ubuntu intrepid main
deb-src http://ppa.launchpad.net/do-core/ppa/ubuntu intrepid main