viernes, 28 de febrero de 2014

dar una fecha un tiempo atras - PHP

En muchas ocasiones tendremos la necesidad de mostrar ya sea por pantalla o simplemente almacenar en una variable una fecha en concreto, y la mayoría de las veces es una fecha pasada, como pueda ser una semana antes, un mes antes, o un año antes.

Para ello utilizaremos los métodos date() y mktime();

mktime() nos devuelve el timestamp de una fecha, si no le damos ningún parámetro nos devuelve la fecha actual; ojo fecha y hora UTC en España en concreto usamos UTC +1 podemos comprobar la fecha devuelta copiando el código que nos da, que sera algo al estilo: 1393605543 que es la fecha en la que estoy escribiendo esto; ingresando esos números en http://www.unixtimestamp.com/index.php

Por otro lado podemos formatearlo para verlo en días mes año, o como mas nos guste gracias a la función date(), a la que pasandole un string con el formato deseado lo tendremos todo solucionado, Y lo usaremos para la posición del año, m para la del mes, y d para el día. entre medias podemos poner / - espacio, lo que mas nos guste.

Para sacar una fecha en concreto en el mktime usaremos la función date() y le restaremos, o sumaremos, según necesitemos los días, meses, años e incluso minutos, horas o segundos por ejemplo:


  • date( "Y-m-d",mktime(0, 0, 0, date("m")-1,date("d"), date("Y"))) -> nos da la fecha de hace un mes
  • date( "Y-m-d",mktime(0, 0, 0, date("m"),date("d")-1, date("Y"))) -> nos da la fecha de ayer
  • date( "Y-m-d",mktime(0, 0, 0, date("m"),date("d"), date("Y")-1)) -> nos da la fecha de hace un año
  • date( "Y-m-d",mktime(0, 0, 0, date("m")+1,date("d"), date("Y"))) -> nos da la fecha de dentro de un mes
  • date( "Y-m-d",mktime(0, 0, 0, date("m"),date("d")+7, date("Y"))) -> nos da la fecha de dentro de una semana
  • date( "Y-m-d",mktime(0, 0, 0, date("m"),date("d"), date("Y")+1)) -> nos da la fecha de dentro de un año


Os dejo un par de ejemplos de su uso


<?php echo date( "Y-m-d",mktime(0, 0, 0, date("m")-1,date("d"), date("Y"))); ?>

<input type="date" name="desde" id="desde" value="<?php echo date( "Y-m-d",mktime(0, 0, 0, date("m")-1,date("d"), date("Y"))); ?>"/> al <input type="date" name="hasta" id="hasta" value="<?php echo date('Y-m-d'); ?>"/>

miércoles, 26 de febrero de 2014

Función para obtener un parametro pasado por la URL - JS

El otro día no tuve que recoger un parámetro en concreto de la URL por Java Script, sabia que lo había hecho antes, pero no recordaba como.

Así que mirando proyectos antiguos me encontré con esta función, que va a la perfección

    function getParam(nombre){
        name = nombre.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
        var regexS = "[\\?&]"+nombre+"=([^&#]*)";
        var regex = new RegExp( regexS );
        var resultados = regex.exec( window.location.href );
        if( resultados == null ){
            return "";
        }else {
            return resultados[1];
        }
    }

Tan solo hay que invocarla y pasarle el String del cual queremos recuperar los datos que tenemos en nuestra URL

Espero os sirva de ayuda

domingo, 23 de febrero de 2014

This version of the rendering library is more recent than your version of ADT plug-in. Please update ADT plug-in

Hoy me encontrado con este error :
This version of the rendering library is more recent than your version of ADT plug-in. Please update ADT plug-in

Justo hoy he arrancado un nuevo proyecto Android y la versión de destino es la 4.4.2 por lo que he actualizado el SDK, instalando dicha versión y descargando las actualizaciones de las anteriores que se me quedaron anticuadas, para mi sorpresa cuando abro el activity no tenia nada visible, y me aparecía dicho error después de ir a help -> check for Updates y que me dijera que no tenia ninguna actualización estaba desconcertado y googleando encontré lo siguiente:

