may 16 2013

Building LibreOffice

Published by under Devel,LibreOffice (1421 lecturas)

1. Get the code

$ git clone git://anongit.freedesktop.org/libreoffice/core

Grab a cup of coffee!

Receiving objects: 100% (2851664/2851664), 917.96 MiB | 2.67 MiB/s, done.

2. in order to speed up the building process we highly recommend to install ccache and create some links to point g++ and gcc compilers to the ccache binary:

 sudo apt-get install ccache
 ln -s /usr/bin/ccache  ~/bin/g++  
 ln -s /usr/bin/ccache ~/bin/gcc  
 ccache --max-size 32G

If you are using a laptop’s hard disk to build LibreOffice, then it would be a good idea to enable also ccache compression:

$ export CCACHE_COMPRESS=1

3. Download all the dependencies needed to build LO:

sudo apt-get build-dep libreoffice

4. Check that dependencies are filled and that we have a well-equipped build environment

./autogen.sh

5. Rock and Roll!

make dev-install

Want to read more about the building process? Then, don’t miss this developer oriented webpage or this one.

No responses yet

mar 16 2013

Lynckia: vídeo conferencias en HTML5 (look ma! no plugins)

Published by under Cloud,HTML5,Javascript,Vídeo,webcam (2244 lecturas)

lynckia Lynckia (plataforma de comunicaciones de código abierto) permite realizar comunicaciones en tiempo real desde tu navegador usando la tecnología WebRTC. Aunque hasta hace poco sólo el navegador Google Chrome disponía de una implementación avanzada de WebRTC, desde el 4 de Febrero de este año podemos usar también el navegador Firefox. El 6 de Marzo (es decir, hace exactamente 10 días!) Google anunció el soporte WebRTC también en la versión de Chrome para Android.

Aún queda mucho trabajo por hacer (poder capturar streams RTMP y que formen parte de la videoconferencia, poder codificar los streams de los usuarios en uno sólo y no uno por cada usuario, ampliar la base de ejemplos…) pero los avances realizados hasta el momento por el equipo de Lynckia son impresionantes. Como decían en HTML5Spain:

Lynckia nos ha parecido uno de los proyectos más interesantes que han aparecido en escena a nivel internacional a lo largo de este año

Lynckia se puede probar online siempre que uses una versión moderna de Chrome o Firefox, sin necesidad de instalar nada manualmente (ni tener ningún tipo de plugin instalado).

Si quieres tener tu propio servidor Lynckia, su instalación para el caso de Ubuntu 12.04 es sencilla. Basta con ejecutar los scripts paso a paso. En mi caso, con Ubuntu 12.10, instalé las dependencias Node.js, Nodejs-dev y nmp desde el repositorio oficial de Ubuntu (sin usar el PPA de Chris Lea como indican las instrucciones) y pude compilar y probar la demo básica sin problemas. En la demo básica se lanza un servicio Lynckia en el puerto 3001 de tu máquina local. Abriendo esa url en Chrome, te pedirá permiso para acceder a la webcam y al micrófono. En cuanto concedas permisos, verás tu imagen en pantalla (y oirás lo que digas por el micro). Si abres otra pestaña en el navegador y repites el proceso, verás que debajo de la imagen original se abrirá otra más, a modo de videoconferencia (contigo mismo en esta demo, pero se entiende el objetivo, no? ;-)

One response so far

nov 23 2012

Compartir tu conexión a Internet a través de la tarjeta wifi

Published by under EHU,SysAdmin (4328 lecturas)

Como íbamos diciendo ayer

Update [2012/12/10]: a raíz de este artículo, se han puesto en contacto desde el servicio TIC de la EHU para tratar de solucionar este problema entre todos los implicados. Mi labor ahora es recoger información: direcciones MAC, configuraciones de los portátiles, zonas de no cobertura o cobertura con problemas, para empezar a indagar y corregir las causas. Tal y como en ocasiones señalo los defectos, ahora me toca anotar las virtudes: me ha gustado que se hayan molestado en responder personalmente a este post. Seguiremos informando ;-) </ update >

El problema, como muchas otras veces, es sencillo: estoy en clase con mis alumnos y necesitamos conectarnos a Internet. “¡Usemos Eduroam!” Muy bien, el problema es que la configuración de esa red, en mi centro, es “muy mejorable”. Da igual que uses Windows, Linux o MacOSX. A veces conectas (¡milagro!) para que a los dos minutos, sin razón aparente, pierdas la señal. Y no, no es un problema aislado de Linux. De hecho, ni siquiera es un problema de Eduroam, sino de la configuración de Eduroam en algunos centros de la UPV/EHU. Recientemente estuve en Valencia (SWERC) y no tuve ningún problema con la wifi Eduroam allá configurada. Se conectó a la primera, se mantenía la conexión perfectamente durante toda la sesión y era posible conectar desde cualquier aula.

