Pensando en cambiar de hosting

Será porque hoy es sábado y voy bien de tiempo con mis proyectos que tengo a medias, pero hoy me apetece escribir una entrada mas larga.

Llevo tiempo con mi pagina web en 1and1, y creo que es el momento de pensar si es el mejor hosting en el que puedo tener no solo el blog, sino todas las paginas correspondientes a mis aplicaciones móviles, tanto de IOS como de Android, ademas de aquellas necesarias para el correcto funcionamiento de varias aplicaciones que he desarrollado a lo largo de los años.

Ultimamente he desarrollado varias aplicaciones como Datercam para Android ( ya existía para IOS) que permite poner información como la fecha, la hora, las coordenadas gps y la ubicación ( obtenida mediante google ) a las fotos, para que no olvides cuando y donde hiciste una foto.

O mi ultima aplicación Emojime publicada hace 3 días, que permite coger una foto, bien sea de la cámara o del carrete, detectar las caras y cargar emoticonos de forma aleatoria, lo que permite “jugar” a encontrar la combinación de caras que mejor se adapte a la foto, una vez tienes el resultado puedes compartirla o guardarla.

Pero volviendo al tema con el que empece, últimamente he tenido problemas con mi pagina en 1and1, momentos en los que no puede acceder, errores internos del servidor ( que luego no dan mas información ) o simplemente que la velocidad no es la deseada.

A eso se junta que hace tiempo me cambiaron la tarifa de forma unilateral, después de 8 años con ellos ya no podían mantenerme el contrato que tenia con ellos, y me pasaban a uno superior ofreciendo cosas que no necesito y con ello un aumento de precio considerable.

Otro de los motivos por los que tengo que pensar en cambiar de hosting es que me gustaría que tuviera acceso a la base de datos de forma nativa mediante host y puerto, mientras que ahora solo puedo acceder mediante phpmyadmin una vez que me he logueado en el panel de control, lo que relentiza bastante el trabajo con base de datos.

Hace unos días que encontré un articulo  donde hablaban de tres hosting baratos y exponían una serie de pruebas que habian hecho para valorar cual era la mejor, los tres candidatos eran: Webempresa, Raiola y Sered, y las pruebas que realizaban eran: benchmark, velocidad de renderización, estabilidad del servidor o load impact entre otros.

Aquí me pilla de novato, pues no tenia ni idea de en que consistían muchas de las pruebas que se realizaban, pero me ha servido para aprender mas acerca de los pasos necesarios para que tu web esté en un hosting capaz de soportar cargas sin que el usuario se vea afectado. Es mas creo que estas pruebas pueden ser aplicadas en mi puesto de trabajo y se lo comentaré a la gente de sistemas para organizar un plan de actuación.

Aunque en el articulo si mostraban un ganador, como en casi todas las comparativas  cada una de ellas destacaba en algún punto por lo que el resultado no era fácil de determinar.

Como en el articulo no hablaban de si el acceso a base de datos era con phpmyadmin o si por el contrario permitían acceso directo no me queda mas remedio que preguntarlo directamente, recurro a llamar por teléfono y quedo a la espera, en unos segundos me atiende un empleado muy amable que me responde a mi gran duda, y la respuesta es afirmativa, CPANEL permite habilitar conexión externa con la base de datos, por lo que acaba de convencerme para tomarlo como claro candidato a ser mi proximo hosting, a ver si el proximo post ya está ahí alojado.

 

 

Modificaciones sobre boton flotante

Partiendo del componente FabOptions

Añadiendo en la clase FabOptions.java el método:

public void changeColorbackground(int color){
Drawable d = mBackground.getBackground();
d = DrawableCompat.wrap(d);
DrawableCompat.setTint(d.mutate(), color);

}
public void changeColor(int color){
mFab.setBackgroundTintList(new ColorStateList(new int[][]{new int[]{0}}, new int[]{color}));

}

y llamandolo pasandole el color:

fabOptions.changeColorBackground((getResources().getColor(R.color.verde));

Podemos obtener resultados como:

Y para cambiar el color del boton principal:

fabOptions.changeColor((getResources().getColor(R.color.verde2));

Ordenar columnas datatable jquery

Hay determinadas columnas que no se ordenan bien de manera nativa utilizando jquery.datatable.js
Por ejemplo las fechas

Las fechas en español no se ordenan bien, para ello tenemos que indicarle un valor con la fecha en formato americano de manera que no se vea pero que le sirva para ordenar:

Donde lo importante es poner un elemento <span style=”display:none”>valor util para ordenar</span> que en el caso de las fechas es con el formato americano.

 

Redirigir trafico de un dominio viejo a uno nuevo

Vamos a utilizar htaccess para que cualquier dirección del viejo dominio apunte al nuevo

RewriteEngine on
RewriteCond %{HTTP_HOST} ^viejodominio.com [NC,OR]
RewriteCond %{HTTP_HOST} ^www.viejodominio.com [NC]
RewriteRule ^(.*)$ http://www.nuevodominio.com [L,R=301,NC]

Si en el nuevo dominio la estructura es la misma que en el viejo, podemos hacer que la mantenga cambiando la ultima linea

RewriteRule ^(.*)$ http://www.nuevodominio.com/$1 [L,R=301,NC]

Y como bonus en el nuevo dominio vamos a hacer que cualquier dirección que no exista (Error 404) nos lleve a la pagina principal

ErrorDocument 404 /index.php

proteger un fichero php mediante usuario y clave

Para proteger un archivo vamos a utilizar .htaccess

<FilesMatch "fichero_a_proteger.php">
AuthName "Acceso restringido"
AuthType Basic
AuthUserFile  /ruta/absoluta/fichero/.htpasswd
require valid-user
</FilesMatch>

para ello tenemos que crear un fichero de claves .htpasswd

prueba:$apr1$sw7c8otq$YXGtq/vVLMc3jl4yOPCGt.

Lo podemos hacer desde esta pagina enlace

Y en el fichero htaccess tenemos que poner la ruta absoluta del servidor al archivo htpasswd, para ello podemos utilizar el codigo PHP siguiente:

$dir = dirname(__FILE__);
echo "Full path to this dir: " . $dir . "";

Poner borde a un botón android

Función para poner borde a un botón de manera programática, creado en una clase de utilidades.

 

public class Util {

public static void bordecolorboton(Button b,int color,int radio){
  if (b!=null){
    GradientDrawable gd = new GradientDrawable();
    if (color!=0){
      gd.setColor(color); 
    }
    gd.setCornerRadius(radio);
    gd.setStroke(1, 0xFF000000);
    b.setBackground(gd);
  }
}
}

Luego en el método onCreate, podemos llamar a la función pasandole el botón

  btcolor1 = (Button)popupView.findViewById(R.id.btcolor1);
  btcolor1.setOnClickListener(new ImageButton.OnClickListener(){
      @Override public void onClick(View v) {
          //que haga lo que tenga que hacer.....
      }
  });
 //pone un borde negro de 1 px y color de fondo definido en el fichero de colores	   
 Util.bordecolorboton(btcolor1,Color.parseColor(getResources().getString(R.string.color1)),10);
 
	  

Reiniciar autoincremento en mysql

Si tenemos una tabla (nombredelatabla) con la clave autoincremental, con los valores:
1 pepito
2 jaimito
3 equivocado

Si borramos el 3, cuando queramos insertar un valor nos pondrá el 4.

para poder reutilizar el 3, tenemos que modificar la tabla:

Alter table nombredelatabla auto_increment=3

Donde el número es el que queremos que sea el siguiente

Presentar un input text con texto cargado en Android

Para presentar una ventana con una caja de texto y poner un texto por defecto:

private void preguntaTexto(){
AlertDialog.Builder alert = new AlertDialog.Builder(this);

alert.setTitle(getString(R.string.titulosms));
alert.setMessage(getString(R.string.telefonosms));

// Set an EditText view to get user input
final EditText input = new EditText(this);

input.setText("TEXTO_QUE_QUEREMOS CARGAR");
alert.setView(input);

alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
String textorecuperado= input.getText().toString();
//aqui hacemos lo que queramos con el texto que el usuario ha introducido

});

alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
// No hacemos nada
}
});

alert.show();
}

------------------------------------
@Override
public void onAttachedToWindow() {
openOptionsMenu();
};