http://stackoverflow.com/questions/18852983/eclipse-reports-rendering-library-more-recent-than-adt-plug-in

Allí dicen simplemente que le demos a help -> install New Software, en donde veremos una pantalla como la siguiente


Allí deberemos teclear la siguiente URL: https://dl-ssl.google.com/android/eclipse/

y seleccionar Developer Tool; darle a Next y esperar a que termine, cuando lo haga nos dirá que necesita reiniciar eclipse, le diremos que si y listo

Un saludo y espero que os sirva de utilidad.

jueves, 20 de febrero de 2014

IOS - TableView

En esta ocasión voy a montar un Ejemplo de un Table View básico en IOS

Para ello lo primero que necesitamos es abrir el XCode y crear un proyecto nuevo


Una vez creado nuestro nuevo proyecto iremos a nuestro StoryBoard


Y arrastraremos asta el un nuevo TableView Controller


para poder ver algo como lo siguiente


Una vez lo tengamos, crearemos una nueva clase:


Y veremos algo así:


Después de darle a Next tenemos que teclear el nombre de la clase que vamos a crear y deberemos seleccionar la clase de la que queremos heredar UITableViewController 


El siguiente paso sera vincular nuestra vista con la clase que acabamos de crear, para ello en nuestro StoryBoard seleccionaremos el TableViewController y a la derecha lo vincularemos con nuestra clase, como vemos en la imagen de abajo:



Ahora es un buen momento para dar el número de secciones que tiene la celda que utilizaremos, también en nuestra table view; en nuestro ejemplo tan solo usaremos una, como vemos en la imagen de abajo.



llegados a este punto deberemos vincular la celda con el identificador que usaremos en nuestro código, para ello seleccionaremos nuestra celda, y en el campo de identificador escribiremos Cell, ya que es el nombre que nos darán por defecto, si queremos darle otro identificador también podremos, pero habrá que cambiarlo también en el código.