No, no es que el punto de acceso esté alejado. Me he puesto con el portátil en las manos justo físicamente debajo de varios AP, por si acaso alguno estaba estropeado o saturado, y nanai de la china, sigo sin conectar (o conectando a ráfagas)

En fin, a lo que iba. Como nos ha sido imposible convencer a los técnicos de que es una mala configuración por su parte (y no un fallo de la configuración del usuario), he preferido buscarme (nuevamente) la vida por mi cuenta. La cuestión es que el profesor, en el aula, sí que tiene conexión a Internet a través de cable, pero los alumnos no (tienen que ir por -la mal configurada – wifi Eduroam… u otra pública, llamada EHUGuest, que funciona igual).

La pregunta entonces sería: ¿cómo configuro mi portátil para que la tarjeta wifi haga de punto de acceso, los ordenadores de mis alumnos se conecten vía wifi a mi portátil y éste enrute sus peticiones a través del cable ethernet de mi portátil? Claro, lo ideal es que en cuanto conecten con mi tarjeta wifi mi portátil les asigne dinámicamente una IP y un DNS.

Bien, tras todo este rollo, la solución en una línea:

Open Settings->Network->Wireless and create a new Ad Hoc network

Se creará una red Ad Hoc con tu tarjeta wifi (creará automáticamente una red wifi llamada UbuntuAdHoc) que asignará IPs dinámicamente a los alumnos y los enrutará a Internet a través de la tarjeta ethernet del portátil. Si, a mí también me ha parecido magia ;-)

2 responses so far

sep 21 2012

Hackit’2012, solucionario. Level 4

Published by under Android,Eclipse,HackIt (3615 lecturas)

Así que tenemos que destripar un binario .apk para Android… bien, empecemos con la cirugía.

1) Comprobemos material quirúrgico. Vamos a necesitar apktool para abrir al paciente.
2) Un vademecum de cómo y por dónde cortar tampoco vendrá mal.
3) Proceder a abrir en canal el .apk

apktool d AndroidLevel0.apk

4) Buscar un poco dentro de las tripas, a ver si encontramos algo valioso

$ grep -irn "password" * 
...
AndroidLevel0/smali/com/mobandme/hackit/euskal20/level0/services/CryptographyService.smali:114:   
direct {p0}, Lcom/mobandme/hackit/euskal20/level0/services/CryptographyService;->decodePassword()Ljava/lang/String;
 ...

5. Yo creo que tendremos que empezar examinando esa zona (decodePassword() suena bien :-)
6. Editamos el services/CryptographyService.smali para incluir una llamada de log justo en el punto en el que la aplicación comprueba nuestro password con el que tiene almacenado.

 
const-string v0, "DL_Rules"
# Después de 
#    invoke-direct {p0}, Lcom/mobandme/hackit/euskal20/level0/services/CryptographyService;->decodePassword()Ljava/lang/String;
 #   move-result-object v2
 
invoke-static {v0, v2}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I

Por cierto, no conocíamos mucho de las interioridades de un paciente Android, asi que tuvimos que revisar varios tutoriales en la guía anteriormente citada hasta entender cómo llamar al método de la clase Log (que nos mostrará en pantalla el password en claro)

7. Ya podemos cerrar el cuerpo del delito. Sutura.

apktool b AndroidLevel0 /tmp/hack.apk

8. Firmamos nuestra obra de arte

jarsigner -keystore ~/.android/debug.keystore  /tmp/hack.apk  androiddebugkey

9. Y le decimos al paciente que se tome esta pastilla:

adb install /tmp/hack.apk

10. No perder de vista su reacción, porque seguro que nos dice algo interesante que nos permitirá pasar al nivel 5 ;-)

adb logcat

No responses yet

sep 17 2012

Hackit’2012, solucionario. Level 3.

Published by under HackIt,Java (3215 lecturas)

Descargamos el fichero enlazado y vemos que es un zip con ficheros binarios .class (Java) dentro:

$ unzip jkhil.zip 
Archive:  jkhil.zip
   creating: org/
   creating: org/euskal/
   creating: org/euskal/hackit/
   creating: org/euskal/hackit/crypt/
  inflating: org/euskal/hackit/crypt/CryptUtil.class  
  inflating: org/euskal/hackit/PasswordRevealer.class  
  inflating: org/euskal/hackit/FileClassLoader.class  
  inflating: org/euskal/hackit/trololo.clazz

