lunes, 22 de diciembre de 2014

MySql - Condicional en query

En ocasiones puede ser que necesitemos colocar un condicional dentro de una Query, esto no es una practica nada recomendable, ya que afecta mucho al rendimiento, siempre que sea posible deberemos hacerlo desde el lenguaje que valla a recibir esta info (PHP, JAVA, JS, etc...), un if/else es muchísimo mas rápido y consume muchos menos recursos que la siguiente sentencia.
CASE WHEN 'CampoEnCuestion'= 0 THEN 'Salida' ELSE 'OtraSalida' END

sábado, 13 de diciembre de 2014

Instalar Android 5, Lollipop y actualizar nuestras app

Hoy os escribo entre felicidad y tristeza, por que quiero daros la grata noticia de que el ultimo portal que abrimos dedicado exclusivamente a Android esta teniendo una gran acogida por muchos de vosotros, y nuevos amigos que se nos unen en esta loca aventura de aprender, crecer y tener muchos dolores de cabeza con nuestros pequeños o no tan pequeños terminales de nuestro querido robótico, para los que aun no sepáis cual es ese portal os dejo la URL http://www.todo-android.gratis/ allí tendremos las mejores reviews de vuestras aplicaciones y otras que nos parezcan interesantes, al igual que de los terminales, widget, y accesorios para nuestros teléfonos, sin olvidarnos de lo que ya llevamos tiempo haciendo aquí mismo, trucos, tutoriales, y pequeños tips de programación.

viernes, 12 de diciembre de 2014

Android - Instalacion Eclipse + ADT

Os deje a medias en mi ultima entrada, pero después de varias horas, peleando con ello, y sin que terminara de funcionar, quedando solo a la espera de unas descargas... que por cierto el ADSL me va fatal por lo que los 100Mb de descarga del eclipse me tardan una eternidad.
Hoy os confirmo que después de volver a descargar eclipse, ya de paso me bajado la ultima versión: Luna Service Release 1 (4.4.1), abra que quedarse con el lado bueno que es tenerlo todo actualizado, después de haber perdido una tarde entera...
Tan solo tenemos que instalar el plugin ADT,

jueves, 11 de diciembre de 2014

Android - DDMS files not found: C:\adt-bundle-windows-x86_64-20130729\sdk\tools\hprof-conv.exe

Hoy al abrir eclipse después de una larga temporada que me ha mantenido ocupado programando únicamente en PHP, me encontrado con el siguiente error DDMS files not found: C:\adt-bundle-windows-x86_64-20130729\sdk\tools\hprof-conv.exe

En eclipse si vamos hasta Window --> Preferences

WordPress - Custom Post type