Ahora solo nos queda cambiar 4 cosillas en nuestro código, para que quede tal que así:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{

    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{

    return 20;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";

        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
        cell.textLabel.text = @"www.rogamainformatica.es";
    
    return cell;
    
    
}

Tan solo necesitamos cambiar
en el método numberOfSectionsInTableView que nos de vuelva 1
en el método numberOfRowsInSection pondremos que nos devuelva 20, lo cual sera el número de celdas que usaremos.
Y  en cellForRowAtIndexPath teclearemos:
    static NSString *CellIdentifier = @"Cell";

        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
        cell.textLabel.text = @"www.rogamainformatica.es";
    
    return cell;

En donde únicamente declaramos el identificador de la celda y le asignamos un texto

Podéis ver el vídeo con este mismo ejemplo en menos de 5 minutos aquí debajo



Como siempre podeis descargar el codigo desde : IOS Ejemplo de TableView

domingo, 16 de febrero de 2014

XCode comentar / descomentar varias lineas de una vez

para descomentar o comentar varias lineas de una sola vez en XCode tan solo deberemos pulsar cmd + shift + 7

así si por ejemplo tenemos:

    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
    
    // Configure the cell...
    cell.textLabel.text = @"LEXCode";
    

    return cell;


conseguiremos:

//    static NSString *CellIdentifier = @"Cell";
//    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
//    
//    // Configure the cell...
//    cell.textLabel.text = @"LEXCode";
//    
//    return cell;

Y viceversa

jueves, 13 de febrero de 2014

Error: Apache shutdown unexpectedly. [Apache] This may be due to a blocked port, missing dependencies

Seguramente a todos nos a pasado algo por el estilo, intentábamos arrancar nuestro servidor apache y nos da un error similar a este:
13:50:25  [Apache] Status change detected: stopped
13:50:25  [Apache] Error: Apache shutdown unexpectedly.
13:50:25  [Apache] This may be due to a blocked port, missing dependencies,
13:50:25  [Apache] improper privileges, a crash, or a shutdown by another method.
13:50:25  [Apache] Press the Logs button to view error logs and check
13:50:25  [Apache] the Windows Event Viewer for more clues
13:50:25  [Apache] If you need more help, copy and post this
13:50:25  [Apache] entire log window on the forums



Es tan solo por que tenemos alguna aplicación arrancada que utiliza alguno de los puertos que usa Apache, los puertos por defecto son el 80, y el 443, Skype es muy dado a usarlos, y este es el caso.

Tenemos varias soluciones. la mas rápida, aunque menos eficiente es:

  • Podemos cerrar el Skype y arrancar nuestro Apache, después podremos volver a arrancar nuestro Skype
  • La que os recomiendo es ir al menú superior de nuestro Skype -> Herramientas -> Opciones.


 Y en la ventana que se nos habré, ir a la opción Conexión y después desmarcar la casilla de usar puertos 80, y 443; aceptaremos los cambios y arreglado, ya podremos arrancar nuestro Apache con el Skype abierto siempre que queramos


  • Una tercera solución, aunque mas elaborada, seria cambiar los puertos de Apache en el php.ini.

Esta configuración es valida para todos los Skype que no sean los "nativos" de Windows 8

viernes, 7 de febrero de 2014

Enviar mensaje de correo electrónico de prueba: No se puede enviar el mensaje. Compruebe la dirección de correo electrónico en las propiedades de la cuenta. El servidor respondió: 550 Access denied - Invalid HELO name (See RFC2821 4.1.1.1)

Enviar mensaje de correo electrónico de prueba: No se puede enviar el mensaje. Compruebe la dirección de correo electrónico en las propiedades de la cuenta.  El servidor respondió: 550 Access denied - Invalid HELO name (See RFC2821 4.1.1.1)

Aparece cuando en Outlook, o nuestro gestor de correos no se ha marcado la casilla en mas configuraciones -> Servidor de salida -> Mi servidor de salida (SMTP) requiere autenticación y claro esta es necesaria.


jueves, 6 de febrero de 2014

XML error parsing SOAP payload on line 1: Invalid character

Al usar un webservice aveces podemos recibir este error, no es ni mas ni menos a que hemos mandado algún carácter extraño para la codificación que estemos usando, en mi caso mandaba una ñ en un UTF-8, si cambiamos la codificación a ISO-8859-1 lo arreglaremos, para ello usando NuSoap, deberemos abrir el archivo nusoap.php, que esta ubicado en nuestro proyecto en la carpeta NuSoap/lib
y en la linea 149 copiar lo siguiente

    var $soap_defencoding = 'ISO-8859-1';
    //var $soap_defencoding = 'UTF-8';

Solucionado ;)

martes, 4 de febrero de 2014

IOS - Declaración e implementación de métodos

En nuestro ejemplo crearemos un nuevo proyecto con una SingleView para agilizar.

Una vez Creado, nos iremos a nuestro ViewController.h y copiaremos lo siguiente:
-(void)nombreDelMetodoConParametro1:(NSString *)parametro1 andParametro2:(NSString *)parametro2;

Con esta simple linea hemos declarado nuestro método; paso a explicarlo:
-(void)
Con esto decimos que es un método de objeto y que no devuelve nada, que solo ejecuta una serie de sentencias que mas adelante programaremos.
Si quisiéramos declarar un objeto de clase lo haríamos sustituyendo el - por un +

En resumen:
  • -método de objeto
  • +método de clase
(void) No devuelve nada, solo ejecuta, si le ponemos algún tipo devariable será lo que nos devuelva NSString, NSNumber …

Lo siguiente que nos encontramos es: nombreDelMetodoCon

Lo cual no es ni más ni menos que el nombre del método
Ahora nos encontramos con Parametro1:
Debe ser un texto descriptivo del parámetro que solicitamos

Y lo siguiente es: (NSString *)parametro1
Lo que nos encontramos entre () solo es el tipo de dato que vamos a pedir parametro1 es el nombre de la variable que vamos a utilizar dentro de nuestro método.

Casi acabando nos encontramos con andParametro2:(NSString *)parametro2;
En donde andParametro2: Debe ser un texto descriptivo del segundo parámetro(NSString *)parametro2; al igual que con parametro1 pedimos el tipo de dato y damos el nombre de la variable que vamos a utilizar dentro del método.