Vamos a ejecutar el que más llama la atención:

$ java org.euskal.hackit.PasswordRevealer
Exception in thread "main" java.lang.VerifyError: Bad local variable type in method org.euskal.hackit.trololo.damagedMethod()I at offset 7
	at java.lang.Class.getDeclaredConstructors0(Native Method)
	at java.lang.Class.privateGetDeclaredConstructors(Class.java:2404)
	at java.lang.Class.getConstructor0(Class.java:2714)
	at java.lang.Class.newInstance0(Class.java:343)
	at java.lang.Class.newInstance(Class.java:325)
	at org.euskal.hackit.PasswordRevealer.main(PasswordRevealer.java:23)

¡Anda!, un método que se llama damagedMethod()… con un tipo de datos de variable local incorrecto (menudo binario nos ha “regalado” cymo, el autor de este level ;-)

Curiosamente, al ejecutar el .class anterior se ha creado el fichero trololo.clazz.dec (deciphered?) :

$ ls -alt org/euskal/hackit/
total 28
drwxr-xr-x 3 juanan juanan 4096 Sep 18 00:24 .
-rw-rw-r-- 1 juanan juanan 2320 Sep 18 00:24 trololo.clazz.dec
-rw-r--r-- 1 juanan juanan 1672 Jul 19 19:04 PasswordRevealer.class
-rw-r--r-- 1 juanan juanan 3101 Jul 19 18:57 FileClassLoader.class
-rw-r--r-- 1 juanan juanan 2320 Jul 19 18:53 trololo.clazz
drwxr-xr-x 2 juanan juanan 4096 Jul 19 14:53 crypt
drwxr-xr-x 3 juanan juanan 4096 Jul 19 13:59 ..

Antes de seguir investigando ese fichero, ¿qué ocurriría si le decimos a la máquina virtual Java que no verifique el bytecode del .class anterior? (la idea sería saltarse la excepción java.lang.VerifyError de algún modo):

$ java -noverify org.euskal.hackit.PasswordRevealer
Exception in thread "main" java.lang.SecurityException: Can't run unmannaged code. System error: 0x1337
	at org.euskal.hackit.PasswordRevealer.main(PasswordRevealer.java:20)

Pues no le ha gustado…

Ahora no sé si el camino que seguimos en mi grupo (kudos to @ochoto por ser el que rompió este nivel) es el que el autor del level pensó, pero a nosotros nos funcionó O:-)

Estos son los pasos: renombrar el trololo.clazz.dec a trololo.class y crear una clase que lo use:

 
// guardarlo en un fichero dl.java en /tmp
// compilarlo con javac dl.java
 
import org.euskal.hackit.trololo;
 
public class dl {
	public static void main(String args[]) {
		try {
			trololo t = new trololo();
 
		}
		catch(java.lang.VerifyError ve) {
                          System.err.println("Errooooooor....");
		}
	}
}

Si ejecutamos el main anterior, veremos que salta la excepcion “VerifyError”. Por lo que vamos a volver a intentar la ejecución sin verificación del bytecode con la opción -noverify (ver documentación de esta opción en la especificación oficial de la máquina virtual Java):

$ cd /tmp
$ java -noverify dl
Mr. Trololo was born ...
Please enter: Year: >

Premio! :-) Buscamos los datos que nos piden y tendremos acceso al siguiente nivel. Si algún grupo (o el autor del level) siguió otro camino para resolver, le agradecería que añadiera sus comentarios. Nos vemos en el level 4.

One response so far

sep 09 2012

[LibreOffice] Aplicar coloreado de sintaxis a un trozo de código

Published by under LibreOffice (4649 lecturas)

Supongamos que has insertado un trozo de código fuente en Python en tu documento .odt.
Por defecto, Writer no dispone de ninguna utilidad para colorear las líneas como haría un buen IDE (lo que se conoce como Syntax Highlighting) y tu código se vería bastante feucho.

Para realizar el coloreado de sintaxis en LibreOffice Writer, instalaremos la extensión “Code Colorizer Formatter” de Andrew Pitonyak, al que algunos conoceréis por su excelente documento sobre programación de macros en LibreOffice/OpenOffice.org. Una vez instalada la extensión y antes de poderla usar, también tendréis que copiar el estilo _OOoComputerCode de este documento, tal y como se explicó en DiarioLinux.

Aplica el estilo _OOoComputerCode a la sección de código que quieras colorear. Selecciona ahora: Tools/Macros/Run Macro…/My Macros/MacroFormaterADP, elige el lenguaje en el que está programada la sección de código de tu documento (Python en nuestro caso) y a continuación pulsa MainPython y “Run…”, tal y como se ve en la figura adjunta.

