Pages

lunes, febrero 10, 2020

tuneles SSH por consola.

A partir de la version 19.04 de Ubuntu, el gstm (Gnome SSH Tunnel Manager) dejo de funcionar, lo cual me llevo a repasar como se creaban los port forwarding desde consola. Sin demasiado misticismo ahi va la explicacion con un ejemplo

ssh -N -f usuario@direccionweb.algo -p 1052 -L 5000:localhost:3050

Vamos por partes.

ssh -> es el comando ssh

-N -> evita que ejecute un comando remoto, en este caso no nos abrira un shell remoto.

-f -> que se ejecute en background. esto permite dejar el tunel establecido corriendo en segundo plano. 

usuario@direccionweb.algo -> esta es la ruta del servidor al que vamos a conectarnos. 

-p 1052 -> en caso de que no utilice el puerto por defecto del servicio ssh (22) aclaramos el puerto con la opcion -p, en este caso el servidor al que nos conectamos, el servicio ssh escucha en el puerto 1052

-L 5000:localhost:3050 -> una vez conectados al servidor, le informamos que queremos acceder al puerto 3050 de la maquina localhost de la red remota a traves del puerto local 5000. si quisieramos acceder a otra maquina de la red remota, reemplazariamos "localhost" por la ip de la otra maquina.

Y eso es todo.
En caso de necesitar mas de un mapeo, se repite dentro de la misma sentencia el comando -L con cada mapeo que se quiera agregar.
Finalmente, para eliminar los tuneles creados, los listamos con el siguiente comando:

sudo lsof -i -n | egrep '\<ssh\>'


y hacemos

kill 9859

(tomando la imagen como ejemplo)

jueves, mayo 10, 2018

Cambiar a www-data a usuario comun

Si necesitan ejecutar comandos como www-data, lo que habitualmente hacemos es lo siguiente:

sudo -u www-data 

el problema de este metodo es que, habitualmente, olvido poner el la ejecucion como usuario y si estoy logueado como root entonces termino modificando archivos y dejandolos inaccesibles para el usuario www-data con los consiguientes errores de apache. para tal fin es preferible permitir que www-data pueda loguearse y existir como un usuario comun. para ello basta con:

usermod -s /bin/bash www-data

luego de esto y habiendonos logueados como root

sudo su

solo basta hacer

su www-data

y podremos trabajar como dicho usuario.

jueves, agosto 10, 2017

Simular una ejecución de CRON.

Esto lo publicó alguien aquí https://serverfault.com/questions/85893/running-a-cron-job-manually-and-immediately/85906

Una maravilla!.

crontab -l | grep -v '^#' | cut -f 6- -d ' ' | while read CMD; do eval $CMD; done
Las explicaciones del caso:

crontab -l       => lista todas las tareas en cron
grep -v '^#'     => elimina de la salida todos los comentarios.
cut -f 6- -d ' ' => borra la programación de tareas de cron
while...         => ejecuta una por una las tareas de cron.


GENIAL!

miércoles, diciembre 28, 2016

PHP FLUSH(), anda?

Despues de pasear por toda una serie de inutiles escribiendo soluciones mágicas devuelvo la única que realmente sirve.

header("Cache-Control: no-cache, must-revalidate");
header('X-Accel-Buffering: no');

Setear ambos headers provoca que la sentencia flush() del php funcione correctamente. Cualquier otra solucion que encuentren son solo pérdidas de tiempo.

Nobleza obliga, la solución la encontré aqui: http://www.jeffgeerling.com/blog/2016/streaming-php-disabling-output-buffering-php-apache-nginx-and-varnish

viernes, julio 22, 2016

FIREBIRD - Ejemplo: Como insertar registros entre gdb diferentes a traves de PSQL

No encontré un ejemplo completo, así que ahí va el mío. Lo generé en transacciones autónomas con COMMIT cada 5000 registros. Cualquier duda pregunten.