Ahora vamos a nuestro ViewController.m
Y allí copiaremos lo siguiente:
//Implementacion del metodo
-(void)nombreDelMetodoConParametro1:(NSString *)parametro1 andParametro2:(NSString *)parametro2{
    NSLog(@"%@", parametro1);
    NSLog(@"%@", parametro2);
}

que vemos es lo mismo que hemos declarado en el .h tan solo que entre llaves hemos sacado 2 NSLog, uno para cada parámetro

Dentro del - (void)viewDidLoad Copiaremos lo siguiente
[self nombreDelMetodoConParametro1:@"Texto de Ejemplo1" andParametro2:@"Texto de ejemplo para el segundo ejemplo"];


En donde hemos escrito entre paréntesis por ser un método su implementación y todo ello precedido por self que es el símil a this en otros lenguajes, y se utiliza para referirnos a todo lo que tenemos en nuestra propia clase, seguido de la descripción de los parámetros se los pasamos

Os dejo el código para descargar desde mi GiHub:https://github.com/rogama/IOS---Declaraci-n-e-implementaci-n-de-metodo.git

lunes, 3 de febrero de 2014

#1045 - Access denied for user 'root'@'localhost' (using password: NO) - PHPMyAdmin

El otro día me encontré con este error en una instalación de Xampp.

La verdad es que solucionarlo es sencillo, tan solo deberemos arrancar la consola de nuestro server:


con lo que veremos una pantalla parecida a esta:


Una vez estemos hay deberemos escribir el comando
mysql
Después deberemos ingresar el siguiente código para darle una contraseña a nuestro usuario root:
SET PASSWORD FOR root@localhost=PASSWORD(' micontraseña ');

El siguiente paso es el de dar los permisos:
mysql> GRANT ALL PRIVILEGES ON *.* TO root@localhost IDENTIFIED BY ' micontraseña ' WITH GRANT OPTION;

Y para finalizar deberemos abrir nuestro archivo php.ini como indicamos en la siguiente imagen o con nuestro editor favorito aunque con el blog de notas vamos sobrados, php.ini lo tenemos ubicado en: C:\xampp\php

Comprobaremos los siguientes parámetros

; Default host for mysql_connect() (doesn't apply in safe mode).  
mysqli.default_host ='localhost'  

; Default user for mysql_connect() (doesn't apply in safe mode).  
mysqli.default_user ='root'  
Y ponemos nuestra pass
; Default password for mysqli_connect() (doesn't apply in safe mode).  
mysqli.default_pw ='micontraseña'

Abriremos el archivo config.inc.php como vemos en la imagen de abajo o mediante la ruta: C:\xampp\phpMyAdmin

y allí comprobaremos los siguientes parámetros

$cfg['Servers'][$i]['host']= 'localhost';  
$cfg['Servers'][$i]['user'] = 'root';  
y nuestra contraseña
$cfg['Servers'][$i]['password']= 'micontraseña';


Fuente: http://es.kioskea.net/faq/10637-phpmyadmin-1045-access-denied-for-user-root-localhost

sábado, 1 de febrero de 2014

Tomar posesion de un archivo o carpeta Windows

Lo primero es mostrar la pestaña de seguridad:
Para ello deberemos ir a Herramientas->Opciones de carpeta-> allí a la pestaña Ver-> y desmarcar la ultima casilla: Utilizar uso compartido simple de archivos

Para ver el menú herramientas en windows superiores a XP en cualquier carpeta pulsamos la tecla ALT .

Fuente: http://www.mistrucos.net/truco-windows-windows-xp-ver-pestana-seguridad-48.htm

Una vez tengamos visible la pestaña seguridad; deberemos hacer click derecho sobre el archivo o carpeta del que vamos a tomar posesión, después iremos a propiedades, y una vez allí a seguridad, seleccionaremos nuestro usuario y le daremos todos los permisos, y después al botón de aplicar, esperamos un poco y con esto suele ser suficiente
En caso de que no lo sea, deberemos dar a opciones avanzadas-> pestaña Propietario-> seleccionaremos nuestro usuario, y marcaremos la casilla de reemplazar propietario en Subcontenedores y objetos, aplicaremos y listo.

Fuente: http://support.microsoft.com/kb/308421/es

Probado en XP aunque debe ser igual para Vista, 7 y 8