One response so far

sep 08 2012

[LibreOffice] Instalar LibreOffice 3.6 en Ubuntu 12.04

Published by under LibreOffice (5139 lecturas)

Receta rápida para instalar LibreOffice 3.6 en Ubuntu 12.04 (dado que la versión 3.6 no está aún en el repositorio principal de Ubuntu tiene una pequeña complejidad su instalación, de ahí el tip)

Puedes descargar los .deb a mano (vienen en un paquete tgz que tendrás que descomprimir) e instalar de forma paralela una versión anterior a la 3.6 y la propia 3.6 haciendo:

$ cd /tmp/LibO_3.6.0.2_Linux_x86_install-deb_en-US/
$ sudo dpkg -i *deb

O más fácil aún, sustituir la versión vieja por la nueva usando un repo PPA:

sudo add-apt-repository ppa:libreoffice/ppa
sudo apt-get update
sudo apt-get install libreoffice libreoffice-gnome

No responses yet

sep 07 2012

[LibreOffice] Copiar estilos entre documentos

Published by under LibreOffice (3178 lecturas)

Así que has creado una serie de estilos en tu documento .odt (LibreOffice) que te gustaría reutilizar en otro .odt distinto… Bien, aquí va una receta rápid para hacerlo.

Abre los dos .odt y desde cualquiera de ellos, selecciona File/Templates/Organize

Doble click en el nombre de los documentos. Se abrirá un submenú “Styles”. Doble click en “Styles”. Se abrirá un listado de los estilos que tiene el documento. Ahora, elige el estilo que quieres copiar, pulsa la tecla Control y arrastra ese estilo de un documento a otro (es importante que pulses Control porque en otro caso, en lugar de copiar, lo moverías). ¡Listo!

2 responses so far

sep 02 2012

Hackit’2012, solucionario. Level 2

Published by under HackIt (2908 lecturas)

En el nivel 2 vemos que cada vez que pulsamos una tecla dentro del input del formulario, según la consola (Developer Tools) de Chrome, pestaña Network, estamos enviando una petición Ajax al servidor. Si pulsamos sobre el nombre del script invocado (jscheck), veremos en la consola algo como lo siguiente:
, lo cual parece indicar que la longitud del password que estamos introduciendo no es la correcta. Podemos pegar en el navegador la URL del script jscheck con el parámetro adecuado, e ir probando hasta obtener un error distinto al ERR:LEN.

https://hackit2012.marcansoft.com/hackit/2/jscheck?password=123456789

De esta forma conseguimos averiguar la longitud de la clave (9 caracteres). Pero ahora el error “ERR:IDX:0″ parece indicar que la posición 0 de nuestra clave es incorrecta. Mediante un sencillo script podemos iterar sobre el primer carácter hasta averiguar que es la A.

https://hackit2012.marcansoft.com/hackit/2/jscheck?password=A23456789

Ahora el error es “ERR:IDX:1″. Sigue al conejo blanco :-)

No responses yet

sep 01 2012

Hackit’2012, solucionario. Level 1.

Published by under HackIt (3668 lecturas)

Para no perder las buenas costumbres y de paso aprender algo más por el camino, tengo la intención de ir comentando las soluciones a 6 de los niveles del HackIt 2012 que se celebró en la Euskal Encounter en Julio. El organizador del concurso, marcan, ha publicado en su web todas las pruebas, para que podamos salsear con ellas.

El nivel 1 es muy sencillo. Si nos fijamos en el código fuente de la página, veremos:

<script type="text/javascript">// <![CDATA[
function check() {var p=$('#password').val();var o=[42,96,21,102,18,85,48,68,48,89,55,80,3,119,22,100,16,117,17];if(p.length!=(o.length-1)){return false;}for(i=0;i<(o.length-1);i++){if(p.charCodeAt(i)!=(o[i+1]^o[i])){return false;}}return true;}
$(document).ready(function(){$('#password').keyup(function(e){$('#password').css({'background-color':(check()?'#8f8':'#f88')});});
});
// ]]></script>

Así pues, el código busca el password tecleado en el formulario y compara su longitud con la del array o (-1). Si son iguales, comienza una comparación letra a letra del password tecleado con el array o. En concreto, busca que la posición i del password sea igual a o[i+1]^o[i] (el operador ^ es un XOR). Esto lo podemos calcular fácilmente haciendo uso de la consola del navegador (en Chrome: pulsamos Shift+Ctrl+J):

2 responses so far

Next »