*Actualizado 22/07/2016 la inserción de los 5000 registros queda en una transacción separada, lo que permite por un lado, generar un commit pequeño y por otro ver el progreso del script, ya que podemos ir chequeando como se va llenando la tabla destino. He modificado el numero de registros de 5000 a 10000, 15000, 20000, 25000 y 30000. Tuve resultados significativos entre los 5000 y los 20000. Luego los commits comenzaron a demorarse un poco con lo cual no ganaba nada mas allá de los 20000. No encontré demasiada documentación a este respecto, si alguien me puede aportar algo le estaré agradecido. Las pruebas se hicieron copiando tablas entre bases de 30 millones de registros y mas. Si bien el proceso es lento, no repercutió en la performance general del servidor. Se trata de bases de producción con muchos usuarios trabajando sobre la base de origen. 

EXECUTE BLOCK
AS
DECLARE VARIABLE QUERY VARCHAR(5000);
DECLARE VARIABLE REGISTROS INTEGER;
DECLARE VARIABLE FLAG SMALLINT;
DECLARE VARIABLE FCAMPO1 VARCHAR(15);
DECLARE VARIABLE FCAMPO2 VARCHAR(15);
DECLARE VARIABLE FCAMPON VARCHAR(50);
BEGIN
  REGISTROS=1;
  FLAG=1;

  IN AUTONOMOUS TRANSACTION DO DELETE FROM TABLALOCAL;

  WHILE (FLAG=1) DO BEGIN
    FLAG=0;
    QUERY ='SELECT CAMPO1, CAMPO2, CAMPON
            FROM TABLAORIGEN
            ROWS '||:REGISTROS||' TO '||(:REGISTROS + 4999);
    IN AUTONOMOUS TRANSACTION DO BEGIN
      FOR
        EXECUTE STATEMENT QUERY
        ON EXTERNAL DATA SOURCE 'server:/ruta/base.gdb'
        AS USER 'SYSDBA'
        PASSWORD 'masterkey'
        INTO :FCAMPO1, :FCAMPO2, :FCAMPON
        DO BEGIN
          FLAG=1;
          INSERT INTO TABLALOCAL (CAMPO1, CAMPO2, CAMPON)
          VALUES (:FCAMPO1, :FCAMPO2, :FCAMPON);
        END
    END
    REGISTROS = REGISTROS + 5000;
  END
END

jueves, mayo 19, 2016

bash history

Gran ayuda es el "history" prácticamente eterno de comandos de consola. Dentro de un terminal basta con subir o bajar con el cursor para ver cuales fueron los comandos ingresados con anterioridad. Esta información queda almacenada en el archivo .bash_history que está en la carpeta home de cada usuario. Sin embargo, para buscar un comando en particular desde la consola misma podemos recurrir al viejo y querido grep. el comando history devuelve el contenido del archivo bash_history enumerado. Basta con hacer un pipe de la salida hacia el grep y entrecomillar lo que estamos buscando. Ej:

history | grep "WINEDEBUG"

viernes, agosto 14, 2015

href="sftp://... ¿Como abrirlo desde el explorador?

Esto es para linux. No tengo idea de como, ni de si se puede hacer en Windows. De ser asi, lamento no poder ayudarlos.
Dentro de la carpeta
/home/[su-usuario]/.local/share/applications

creen un archivo con extensión .desktop con el nombre que mas les guste. en mi caso creé el sftp.desktop con el siguiente contenido.

#!/usr/bin/env xdg-open
[Desktop Entry]
Version=1.0
Terminal=false
Type=Application
Name=sFTP Nemo
Comment=Abrir Nemo para conexiones sFTP desde el explorardor
Exec=nemo %U
X-MultipleArgs=True
Encoding=UTF-8
MimeType=x-scheme-handler/sftp
NoDisplay=true
Presten atención, si utilizan el gedit, automáticamente les agregará la extensión .desktop, con lo cual pueden terminar con un archivo del estilo sftp.desktop.desktop, tomen sus recaudos. Si utilizan Nautilus, cambien nemo por nautilus. Grábenlo y dentro de la terminal escriban el siguiente comando:
xdg-mime default sftp.desktop x-scheme-handler/sftp

ATENCION: Recuerden que yo cree sftp.desktop, si crearon otro archivo invoquen ese nombre. para verificar que funcione correctamente ejecuten:

xdg-open sftp://[su-usuario]@[urldelservidor]:[puertodeescucha]

si abre su explorador de archivos con la dirección del server, esta ok!.
Eso es todo, a partir de ahora su explorador invocará el programa xdg-open cada vez que tenga una llamada a un url-scheme desconocido

