Pages

viernes, abril 11, 2014

Linux, comando find, encontrar archivos de un determinado usuario de gran tamaño y obtener un output legible.

Básicamente necesitaba encontrar todos los archivos de un determinado usuario dentro del directorio "home", podían no estar en su home solamente, mayores a 10M. Para ello utilicé el comando "find", rejuntando de varias fuentes llegué a esta hermosa conclusión:
 
sudo find /home -user juancarlosbatman -size +10M -exec ls -lh {} \; 2>/dev/null

vamos por partes:

utiliz el sudo para poder acceder al resto de las carpetas de los otros usuarios. Por supuesto que mi usuario debe pertenecer al grupo sudoers y el root debe tener permiso de listar el resto de estas carpetas, aunque extraño, podría ser que no.

find -> el comando en si.

/home -> La ruta a partir de la cual quiero buscar

-user juancarlosbatman -> el usuario dueño de los archivos a revisar

-size +10M -> Tamaño minimo de los archivos a buscar, tambien podría agregar otro -size -20M, entonces buscaría archivos entre 10 y 20 megabytes.

-exec ls -lh {} \; -> con el resultado ejecutar el comando ls con la opción -lh (-l devuelve una lista mas completa, -h la hace legible para el ser humano, en vez de poner 1024000 escribe 10G), el comando find tiene las opciones -print o -ls, el problema es que -print trae poca info y -ls es igual al comando ls -l, pero no tengo el modificador -h, que lo hace mas facil, por eso es preferible utilizar el exec.

2>/dev/null -> Es posible que el usuario con el que ejecutamos el comando no tenga permisos de lectura en determinadas carpetas, o a determinados archivos, de forma que el comando find comenzara a llenar la pantalla con rutas de archivos y la leyenda "Permission denied", entre los archivos que vaya encontrando. Con esta sentencia, desviamos la salida de errores hacia el dispositivo null, es decir, no molesta.

Espero que les sirva, tanto como a mi.

sábado, enero 04, 2014

CyanogenMod forzar modo 3G ó WCDMA

Tengo un Samsung Galaxy Note II, y hace unos meses le instalé el CyanogenMod. El único problema que he tenido hasta hoy es que no podía forzar el modo 3G, todas las opciones que da son siempre 2g+ algún modo 3g, es decir que si tiene una señal fuerte EDGE, y una 3G o HSDPA mala, va siempre al EDGE, y en algunos casos peores se va a GPRS.
La mala noticia es que no hay una opción de configuracion directa para solucionarlo.
La buena es:
  • Vayan al discador telefónico y escriban:
         *#*#4636#*#*
  • Dentro del menú de configuración que les aparece vayan a:
         Informacion del dispositivo.
  • Se van a encontrar primero información del IMEI, Nro. de teléfono y red, luego un botón para ejecutar un testeo, luego mas información de estado e inmediatamente un menú de selección (Está justo antes de que vuelva a comenzar un juego de botones) que les va a decir algo como GSM Preferred., lo cambian por WCDMA Only y voilá!!. 
Si vuelven a entrar luego van a ver que quedó en WCDMA Preferred, así que asumo que si no tiene 3G de ningún tipo pasará a una red 2G solo.

La solución la encontré en el blog de Rodrigo Zamora Nelson, así que nobleza obliga ahi va el link: http://rodrigo.zamoranelson.cl/?p=1384

lunes, diciembre 30, 2013

Windows XP Error 0x0000007E creando una maquina virtual con VirtualBox

Hice una Máquina Virtual en Virtual Box a partir de una imagen realizada con  Clonezilla. Creé la máquina, puse la imagen de Clonezilla adentro del CD de la máquina virtual y restauré la imagen.
Hasta ahí todo normal. Bootee la máquina virtual y dió una pantalla azul con el error mencionado en el titulo. Como habitualmente ocurre, cuando uno crea una máquina virtual a partir de una existente. 
Bootee nuevamente a prueba de fallos y borré todos los dispositivos de hardware que me permitió Windows para que los redetecte (habitualmente esto funciona.)
Para no hacerlo demasiado largo, diré que sin importar cuanto lo intentase, siempre terminaba booteando con la pantalla azul y reiniciándose inmediatamente. 
Para poder chequear el error sin que la máquina se reinicie:
  1. Botón derecho sobre MiPC y en el menu contextual -> Propiedades
  2. Vayan a Opciones avanzadas -> Inicio y recuperación -> Configuración
  3. Destilden la opción que dice "Reiniciar automáticamentente".

Con eso se quedará en la pantalla azul y podrán comprobar el código de error.

La solución final la encontré en el sitio de soporte de microsoft. Básicamente tiene que ver con que la máquina "real" poseía un procesador Intel, y yo estaba intentando hacerla funcionar sobre un procesador AMD, eso aparentemente no le gusta demasiado al XP.
Dejo el vínculo original para quien lo quiera consultar, no obstante detallo el procedimiento para solucionarlo a continuación.
  1. Reinicien el equipo en modo a prueba de errores.
  2. Hagan clic en Inicio, hagan click en Ejecutar, escriban regedit y, a continuación, hagan click en Aceptar.
  3. Busquen y, a continuación, hagan click en la clave del registro siguiente:
    HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Intelppm
  4. En el panel derecho, haga clic en la entrada de Inicio ó Start y, a continuación, hagan click en Modificar.
  5. En el cuadro información del valor , escriban 4 (no le den importancia a si es decimal o hexa, en realidad, 4 es 4 en ambas bases numéricas) y, a continuación, hagan click en Aceptar.
  6. Salgan del Editor del registro.