Crear tipos de Posts personalizados en WordPress es muy sencillo, tan solo deberemos incluir el siguiente código dentro de nuestro functions.php o bien desde un plugin.
public static function create_customPost_type() {
        register_post_type('customPost', array(
            'labels' => array(

lunes, 8 de diciembre de 2014

WordPress - Ejecutar una tarea en cron

Para ejecutar algo en un cron tan solo necesitamos, crear la función que queremos que se ejecute de manera automática cada cierto tiempo, y registrarla en los eventos de WordPress, antes de registrarla deberemos comprobar si ya esta registrada, si no la registrará una vez por cada pasada en el functions.php, y nuestra función se registrara cada vez, imagínate que tienes algo programado para que se ejecute cada hora, y desde que lo publicas hasta que pasa la 1 hora, as recibido la miseria de 5 visitas, las cuales además no han navegado por la web, pues tu función se ejecutara 5 veces por cada hora, hay que tener mucho cuidado con eso.
Lo solucionamos con el siguiente código

WordPress - Tiempos personalizados para cron

Cuando usamos algún cron en WordPress, siempre es necesario seleccionar cada cuanto queremos que se ejecute la tarea en cuestión, por defecto solo podemos usar hourly (cada hora), daily (diario), y twicedaily (cada 2 días).

para ello podemos usar la siguiente función, en donde al array $schedules, le agregaremos tantos como necesitemos tipo $schedules['minute'], lo cual siempre igualaremos a un array que contenga interval, y display.

viernes, 5 de diciembre de 2014

WordPress - Realizar peticion ajax

Realizar llamadas AJAX en WordPress es muy sencillo, tenemos mil maneras, pero la que me parece mas correcta es la siguiente:
  1. En nuestro functions.php pegaremos lo siguiente:
  2. add_action('wp_ajax_nopriv_my_function', 'ajax_my_function');
    add_action('wp_ajax_my_function', 'ajax_my_function');
    function ajax_my_function(){
        //El codigo que se ejecutara en la llamada AJAX
        exit;
    }

viernes, 28 de noviembre de 2014

Ghostlab a mitad de precio (Caducada)

Muchos de nosotros ya conocemos Ghostlab, para quien no haré una pequeña presentación.

Ghostlab es una pequeña gran aplicación que nos ofrece de un modo muy sencillo (arrastrando la carpeta de nuestro proyecto a su dashboard) una serie de ventajas:

martes, 25 de noviembre de 2014

WordPress - Cambiar contraseña de administrador

Para resetear la password o contraseña de cualquier usuario en WordPress, aunque lo normal es que lo usemos para resetear la del admin, ya que es la única vital, y con nuestro administrador siempre podremos cambiar cualquier otra contraseña.
Los pasos son sencillos:

  1. Tenemos que entrar en nuestro PhpMyAdmin, ir hasta la tabla usuarios (normalmente wp_users, o algo similar es el prefijo de nuestra tabla y a continuación users)

domingo, 9 de noviembre de 2014

CSS - Efecto marca de agua

Buenas amigos, hoy os traigo algo que seguramente os resulte muy útil.
Mediante unos estilos CSS vamos a conseguir un efecto de marca de agua, esto no es seguro, pero si muy disuasorio, ya que si alguien quiere robarnos la imagen, va a ver nuestro logo, o la imagen que definamos sobre la imagen en cuestión y en mas del 90% de los casos no intentara cogerla.

Os explico, para conseguirlo necesitamos un Div que lo contenga todo y 2 imagenes, una que se va a utilizar como marca de agua y la otra que es la que mostraremos, algo similar a esto
<div class="marca-de-agua">
<img alt="" src="URL-IMAGEN" /></div>
 y los siguientes estilos CSS:

jueves, 6 de noviembre de 2014

Drupal - Plantillas hijas

Hoy os escribía como crear plantillas hijas en WordPress, la buena noticia es que esto lo podemos hacer también en Drupal.
Al igual que en WordPress es muy sencillo, tan solo deberemos seguir unos pequeños pasos:

  1. En la carpeta Themes de nuestra instalación de Drupal (normalmente Drupal\sites\all\themes) crearemos una nueva carpeta, o directorio con el nombre que prefiramos (p.e: mi_tema)
  2. Dentro de este directorio crearemos un archivo con el mismo nombre del directorio, pero con la terminación .info (p.e: mi_tema.info)
  3. Dentro de este archivo, copiaremos la siguiente estructura:

WordPress - Plantillas hijas

Hace unos días os explicaba como añadir una nueva hoja de estilos a la template que ya tenéis montada en vuestro WordPress, en resumen venia siendo algo asi como añadir una etiqueta a la template con el método de WP bloginfo().

Bien hoy os cuento (pensaba que esto ya lo había escrito) que ese modo es 100% funcional, aunque no es el mas apropiado, ya que si salen actualizaciones de nuestro tema, y por supuesto actualizamos (algo que deberíamos hacer siempre, para solucionar posibles bug, y agujeros de seguridad), bien como os contaba tenemos el problema al actualizar ya que todas las modificaciones que llevemos a cabo se perderán, si solo hemos incluido un enlace de una hoja de estilos tenemos fácil localizar el cambio y volver a hacerlo, aunque es una tarea pesada si la plantilla esta viva y se actualiza a menudo.
Si queremos evitarnos esto el mejor modo es crear una plantilla hija, para ello  deberemos:

domingo, 2 de noviembre de 2014

Drupal - Cambiar la contraseña de administrador

Hoy al entrar en la web de un cliente mio para adaptarle algunas cosillas, me he llevado una gran sorpresa y es que ha cambiado la contraseña del administrador, para que??? ni idea pero ha sido así de majo, a el le cree su usuario, con poderes administrativos, y para gestiones me quede yo con el administrador, así que no podía entrar, al preguntarle que contraseña había puesto me dice que no se acuerda, así que, una de 2 o le daba al botoncito de recordar contraseña esperaba que le llegara el mail al cliente, que me la diera, esperando que me la den bien ya sabéis que muchas veces nos mandan la mitad, por que hay un punto o un guión, etc

Así que cortando por lo sano, digo la reseteo, la forma que tenemos para crear una nueva pass, a diferencia de WP es algo mas complicado, si trabajamos con una instalación clon en local(cosa que a mi me a salvado la vida mas de una vez), tan solo deberemos:

domingo, 12 de octubre de 2014

WordPress - Crear un Widget

Crear un Widget para WordPress es muy sencillo, tan solo deberemos crear un Plugin, para lo cual solo tendremos que crear un archivo dentro de la carpeta plugin, o una carpeta, y dentro de la cual todos los archivos que necesite nuestro plugin, lo ideal es esto ultimo ya que es mas complicado que otro desarrollador cree otro plugin con la misma estructura que nosotros.

El ejemplo que vamos a dejar disponible para ver el código, el proceso y su descarga desde github, estará disponible en nuestro repositorio.

Como ya hemos mencionado basta con crear un fichero en la carpeta de plugin, o un directorio y dentro ese fichero, voy a optar por esta ultima opción,

sábado, 11 de octubre de 2014

WordPress - Permitir etiquetas HTML como target, rel en bio de autor

En la Biografia de autor WordPress por defecto no permite escribir ciertas etiquetas HTML, por ejemplo, puedes escribir <a href="xxx">xxxxxx</a> pero no puedes darlos los atributos de rel, ni de target.

Para ello tenemos una solución muy simple, sola mente tenemos que instalar y activar el siguietne plugins

https://wordpress.org/plugins/allow-rel-and-html-in-author-bios/

Y asunto solucionado, espero que os sirva de ayuda

Prestashop - Algunos productos se visualizan a precio 0 en la ficha de producto

Estos días he tenido que enfrentarme a un problema, en el que una de las tiendas a las que doy soporte con Prestashop marcaba todos los precios perfectamente, pero al entrar en la ficha de producto de determinados productos su precio se visualizaba a 0.00 €.

domingo, 21 de septiembre de 2014

Añadir una nueva hoja de estilos a WordPress

Casi siempre que montamos un nuevo sitio con WP, o editamos uno que ya este publicado, nos toca editar los estilos, suele cometerse el error de editar los estilos que nos proporciona la plantilla, esto nos lleva al inconveniente de que cada vez que actualizemos la plantilla deberemos volver a hacer los cambios ya que es mas que probable que nos los pisen, para ello la mejor opcion es incluir una nueva hoja de estilos con todos nuestros cambios, la cual deberemos agregarla justo al final de los estilos que trae nuestra plantilla, para agregar una nueva hoja de estilos solo necesitaremos la siguiente linea, en la cual hemos almacenado nuestra hoja de estilos en una carpeta llamada css, la cual esta en la raiz del directorio de nuestra template, y hemos llamado a nuestra hoja custom.css
<link rel="stylesheet" href="<?php bloginfo('template_directory'); ?>/css/custom.css" />

Un saludo y como siempre espero que os sirva de ayuda

miércoles, 10 de septiembre de 2014

Traducir WordPress

En este articulo me centrare en rtaducir nuestro WordPress al castellano, aunquer podria aplicarse a cualquier idioma

La forma mas sencilla es descargar el instalador en el idioma elegido, para ello deberiamos ir al sigueinte enlace y descargarlo.
http://es.wordpress.org/wordpress-4.0-es_ES.zip

sábado, 23 de agosto de 2014

Fatal error: Uncaught exception 'SmartyException' with message 'unable to write file

El otro dia me encontre con este error:

Fatal error: Uncaught exception 'SmartyException' with message 'unable to write file /var/www/vhosts/MiDominio/httpdocs/cache/smarty/compile/5a/5c/7b/wrt53c28bab1fdaa6.01547362' in /var/www/vhosts/MiDominio/httpdocs/tools/smarty/sysplugins/smarty_internal_write_file.php:44 Stack trace: #0 /var/www/vhosts/MiDominio/httpdocs/tools/smarty/sysplugins/smarty_internal_template.php(201): Smarty_Internal_Write_File::writeFile('/var/www/vhosts...', 'compileTemplateSource() #2 /var/www/vhosts/MiDominio/httpdocs/classes/module/Module.php(1860): Smarty_Internal_TemplateBase->fetch() #3 /var/www/vhosts/MiDominio/httpdocs/modules/leomanagewidgets/leomanagewidgets.php(479): ModuleCore->display('/var/www/vhosts...', '/themes/leomana...', 'leomanagewidget...') #4 /var/www/vhosts/MiDominio/httpdocs/modules/leomanagewidgets/leomana in /var/www/vhosts/MiDominio/httpdocs/tools/smarty/sysplugins/smarty_internal_write_file.php on line 44

Fatal error: Call to undefined function mcrypt_encrypt() in /var/www/vhosts/MiDominio/httpdocs/classes/Rijndael.php on line 50

Para solucionarlo le doy los permisos necesarios a la carpeta cache, y me encuentro con lo siguiente
Table 'XXXX_bd.ps_leobtslider' doesn't exist

viernes, 22 de agosto de 2014

Marcar como activa una pestaña con JQuery

En este ejemplo muestro como marcar una pestaña u otra
Para ello uso el siguiente código JQuery:
$(document).on('click', 'ul li', function(){ 
    var $this= $(this);

    $('ul li').removeClass('active');
    $this.addClass('active');
});
Mediante el evento on de JQuery le pido que ejecute este códogo al hacer click sobre uno de los <li> en ese momento le pido que borre la clase 'active' de todos los <li> anteriores, y se la asigno al que lanza la petición, es decir al que ha sido pulsado.
Para hacerlo mas atractivo me he servido de los css de bootstrap, pero la idea es usar nuestros propios CSS y JS


Repositorio GitHub con el ejemplo de este artículo

lunes, 4 de agosto de 2014

JQuery jugar con capas


Hoy os traigo algunas funciones utiles en JQuery para interactuar con las capas


  •     $(capa).after(contenido);
La funcion After te deja colocar un contenido despues del selector
  •     $(capa).before(contenido);
Igual que la anterior, pero esta coloca el contenido antes del selector
  •     $(capa).html(contenido);
Sirve para sustituir el valor del contenido
  •     $(capa).animate(animacion, duraccion, funcion al finalizar);
Anima un selector
  •     $(capa).addClass(clase);
Añade una clase al selector
  •     $(capa).removeClass(clase);

Este la elimina


JQuery tiene muchas mas funciones interesantes, pero he seleccionado estas por considerarla las mas utiles y usadas, cuales echais de menos???

Os dejo un ejemplo de todas las anteriores en mi GitHub

viernes, 25 de julio de 2014

No se muestra la segunda imagen - leofast - prestashop

En la plantilla para Prestashop Leofast, podemos encontrarnos con un problema y es que no se nos visualiza la segunda imagen de nuestro producto al pasar el ratón por encima de la primera
Tenéis un ejemplo de lo que hablo en: http://www.pelucastalia.com/ una web en la que ando trabajando ultimamente, cuando uno de los productos tiene 2 o mas imagenes estas deben intercambiarse al pasar el ratón sobre el producto, pero en lugar de eso sale un interrogante (la imagen por defecto).

jueves, 17 de julio de 2014

Symfony - PHP - falta icuuc49.dll

El programa no puede iniciarse por que falta icuuc49.dll en el equipo.
Intente reinstalar el programa para corregir este problema


Este error ocurre al habilitar en el php.ini la extensión intl para solucionarlo deberemos copiar estas librerías en nuestro apache, eso se consigue del siguiente modo:
  1. Nos dirigiremos a nuestro server en mi caso Xampp a su directorio PHP (C:\xammp\PHP) 
  2. Buscaremos 3 archivos icudt49.dll; icuin49.dll; icuuc49.dll 
  3. Los copiaremos (importante copiar, no cortar) a nuestro directorio apache (C:\xammp\apache\bin) 
  4. Por ultimo reiniciaremos nuestro apache 
Y solucionado!!

miércoles, 16 de julio de 2014

PrestaShop - Warning on line 171 en archivo ... leobootstrapmenu.php

Al subir una simple imagen a las categorías de mis productos me encontrado con el siguiente error
Warning on line 171 en archivo /var/www/vhosts/tu_dominio_.com/httpdocs/modules/leobootstrapmenu/leobootstrapmenu.php
[2] Invalid argument supplied for foreach()

martes, 24 de junio de 2014

Slider de imagenes CSS sin JS

Hoy os dejo un Slider muy simple que hace que una serie de imagenes giren desde un lado hacia otro, vamos, el típico carrusel de imagenes, pero con la particularidad de que no lleva ni una sola linea de Java Script, esta todo escrito en CSS3.

Os dejo el código SASS, y el CSS


  • SASS

#Slideshow{
    overflow: hidden;

jueves, 19 de junio de 2014

Cambiar la imagen de un ImageView - Android

Para cambiar la imagen de un ImageView En un evento en concreto es muy sencillo, tan solo debemos inicializarlo en el OnCreate de nuestra clase, y después usar el siguiente código:
miImageView.setImageResource(R.drawable.imagen);
Si queremos complicarlo un poco mas, podemos parametrizarlo en las preferencias del usuario por ejemplo y recuperar desde allí un String con el nombre de la imagen, podremos acceder a su Id, y asignarlo al ImageView de la siguiente manera:

Comparar String en Java

Una cosa que nos suele pasar a todos cuando empezamos a programar en Java, o bien llevamos tiempo sin programar en dicho lenguaje, es toparnos con un caso muy común, la necesidad de comparar String, ya sea entre variables, o para que si una variable tiene un valor en concreto poder hacer determinadas acciones.

En cualquier caso seguramente intentemos hacer algo al estilo:
        if(miVartiableConTexto == "Un texto cualquiera"){
        //Haz algo
        }else{
        //Haz otra cosa
        }
Si lo hacemos así, una de 2 o nos damos cuanta rápido de nuestro error, o nos volveremos locos, hay que recordar en un String no es un tipo primitivo, si no un objeto, y como tal no se puede comparar mediante "==" a no ser que lo que queramos es comparar un objeto con otro, pero nunca sus valores, y como es lógico nuestra variable, nunca sera un String que podamos escribir en nuestro condicional.

por lo que cuando necesitemos comparar el valor de un String, o cualquier de objeto, tendremos que recurrir a algo muy sencillo, su método equals, podemos hacerlo con algo similar a lo siguiente:
        if(miVartiableConTexto.equals("Un texto cualquiera")){
         //Haz algo
        }else{
         //Haz otra cosa
        }

domingo, 15 de junio de 2014

Salto de linea en textos dentro del archivo string - Android

Como ya sabemos todos para trabajar con traducciones, y como buena practica en Android es incluir todos los textos en nuestro archivo strings.xml.

Pero que pasa si queremos un texto en varias lineas?
-Podemos introducir distintos TextView, uno para cada linea
-O podemos hacerlo en condiciones, y añadir los saltos de linea en nuestro texto en la variable de nuestras string.

Para introducir un salto de linea solo tenemos que escribir los caracteres \n al final de cada linea.

Os dejo un ejemplo

    <string name="acerca_de">Juego 3 en raya \n
Desarrollado por RoG@Ma Informática.\n
www.rogamainformatica.es</string>

Espero os sirva de ayuda

sábado, 14 de junio de 2014

Android - cannot execute task the task has already been executed (a task can be executed only once)

Al usar las AsyncTask en android puede aparecer el siguiente error:
cannot execute task the task has already been executed (a task can be executed only once)
Esto es debido a que estamos intentando ejecutar 2 veces un mismo hilo, y eso no es posible, lo que si podemos hacer es lanzar un nuevo hilo que ejecute la misma tarea.

Seguramente tengamos algo similar a lo siguiente

public void lanzaAsincrona(View view) {
downloadTask.execute(uri);
}

En donde downloadTask esta igualado posiblemente en el onCreate de la siguiente manera
downloadTask = new myDownloadTask();
de esta forma creamos una nueva instancia de nuestra clase en la variable downloadTask, si borramos esa linea en el onCreate, y la copiamos dentro del método lanzaAsincrona, lo arreglaremos, ya que cada vez que llamemos a ese método crearemos una nueva instancia, por lo que se ejecutara en un nuevo hilo; debería quedar algo así

public void lanzaAsincrona(View view) {
downloadTask = new myDownloadTask();
downloadTask.execute(uri);
}

o en su versión resumida
public void lanzaAsincrona(View view) {
new myDownloadTask().execute(uri);
}

Espero os sirva de ayuda

Android - asynctask an error occurred while executing doInBackground

En ocasiones podemos encontrarnos con el siguiente error:
asynctask an error occurred while executing doInBackground
Al usar una tarea asincrona tenemos que tener cuidado y estar seguro de lo que hacemos, desde un hilo secundario no podemos hacer varias cosas, entre ellas modificar la apariencia del Layut, lanzar un Toast, etc ...

Si intentamos ejecutar alguna de esas acciones seguramente nos de este error, si en nuestra app necesitamos ejecutar alguna tarea, y que esta misma cambie, algo o lance un mensaje (Toast) tenemos metodos especificos para ellos, estos son ejecutados justo antes, o despues de ejecutar la tarea, estos metodos son:

               @Override
protected String doInBackground(String... params) {
//Aqui ejecutaremos la tarea de nuestro hilo asincrono
}

@Override
protected void onPostExecute(String result) {
//Esto se ejecutara al terminar el hilo, es decir la tarea ejecutada en el doInBackgroun
}

@Override
protected void onPreExecute() {
//Esto se ejecutara antes de ejecutar la tarea del doInBackground
}

Tanto en el metodo OnPreExecute, como en el OnPostExecute, es el lugar ideal para lanzar Toast, o cambiar elementos de la interfac

Espero os sirva de ayuda.

viernes, 13 de junio de 2014

Android - Tareas Asincronas

Hacia tiempo que no os traía novedades, pues bien hoy os traigo algo de lo que no habíamos hablado hasta ahora y como son las tareas asincronas en Android.

En este ejemplo muy sencillo basado en el ejemplo que viene para explicar el modo de hacerlo aunque incompleto... del libro Android 4 de ediciones ENI del autor Nazim Benbourahla.

En dicho ejemplo tenemos un layout con un botón y una progressbar, aunque esta ultima oculta, y desde su activity creamos una nueva clase la cual extiende de AsyncTask, y es el método doInBackground el que se encarga de llevar a cabo las tareas en 2 plano, en el ejemplo simplemente dormimos el hilo durante un segundo en cada una de las 10 pasadas del bucle for

Tenéis todo el código en:

https://github.com/rogama/Android---Tareas-Asincronas

Espero os sirva de ayuda

sábado, 31 de mayo de 2014

Preprocesadores JS

Hoy simplemente os traigo una pregunta; acabo de terminar la lectura del Pequeño gran libro  de CoffeScript si todavía no lo habéis leído os recomiendo su lectura, por lo que lo primero es dar las gracias a Javi Jimenez por escribirlo y mas aun dejándolo gratis aunque con posibilidad de donación, que sin duda vale los 5$ que el sugiere o mas.
Por otro lado hoy en día esta en la boca de todo el mundo el uso de los preprocesadores, los hay para CSS como SASS o LESS que ya hablamos en algún apartado de ellos, especialmente de LESS, los tenemos para HTML como HAMM, y para JS, que sinceramente soy un novato en este tema y no he encontrado gran información, aparte de CoffeScript.

La pregunta que quiero lanzaros es
¿Vosotros usáis preprocesadores de algún tipo en vuestros desarrollos?
¿Cuales?¿Por Que?

Sobre preprocesadores JS, ¿Cuales conoces?¿Cual crees que acabara ganando la batalla?

jueves, 22 de mayo de 2014

Activar conexión por USB Galaxy S4

Aveces puede ocurrir que no nos reconoce nuestro PC al conectar por USB nuestro Galaxy S4.

  • Para solucionar esto deberemos ir al menu de marcacion, y alli teclear *#0808#
  • Seguido a esto se nos abrira una ventana en la que deberemos seleccionar AP, y en la parte inferior MTP

Habilitar menu desarrollador en Galaxy S4

Todos los que tenemos un Galaxy S4 e intentamos desarrollar con el, nos ha pasado, o pasara, que no encontramos el menu desarrollador, para asi poder habilitar la depuracion por USB, por lo que tenemos 2 opciones.
  1. Crear el APK e instalarlo con cada prueba
  2. Volvernos locos e intentar activarlo a cualquier coste
Si eres de los que les gusta el riesgo, toma la segunda opcion, para ello tenemos que seguir 3 pasos
  • Iremos a ajustes, y alli a la pertaña Mas
  • Bajaremos hasta la opcion Acerca del dispositivo
  • Buscaremos Numero de compilacion, y pulsaremos encima 7 veces (a partir de la 4 o 5 nos aparecera un mensaje "Toast" que nos dira cuantas veces nos hace falta seguir pulsando)
  • Si volvemos hacia atras, ya tenemos nuestro querido menu habilitado, tan solo tendremos que marcar las opciones que querramos


fuente:

sábado, 17 de mayo de 2014

java.lang.IllegalStateException: Could not find a method Close(View) in the activity - Android

Muchos de nosotros estamos acostumbrados a poner un botón de cerrar en nuestras vistas, dicho botón, lo solemos vincular en el método OnClick con un método Close, como en la siguiente linea.
android:onClick="Close"
Esto nos lleva a escribir un método similar al siguiente:
    public void Close() {
        finish();
    }
Pero ese código nos lanzara un error de este tipo:
java.lang.IllegalStateException: Could not find a method Close(View) in the activity 
Esto es debido a que probablemente por las prisas hallamos olvidado que nuestro método necesita que se le pase una vista, por lo que el código correcto seria:
    public void Close(View view) {
        finish();
    }

viernes, 16 de mayo de 2014

you need to use a theme.appcompat theme (or descendant) with this activity - Android

En ocasiones podemos encontrarnos con un error como este:
unable to start activity componentinfo
.....
you need to use a theme.appcompat theme (or descendant) with this activity
esto es debido a que probablemente estemos usando un tema personalizado en una Activity, que en realidad es un ActionBarActivity, esta ultima clase necesita usar el tema appCompat, por lo que deberemos ir a nuestro manifest, y editar el Theme de la actividad a lo siguiente
android:theme="@style/Theme.AppCompat" >
Aunque también podemos hacer que nuestra actividad extienda de Activity en lugar de ActionBarActivity, para ello habría que cambiar
public class MainActivity extends ActionBarActivity {
por
public class MainActivity extends Activity {
Escogeremos en cada caso la opción que mas nos interese

miércoles, 14 de mayo de 2014

Acceder a recursos de un Fragment desde un Activity mediante findById - Android

Hoy os dejo algo que me ha llevado un buen rato.
Todos los que aprendimos o hicimos nuestros pinitos hace ya algun tiempo con Android aprendimos que para "linkar" un elemento de una activity a nuestro archivo java, para poder trabajar con el, ya sea un botón, un Text View o cualquier otra cosa accediamos con un codigo similar a este.
salida = (TextView)findViewById(R.id.textView1);
Esto mismo normalmente lo colocabamos en el onCreate de nuestro Activity, pero desde hace ya algun tiempo lo que se viene usando son los Fragment, un fragment viene siendo una parte de lo que se va a ver en el Activity, puede ser el 100% o una pequeña parte, asi un Activity, puede estar formado por 1 o mas Fragment, en resumidas cuentas eso es lo que es.

Pues bien el problema esta en que si desde nuestro Activity, intentamos llamar a un textView que esta en nuestro Fragment como en el ejemplo superior, nos dara un error de tiempo de ejecucion, y si lo bicheamos un poco, veremos que aunque R.id.textView1 tiene un valor hexadecimal, a nuestra variable Salida sigue con null, esto es debido a que desde nuestra Activity no podemos acceder a los elementos del Fragment, para ello deberemos ir a la clase PlaceHolderFragment que nos ha creado Eclipse, y llamarlo desde alli como en el codigo que os dejo a continuación

    /**
     * A placeholder fragment containing a simple view.
     */
    public static class PlaceholderFragment extends Fragment {
        public PlaceholderFragment() {
        }
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            View rootView = inflater.inflate(R.layout.fragment_main, container, false);
            entrada = (EditText)rootView.findViewById(R.id.numEntrada);
            salida = (TextView)rootView.findViewById(R.id.numSalida);
            return rootView;
        }
    }
Espero os sirva de ayuda

Tambien os dejo el ejemplo completo y funcionando
https://github.com/rogama/Android---vista-boton-fragment

asi era como se hacia sin los Fragment
https://github.com/rogama/Android/tree/master/MasVistas

viernes, 25 de abril de 2014

Tienda en blanco al cambiar de servidor - prestashop

Llevo una temporada migrando una web a otro servidor, hoy estaba con la parte de la tienda, la cual esta montada en Prestashop, he copiado todos los archivos al nuevo server, y la base de datos, pero para mi sorpresa me encontre con que al entrar a la web me carga una pagina en blanco


no puedo entrar ni al administrador, si tecleo la URL obtengo el mismo resultado, rebuscando por hay sugerian:

  • dar permisos a las carpetas
  • borrar carpeta cache
  • me asegurado que en la base de datos apunte al "nuevo dominio"
Pero Sigue sin funcionar

no es cosa del .htaccess ya que lo he renombrado y sigo con el mismo problema

Cambio el valor de:
define('_PS_MODE_DEV_', true);
estaba en false en el archivo config/defines.inc.php

Y me da error:
Fatal error: Uncaught Table '*****_2013.****_shop_url' doesn't exist
Asi que reimportare la base de datos.

Y Solucionado!!!

jueves, 24 de abril de 2014

Fatal error: Uncaught exception 'Mailchimp_ServerError_MethodUnknown' - Mailchimp - PHP

Despues Del error que describo en: http://www.rogamainformatica.es/2014/04/fatal-error-uncaught-exception.html me aparecio este otro:
Fatal error: Uncaught exception 'Mailchimp_ServerError_MethodUnknown' with message 'Unknown method "lists/*******"' in C:\xampp\htdocs\*******\dashboard\mailchimp\src\Mailchimp.php:340 Stack trace: #0 C:\xampp\htdocs\******\dashboard\mailchimp\src\Mailchimp.php(319): Mailchimp->castError(Array) #1 C:\xampp\htdocs\**********\dashboard\test.php(6): Mailchimp->call('lists/********', '') #2 {main} thrown inC:\xampp\htdocs\*******\dashboard\mailchimp\src\Mailchimp.php on line 340

Este ultimo es simplemente por como lo llamamos
estaba usando
$lista = $mailchimp->call('list/list');
print_r($lista);
en vez de
print_r($mailchimp->call('lists/list',''));

Fatal error: Uncaught exception 'Mailchimp_HttpError' - PHP - MailChimp

Hoy he tenido que pelearme con la API de MailChimp, y ... bueno, al menos en lo que se refiere a PHP, no he mirado como esta documentada para otros lenguajes, pero a lo que viene siendo PHP, si no usas algun framework tipo Zend o Simfony en tu proyecto estas un poco vendido, buscate la vida y peleate con el.

Entre otras cosas me encontrado con este error (en un post futuro, explicare como montala en tu proyecto)
Fatal error: Uncaught exception 'Mailchimp_HttpError' with message 'API call to lists/****** failed: SSL certificate problem: unable to get local issuer certificate' in C:\xampp\htdocs\*****\dashboard\mailchimp\src\Mailchimp.php:314 Stack trace: #0 C:\xampp\htdocs\*****\dashboard\test.php(6): Mailchimp->call('lists/*****', '') #1 {main} thrown in C:\xampp\htdocs\******\dashboard\mailchimp\src\Mailchimp.php on line 314
  1. Parece ser que simplemente no tenia certificado mi servidor, la solucion a esto es muy sencilla:
  2. Descargar y guardar en donde tengamos instalado el PHP en nuestro equipo el sigueinte archivo: http://curl.haxx.se/docs/caextract.html en mi caso la ruta es: C:\xampp\php\
  3. Escribir la sigueinte linea al final de nuestro PHP.inicurl.cainfo="C:\xampp\php\cacert.pem"
  4. Reiniciar nuestro apache
Fuente:
http://redwebturtle.blogspot.com.es/2013/09/mailchimp-api-v20-ssl-error-solution.html

sábado, 12 de abril de 2014

fatal: Out of memory, malloc failed (tried to allocate 3408305152 bytes) - GIT

Acabo de encontrarme con este error al intentar subir los cambios realizados durante el dia en uno de los proyectos que estoy llevando a cabo

fatal: Out of memory, malloc failed (tried to allocate 3408305152 bytes)

He leido por hay y me encontrado soluciones de este tipo
Roberto@PORTATIL /c/xampp/htdocs/(master)
$ git config pack.threads 1
Roberto@PORTATIL /c/xampp/htdocs/(master)
$ git config pack.deltaCacheSize 128
Roberto@PORTATIL /c/xampp/htdocs/(master)
$ git config pack.packSizeLimit 128
Roberto@PORTATIL /c/xampp/htdocs/(master)
$ git config pack.windowMemory 128m
Roberto@PORTATIL /c/xampp/htdocs/(master)
$ git config pack.packSizeLimit 128m
Roberto@PORTATIL /c/xampp/htdocs/(master)
$ git config pack.deltaCacheSize 128m
Roberto@PORTATIL /c/xampp/htdocs/(master)
$ git config core.packedGitLimit 128m
Roberto@PORTATIL /c/xampp/htdocs/(master)
$ git config core.packedGitWindowSize 128m
Roberto@PORTATIL /c/xampp/htdocs/(master)
$ git repack -adf
Counting objects: 74122, done.
Compressing objects: 100% (65322/65322), done.
Writing objects: 100% (74122/74122), done.
Total 74122 (delta 14795), reused 54739 (delta 0)

Pero al intentar subir los cambios me volvia a saltar (Push) el mismo error, por lo que he decidido indagar un poco, yo actualmente uso SourceTree, me parece una herramienta imprescindible, te deja ver el arbol de Commit con una facilidad pasmosa, de un solo vistazo ves todos los cambios en el tiempo que has hecho tu y tu equipo, y con un par de click, puedes hacer merge, subir o bajar cambios, resolver conflictos.... El sueño de cualquier persona que trabaje a diario con GIT, el caso es que si vas a Settings

En la parte inferior izquierda tienes un boton que pone Edit Config File, si le das, abres el archivo con el blog de notas, y lo borras por completo, te pedira que si quieres guardarlo, le dices que si, y cierras las ventanitas que se han habierto, haces Push, y como si ubiera sido magia, el problema se ha solucionado ;)

Espero que esto os sirva de ayuda, a mi me a dado un pequeño quebradero de cabeza, en unos dias espero subir imagenes a este post, para que sea mas intuitivo

martes, 8 de abril de 2014

Warning! Your PHP configuration limits the maximum number of fields allowed in a form - Prestashop

Warning! Your PHP configuration limits the maximum number of fields allowed in a form:
1000 for max_input_vars.
Please ask your hosting provider to increase the this limit to 2481 at least or edit the translation file manually.

Para solucionar este error de nuestro Prestashop deberemos cambiar en el php.ini dicho valor, eso es simplemente abrirlo el cual en nuestro equipo estara ubicado en :
C:\xampp\php

Cambiaremos el 1000 que viene por defecto por el valor que nos da el error u otro superior, finalizaremos
reiniciando apache

Otra opción, si esto no nos funciona, o si no tenemos acceso al php.ini es introducir
php_value max_input_vars 4000
en nuestro .htaccess
Un abrazo amigos

sábado, 5 de abril de 2014

POST git-receive-pack (chunked)

Aveces al hacer Push con Commit que integren archivos de gran tamaño; nos podremos encontrar con el siguiente error
POST git-receive-pack (chunked)
para solucionarlo, en la consola teclearemos
git config http.postBuffer 5924288000
y volveremos a intentar Push, con esto debería estar solucionado, si os sigue dando error, o cambia chunked por un dígito, volver a teclear en consola el mismo código, pero aumentando el número de buffer que hemos tecleado anteriormente por otro que sea mayor al que nos da el error

fuente:
http://stackoverflow.com/a/14594496

viernes, 4 de abril de 2014

Llevar el scroll abajo - JQuery

Os propongo un caso práctico relacionado con el último articulo que os escribí:
http://www.rogamainformatica.es/2014/04/obtener-el-alto-total-de-la-pagina.html

En el os explicaba como obtener el alto total de la pagina, para hacerlo un poco mas útil vamos a hacer que nuestra pagina nada mas cargar se desplace hasta la parte inferior.

Con estas 3 sencillas lineas podremos mover el scroll de nuestra página hasta abajo
$(document).ready(function($) {
     var WH = $(window).height();
      var SH =$(document).height();
     $('html, body').stop().animate({scrollTop: SH- WH});
}
y cambiando la última linea por

     $('html, body').stop().animate({scrollTop: SH- WH}.3000);

además la animaremos y veremos como va bajando sola durante 3 segundos.

jueves, 3 de abril de 2014

Obtener el alto total de la página - JQuery

Con esta sencilla linea podremos obtener el alto total de la página, desde el comienzo del header hasta el fin del footer mediante JQuery; es decir la totalidad del alto de la página.

var SH =$(document).height();

Espero os sirva de ayuda ;)

martes, 25 de marzo de 2014

Formatear un número, con decimales y miles - PHP

para formatear un numero, con decimales y miles desde PHP tan solo deberemos llamar a la siguiente función

number_format($numero, 2, ",", ".");

en donde $numero es el numero que queremos formatear
2 el numero de decimales que queremos sacar
"," el separador de decimales
"." el separador de miles

Por defecto vienen los valores americanos el "." para separar decimales y la "," para los miles

fuente
http://www.php.net/manual/es/function.number-format.php

sábado, 15 de marzo de 2014

Deshabilitar click derecho - JQuery

Hace unos días un cliente me pidió que no se pudieran descargar las imágenes de su web, y a pesar de indicarle que siempre se pueden descargar, comenzando por que para verse, el navegador las descarga y almacena en su carpeta de cache, y siguiendo por que con algo tan básico como una captura de pantalla y luego recortándola con photoshop, o incluso con el paint, ya las tiene.

por lo que le recomendé que metiera una marca de agua con su marca para sus fotos, pero aun así me insistió para que no pudieran hacer click derecho guardar imagen, por lo que aquí os dejo el código utilizado
        <script>
$(document).ready(function(){
            $(document).bind("contextmenu",function(e){
                return false;
            });
        });
        </script>
Con este sencillo script escrito con JQuery deshabilitaremos el botón derecho en nuestra web.

Agradecimientos a Jorge Maiden, el cual lo tiene publicado en su blog.
Fuente: http://www.bufa.es/deshabilitar-boton-derecho-jquery/

Como redondear un decimal, mostrando solo el numero de decimales que necesitemos - JavaScript

Si decidimos sacar por pantalla un numero decimal resultante de alguna operación en JS lo mas seguro es que nos salga un chorro de números al estilo
9.99789047...

Lo cual esta claro rara vez nos va a interesar para controlarlo podemos guardar ese numero en una variable

numFloat = 9.99789047;

y mostrar el numero con los decimales que nos interesa, redondeado al siguiente si la primera cifra que vamos a ocultar es mayor a 5 por ejemplo

alert (numFloat.toFixed(2));

nos dará un mensaje emergente con un 10.00 ya que solo queremos mostrar 2 decimales y 9.997 el 7 es mayor a 5 así que el siguiente 9 se redondea al inmediato superior lo cual nos lleva a 10.00

si hiciéramos la siguiente operación

numFloat = 10/3;

nos daría 3.3333

lo cual redondeandolo

alert (numFloat.toFixed(2));

tendremos un alert con 3.33

Espero os sirva de utilidad

Fuente: http://www.w3schools.com/jsref/jsref_tofixed.asp

sábado, 1 de marzo de 2014

Comprobar que tiene indexado google de una url

Una forma sencilla de comprobar que paginas tiene indexadas google de una de nuestras webs, es sencillamente ir al buscador y teclear

site:www.nuestraweb.es

por ejemplo:
site:www.rogamainformatica.es

Un saludo y a empezar a mejorar el posicionamiento!!

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

martes, 28 de enero de 2014

nusoap_client: Error: XML error parsing SOAP payload on line 1: Not well-formed (invalid token)

Este error nos aparecerá, al intentar consumir un WebService, mal montado, ya que en algún lugar tiene un echo, simplemente cambiamos los echo por return en el webService Server y arreglado ;)

miércoles, 22 de enero de 2014

Mejorar la velocidad de transferencia - Filecilla - FTP

Mi cliente FTP favorito Filecilla viene mal configurado por defecto, o por lo menos de forma mejorable, encontré estas opciones el otro día por hay trasteando, aburrido mientras subía unos 100 megas de una instalación de drupal.
Con estos sencillos pasos aumentaremos la velocidad de transferencia hasta en 5.

Lo Primero que debemos hacer es ir a Edición y allí opciones

Se nos abrirá una nueva ventana, en la que deberemos ir hasta transferencias, y cambiar el número de transferencias simultaneas a 10, que es el máximo que puede manejar Filecilla, dejando los demás valores como vemos en la imagen, que es como los trae por defecto. El siguiente paso sera darle a aceptar y listo, ya tenemos nuestro Filecilla descargando y subiendo archivos 5 veces mas rápido.


Un saludo y a disfrutarlo!!

jueves, 16 de enero de 2014

Comprobar todas las tablas de una base de datos - MySql

Cuando programamos web, es muy habitual usar bases de datos MySQL, en estos casos seguramente hayamos tenido la necesidad de usar la orden CHECK TABLE ''tablename'' para comprobar que nuestra tabla no este corrupta por alguna sentencia SQL que se haya quedado a medias, o por alguna otra razon; pero... y cuando lo queremos hacer en todas nuestras tablas??

Para ello deberemos entrar por SSH en nuestro servidor, logueandonos con nuestro usuario y contraseña, seguramente si estamos en un servidor compartido no tengamos acceso, en ese caso creo que lo mejor sera contactar con nuestro proveedor de hosting.
Una vez estemos logeados deberemos teclear en la consola lo siguiente:
mysqlcheck -u root -p --auto-repair --check --optimize --all-databases
Cambiando root por nuestro usuario de la BBDD; y la p es para que pida la pass, la cual deberemos teclear en la consola, recuerda que no aparecen ni *(asteriscos) ni nada mientras la escribes, no pierdas el hilo por que no sabras por donde vas, otra opcion es cambiar la -p de por -NuestraPassword aunque no se recomienda, ya que se enviaria sin encriptar, y quedaria legible para personas que pasaran cerca nuestra.
Un saludo y espero os resulte de utilidad

Conectar por SSH - PuTTY

Para conectar por SSH a un servidor necesitaremos su IP, un usuario y una password, tambien sera necesario un puerto, aunque por defecto es el 22
Un buen programa para Windows, aunque esta disponible para otras plataformas es PuTTY, de muy sencilla instalacción, y mas sencillo de usar.



Os dejo el link a su pagina de descargas, para que bajéis la versión que mas os convenga según vuestro sistema

http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html

miércoles, 15 de enero de 2014

Warning: call_user_func() expects parameter 1 to be a valid callback, function 'rules_events_entity_unchanged' not found - Drupal

Al actualizar el modulo de commerce coupon, a su nueva versión 7.x-2.0-beta1 lanzada hace unos días nos aparecerá un Warning en pantalla.
Para solucionar este error:

Warning: call_user_func() expects parameter 1 to be a valid callback, function 'rules_events_entity_unchanged' not found.

lunes, 13 de enero de 2014

Undefined variable: tab_root_map en _menu_translate() - implode() [function.implode]: Invalid arguments passed en _menu_translate() - Drupal

Para solucionar el error:

  • Notice: Undefined variable: tab_root_map en _menu_translate() (línea 787 de /home/admin/public_html/includes/menu.inc).
  • Warning: implode() [function.implode]: Invalid arguments passed en _menu_translate() (línea 787 de /home/admin/public_html/includes/menu.inc).