Cito las fuentes de donde obtuve la información:

martes, diciembre 09, 2014

FIND + SED, reemplazo masivo de texto dentro de archivos

Mi ejemplo: Necesito encontrar el texto:
{-$FOLDER-}

y reemplazarlo por el texto :
{-$SWFOLDERROOT-}/

en todos los archivos de extensión .tpl

que se encuentren a partir del directorio en el que estoy posicionado en todas las carpetas contenidas. El comando es el siguiente:
find -type f -name "*.tpl" -exec sed -i 's~{-$FOLDER-}~{-$SWFOLDERROOT-}/~g' '{}' \;

Las aclaraciones del caso:

find -type f -name "*.tpl"  buscar los archivos cuyo nombre sea o contenga *.tpl

- exec por cada resultado anterior ejecutar el comando que sigue.

sed -i (stream editor, editor de flujo seria la traduccion literal, la opción -i (in place) indica que la edición se realice sobre el mismo archivo. Es decir lo reemplaza. si quisieran backupear el original podrían hacer -i.tmp o la versión larga --in-place=.tmp

's~{-$FOLDER-}~{-$SWFOLDERROOT-}/~g'

la expresión va encerrada entre comillas simples.
s (comando sustituir), ~ es un tipo de separador, sed acepta ~ ó / ó | como separadores válidos. a continuación del separador va la expresión a buscar. En este caso {-$FOLDER-}, luego otro separador ~ luego la expresion de reemplazo. En este caso {-$SWFOLDERROOT-}/, luego otro separador ~ y finalmente el comando g (global), que indica que reemplace todas las ocurrencias.

{} El par de corchetes vacios es reemplazado por el nombre de archivo que va a pasar find como parametro de la funcion -exec. El uso correcto de la función debería encerrar las llaves entre comillas simples para evitar que el shell lo interprete como otra cosa.

\; todo lo que sigue a continuacion del primer comando del exec se considera argumentos del comando a excepcion de '{}', hasta que se encuentre un ; para mayor seguridad de que el shell no lo interprete como otra cosa se lo escapa con \, aunque tambien podría encerrarse entre comillas.

Los sitios de los que saqué información:
http://www.brunolinux.com/02-The_Terminal/Find_and%20Replace_with_Sed.html 
http://www.grymoire.com/Unix/Sed.html#uh-62h 
http://www.comoinstalarlinux.com/comandos-linux-find-con-ejemplos-3/

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.

viernes, julio 27, 2012

FIREBIRD: Convertir un Unix timestamp, equivalente a MYSQL FROM_UNIXTIME()

En teoría los Unix timestamp, son los segundos transcurridos desde la medianoche del primero de enero de 1970, en MySQL hay dos funciones para manejar estos timestamps FROM_UNIXTIME() y UNIX_TIMESTAMP(). Ahora, dentro del mismo MySQL la conversión entre ambas funciones no es exacta, debido (segun entendí) a las diferencias locales según la zona horaria desde donde se trabaje... O sea, no pidan demasiada precisión muchachos que esto no es una ciencia exacta!!!.
Como sea el bueno de Firebird (la base de datos con la que habitualmente trabajo) no tienen contemplado esto asi que para obtener una fecha legible a partir de un Unix timestamp yo hice esto:

select dateadd(second, 1255033470, cast('01/01/1970 00:00:00.0000' as timestamp)) 
from rdb$database;

Por ahora sirve a mis propositos, si logro entender como hacer jugar los problemas de ubicación lo mejoro. Si alguien tiene alguna mejor idea soy todo ojos!.

viernes, junio 08, 2012

Mis Repositorios Imprescindibles de UBUNTU

Ultima versión del FFmpeg (Conversor de video)
Comando apt:
ppa:jon-severinsson/ffmpeg
__________________________________________________________________________

Este muchacho Adrian Mariuz Popa, mantiene un repositorio con las ultimas versiones de Firebird actualizadas y su respectivo php-interbase!!
Comando apt:
ppa:mapopa/ppa
__________________________________________________________________________

Un tema de iconos muy bueno Gartoon Redux
Comando apt:
ppa:tweenk/ppa
__________________________________________________________________________

Como Ubuntu da para todo existe un Ubutnu SE donde SE significa "Satanic Edition", que viene a ser una boludez con una estética particular, pero, estos pibes mantienen actualizado un tema de iconos que para mi es por lejos el mejor que existe: Buuf Icons, asi que a incluir el repositorio que se acaba el mundo. Están desactualizados, pero solo me interesa mantener actualizado el paquete de iconos buuf.
Comando apt:
deb http://ubuntusatanic.org/hell oneiric main
Secure Key: 
wget -q http://ubuntusatanic.org/ubuntu-se-key.gpg -O- | sudo apt-key add -
__________________________________________________________________________

Los amigos de Google mantienen un repositorio para todas sus cada vez mas inevitables apps.
Comando apt:
deb http://dl.google.com/linux/talkplugin/deb/ stable main
Secure Key:
wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add -
__________________________________________________________________________

Wine, como olvidarlo.
Comando apt:
ppa:ubuntu-wine/ppa
__________________________________________________________________________

Medibuntu, hasta la fecha siguen manteniendo los non-free codecs, la libreria libdvdcss2 para realizar copias de DVD originales y el mencoder un conversor de video alternativo al ffmpeg y para mi el mejor para convertir avi a divx
Comando apt:
sudo -E wget --output-document=/etc/apt/sources.list.d/medibuntu.list http://www.medibuntu.org/sources.list.d/$(lsb_release -cs).list && sudo apt-get --quiet update && sudo apt-get --yes --quiet --allow-unauthenticated install medibuntu-keyring && sudo apt-get --quiet update
__________________________________________________________________________

Jdownloader, un gran administrador de descargas, hoy por hoy un tanto en desuso al caer megaupload, pero igualmente sirve.
Comando apt:
ppa:jd-team/jdownloader
__________________________________________________________________________

Geany, por escandalo el mejor editor para PHP, Javascript y HTML en general. Si no lo conocen, pruebenlo. Y despues me cuentan.
Comando apt:
ppa:geany-dev/ppa
__________________________________________________________________________

Kazam Screencaster. Un "screencaster" es una aplicación que sirve para grabar en video lo que se hace en el escritorio. Muy útil para realizar manuales. En este caso, la aplicación anda muy bien.
Comando apt:
ppa:kazam-team/stable-series
__________________________________________________________________________

lunes, marzo 26, 2012

Configuración Internet APN CLARO ARGENTINA

En el escritorio del teléfono hacemos click en el botón de opciones -> Ajustes -> Conex. Inalámbricas y Redes -> Redes Móviles -> Nombre de puntos de acceso -> (Botón de opciones)-> Nuevo APN

NOMBRE: Claro AR
APN: internet.ctimovil.com.ar
Proxy: nada
Puerto: nada
NOMBRE DE USUARIO: ctigprs
CONTRASEÑA: ctigprs999
SERVIDOR: nada
MMSC: nada
PROXY MMS: nada
PUERTO MMS: nada
MCC: 722
MNC: 310
TIPO DE AUTENTICACION: PAP (muy importante poner esto asi)
TIPO DE APN: default,dun

Anda espectacular. Después de mucho recorrer lo encontré aquí: http://www.grupoandroid.com/topic/32939-solucion-apn-claro-ar/

Actualización 13/08/2012:
Anda dando vueltas otro APN, anda muy bien, ahi van los datos:

NOMBRE: ba.amx
APN: ba.amx
Proxy: nada
Puerto: nada
NOMBRE DE USUARIO: clarogprs
CONTRASEÑA: clarogprs999
SERVIDOR: nada
MMSC: nada
PROXY MMS: nada
PUERTO MMS: nada
MCC: 722
MNC: 310
TIPO DE AUTENTICACION: PAP (muy importante poner esto asi)
TIPO DE APN: default,dun

Actualización 5/11/2012:
NOMBRE: Claro AR
APN: igprs.claro.com.ar
Proxy: nada
Puerto: nada
NOMBRE DE USUARIO: ctigprs
CONTRASEÑA: ctigprs999
SERVIDOR: nada
MMSC: nada
PROXY MMS: nada
PUERTO MMS: nada
MCC: 722
MNC: 310
TIPO DE AUTENTICACION: PAP (muy importante poner esto asi)
TIPO DE APN: default,supl


Es el que me viene por defecto en el Samsung Galaxy S3 y está andando perfectamente bien. De hecho intenté utilizar el ba.amx y me dejo de recibir mensajes MMS. Ojalá les sirva.

Saludos!

miércoles, febrero 29, 2012

SAMSUNG GALAXY FIT S5670L - UBUNTU + ANDROID: W/ddms: Unable to get frame buffer: device (????????????) request rejected: insufficient permissions for device

Tengo un SAMSUNG GALAXY FIT S5670L y estoy comenzando con Android. Me baje el SDK de la pagina correspondiente y cuando quiero ejecutar ./ddms o el ./adb me da el siguiente mensaje:

W/ddms: Unable to get frame buffer: device (????????????) request rejected: insufficient permissions for device

y la aplicación gráfica se ve así:

 

fui a la carpeta /etc/udev/rules.d y cree el archivo de texto 51-android.rules con el siguiente contenido:

SUBSYSTEM=="usb", ATTRS{idVendor}=="04e8", ATTRS{idProduct}=="689e", MODE="0666"

donde el idVendor y el idProduct lo obtuve de hacer un lsusb
 
Bus 002 Device 062: ID 04e8:689e Samsung Electronics Co., Ltd.

luego ejecuté: sudo reload udev
y voilá cuando fui al ./ddms se vió asi:


(ojo tuve que desconectar y reconectar el teléfono.) recordar también que tiene que estar en modo debugger.

Dejo 2 enlaces muy útiles:

http://www.xatakandroid.com/tutoriales/como-mover-mas-aplicaciones-a-la-sd-sin-ser-root

http://www.xatakandroid.com/tutoriales/como-hacer-capturas-de-pantalla-en-tu-movil-android

jueves, febrero 16, 2012

Grosso! (infelizmente aplicable a mi Argentina de hoy...)


Cuando la mitad de las personas llegan a la conclusión de que ellas no tienen que trabajar porque la otra mitad está obligada a hacerse cargo de ellas, y cuando esta otra mitad se convence de que no vale la pena trabajar porque alguien les quitará lo que han logrado con su esfuerzo, eso... mi querido amigo... es el fin de cualquier Nación.

"No se puede multiplicar la riqueza dividiéndola". 
  

Dr. Adrian Rogers, 1931

martes, noviembre 15, 2011

UBUNTU: Buscar texto en el contenido de archivos.

Algo tremendamente util. Nos posicionamos en el directorio donde queremos buscar el archivo que contenga un texto especifico y allí tipeamos:

grep -lir "TEXTO" *

donde:
  -l mostrará solo los archivos que contengan el texto especificado.
  -i hará la busqueda case-insensitive y
  -r hará que la misma sea recursiva, es decir que busque en todos los
      subdirectorios contenidos en el directorio principal.
   * indica que busque en todos los archivos.

para mas indicaciones g/re/p (global / regular expression / print).

UNA MASA!!

mas información: http://en.wikipedia.org/wiki/Grep

miércoles, septiembre 14, 2011

ROM FIRMWARE Samsung Galaxy Fit GT S5670L Claro Argentina

Leer el blog que pongo a continuación es como leer mi propia historia. Gracias al amigo que me dió la solución:

http://blooglery.wordpress.com/2011/08/15/

Si son impacientes les dejo el link del ROM que funciona en el Samsung Galaxy FIT GT S5670L

http://www.multiupload.com/K035R5YEVW

Si les sirvió dejenme algún comentario.

Algunos links que tambien me sirvieron mucho.

http://forum.xda-developers.com/showthread.php?t=876391&highlight=choose+1900+850+band

http://androidforums.com/samsung-galaxy-s/258859-how-enable-850mhz-3g-network-frequency-your-samsung-i9000-galaxy-s.html

http://www.samfirmware.com

INFO ACTUALIZADA 10/11/2011:

http://www.sammobile.com/showthread.php?t=33

aparentemente samfirmware va a cerrar sus puertas pronto. El link que pegue posee toda la información necesaria para cambiar los ROMS del galaxy fit. Si no alcanza avisen y escribo el tutorial.