Voilá!!



Artículo original: http://support.microsoft.com/kb/953356

lunes, agosto 26, 2013

Transferir variables o datos entre dos HTML, Obtener parametros pasados por GET en HTML

¿Cómo llamar de un HTML a otro enviando informacion y recibirla del otro lado?.


Generalmente uno envía información entre un html y un PHP, por ejemplo, o al lenguaje de servidor que mas les guste. Pero en este caso necesitaba servir una pagina desde PHP y no utilizar un motor de plantillas para reemplazar valores, Envié entonces un header del tipo
"header ('Location: pp.html?parametro='.$variable)", dentro del html, utilice esta funcion para leer este primer parametro que es el valor que me interesaba y transferirlo a una variable de formulario:

function leerGets() {
  var parameters = location.search.substring(1).split("&");
  var temp = parameters[0].split("=");
  document.getElementById("campo").value = unescape(temp[1]);
}
 
Vamos por partes:
 
location.search.substring(1) 

El objeto location, contiene la dirección escrita en el explorador. La propiedad search del objeto contiene el query string. Es decir que suponiendo que la direccion completa fue: http://pp.htm?parametro=xxx&param2=yyy
location.search devolvería ?parametro=xxx&param2=yyy . Al agregarle el método substring con un "1" como parámetro, cortamos el primer caracter de la cadena, en este caso el "?"
 
var parameters = location.search.substring(1).split("&")

al resultado del query string lo dividimos con la funcion split en un array de pares de valores separados por el caracter "&" y lo asignamos a una variable, en este caso parameters.
 
var temp = parameters[0].split("=");

Ahora tomamos el primer conjunto de parametro=valor (es el que me interesa a mi, aunque bien podríamos haber recorrido todo el query string) y lo volvemos a dividir pero en este caso por el carácter "=".
Es decir. parameters[0] contiene "parametro=xxx" ahora tendre un array "temp" que contendra temp[0] = "parametro" y temp[1] = "xxx".
 
document.getElementById("campo").value = unescape(temp[1]);

asignamos el valor a una variable de formulario con id="campo".
unescape(valor) me permite sacar los caracteres de codificación del query string. si por ejemplo, parámetro hubiese contenido espacios entonces habría llegado con un formato parecido a este parametro=Juan%20Perez.

Listo!. Espero que sirva.

Agregado mas tarde...

Y ya que estamos amplio la función y la convierto en algo mucho mas útil.

 
function leerGets() {
  var gets = {}; temp=[];
  var parameters = location.search.substring(1).split("&");

  parameters.forEach(function(entrada) {
              temp = entrada.split("=");
              gets[temp[0]] = unescape(temp[1]);
  });
  return gets;
}

martes, agosto 07, 2012

JSONP - Cross Domain AJAX, Ejemplo con jQuery y PHP

Si ud. como yo, es un pobre programador que ha intentado hacer alguna aplicacion para telefonos Android y tuvo la peregrina idea de hacer que el telefono tenga la logica de su lado y se comunique via Ajax con su servidor... Entonces esta entrada se la dedico desde el fondo de mi corazón.

Después de mucho deambular leyendo un montón de incoherencias llegué a un post que me mostró la luz. http://bob.ippoli.to/archives/2005/12/05/remote-json-jsonp/
De ahí en mas avancé y aqui van mis conclusiones.

1) llamada ajax en javascript con jQuery:

$.ajax({
 dataType: "jsonp",
 url: "http://algunotrodominio.com/unscript.php",
 data: "parametro1=valor1&parametro2=valor2",
 type: GET,
 crossDomain: true,
 jsonpCallback:'jpCallback',
 success: function(jsondata) {   
  datos = jsondata[0].respuesta.datos;
  otros = jsondata[0].respuesta.otracosa;
  (hacer algo con todo esto.)
 },
 error: function (jqXHR, textStatus, errorThrown) {
   (haceralgo)
 }
});

jpCallback(jsondata){
  (pueden ejecutar alguna validación previa con los datos,
 o no hacer absolutamente nada.)
} 

2) unscript.php :
<?php

$json = '{ "respuesta": {
   "datos": [ 
              {"codigo": 1, "dato": "algo1"},
              {"codigo": 2, "dato": "algo2"}
            ],
   "otracosa":"undatomasadevolver"  
   }   
}';
  
echo 'jpCallback(['.$json.'])';
?> 

Y eso es todo. Si no lo captaron: al $.ajax() de jQuery modifican el dataType a "jsonp", esto solo ya habilita a hacer una llamada cross domain. pero hay un parametro mas crossDomain : true. Sin esto tambien funciona. jsonpCallback : 'nombredefuncioncallback' Al decir que esto es "jsonp" jQuery agrega 2 parametros a la cadena de datos que se envian por ejemplo:

http://algunotrodominio.com/unscript.php?callback=jQuery17206061169685839634_1344380380503&parametro1=valor1&parametro2=valor2&_=1344380387364

si en cambio agregamos el parametro jsonpCallback : 'funcioncallback' entonces la llamada se parecera a esto:

http://algunotrodominio.com/unscript.php?callback=funcioncallback&parametro1=valor1&parametro2=valor2&_=1344380387364

Como sea lo importante es que la devolucion del script PHP debe ser el nombre de la funcion callback y como parametro de la funcion el JSON que quiero devolver. jQuery ejecuta entonces la funcion callback y luego al success: envia solo el objeto JSON. En el ejemplo muestro como acceder a los distintos componentes.

Espero que les sea útil.