Raspberry Pi Shell Streaming!

TTYCast
Shell Streaming!



Una infinidad de veces queremos enseñarle a un amigo algo, o nos preguntan como realizar algo, estamos dando una clase, etc... Y no precisamos más que la terminal para ello. 

Retransmitir toda la pantalla con todos sus gráficos resulta algo terriblemente pesado y lento en estas situaciones. Lo mejor para estos casos es montar en nuestra queridísima raspberry un TTYCast.

Instalamos NodeJs, git y npm, aunque este último suele venir con la instalación de NodeJs.


apt-get install git nodejs npm

Limpiamos el caché de npm

npm cache clean -f


Registramos el sitio desde donde vamos a descargar los paquetes y le decimos que no es necesario ssl estricto.

npm config set registry http://registry.npmjs.org/
npm config set strict-ssl false


Instalamos un controlador de versiones de NodeJs a traés de npm

npm -g install n

Y le decimos que queremos la versión 0.10.21

n 0.10.21

Por último en la versión 0.10.21 instalamos los paquetes necesarios ttyrec ttycast, express y en general instalamos headless-terminal y connect


/usr/local/n/versions/0.10.21/bin/npm install -g express
npm install headless-terminal
/usr/local/n/versions/0.10.21/bin/npm install -g ttyrec
/usr/local/n/versions/0.10.21/bin/npm install -g ttycast
npm install -g connect



Específicamos el puerto por el que vamos a transmitir, generalmente el 80.

export PORT=80

Si ponemos un puerto por debajo del 1024 tenemos que asegurarnos de que nuestro usuario tenga permisos para usar ese puerto. Si ponemos cualquier otro puerto al conectarnos desde el navegador web tendremos que especificar el puerto después de la dirección.
Ejemplo : curiosoinformatico.com/ttycast:3333
3333 sería el puerto.

A mi a la hora de hacerlo funcionar me dió unos errores que después de probar cosas y analizar el error llegué a como solucionarlo.

Faltaba crear los enlaces simbólicos que por defecto no crea

Crearlos es tan sencillo como hacer:

ln -s /usr/local/n/versions/0.10.21/bin/ttyreccast /usr/bin/ttyreccast
ln -s /usr/local/n/versions/0.10.21/bin/ttycast /usr/bin/ttycast
ln -s /usr/local/n/versions/0.10.21/bin/ttyplay /usr/bin/ttyplay

Ahora en una terminal escribimos

ttyreccast archivooptativo.tty

Donde archivooptativo es una característica optativa que si lo escribimos nos creará un archivo con todo lo que hagamos que después podremos reproducir con ttyplay.

En otra terminal escribimos 

ttyrec /tmp/ttycast


Tardará unos segundos y a continuación parecerá que no ha pasado nada. Tendremos nuestra terminal pero a partir de ese momento todo lo que escribamos en ella será retransmitido vía web.

Si abrimos puertos desde fuera podremos verlo en nuestra ip externa y sino desde la red local podremos verlo desde nuestra ip interna.




Nota:
Es muy recomendable poner una Ip fija. Si no sabes como aquí te dejo un enlace.
http://blog.curiosoinformatico.com/2014/12/un-servidor-en-debian-dia-2.html


Nota 2:
Si nodejs no está en el repositorio en un determinado momento lo podemos instalar de la siguiente manera:

apt-get install python g++ wget libssl-dev  
mkdir /tmp/nodejs 
cd /tmp/nodejs  
wget http://nodejs.org/dist/node-latest.tar.gz  
tar xzvf node-latest.tar.gz  
cd node-v*  
./configure  
make  
make test  
make install

Un servidor en Debian: Día 2 -- Configurando la interfaz de red

Muy buenas! Hoy vamos a empezar a darle caña al asunto. ¿Lo principal en un servidor es tener una ip fija no? Pues eso es lo que toca hacer hoy.

Nos logueamos como root con su


Vamos a ver la dirección ip que tenemos por defecto con el comando ifconfig -a, nuestra dirección será la dirección especificada a continuación de ifconfig.


Antes de hacer nada realizamos una copia de seguridad en nuestra carpeta personal del archivo /etc/network/interfaces.  

Posteriormente lo abrimos con nano y editamos su configuración, por defecto veremos lo siguiente:







Fichero /etc/network/interfaces


Especificamos la interfaz después de iface
Si es ipv4 escribimos inet, si es ipv6 sería inet6
Por defecto está dhcp, lo cambiamos por static para tener una ip estática en lugar de una asignada por un servidor DHCP.

Especificamos la dirección ip con address
La máscara de subred con netmask
La dirección de red con network
La dirección de broadcast con broadcast
Y finalmente la puerta de enlace si la tuviéramos con gateway

iface eth0 inet static
address 192.168.1.33
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255
gateway 192.168.1.1



Guardamos con ctrl+x y la tecla y

Deshabilitamos el adaptador de red y lo volvemos a habilitar con
ifdown eth0 
ifup eth0
Y miramos que se ha cambiado la dirección ip
ifconfig -a





A continuación para hacer una práctica crearemos dos scrips uno llamado activarRed.sh y otro llamado pararRed.sh

En el Script activarRed.sh pondremos

#!/bin/bash

echo "Activando la red"
/etc/init.d/networking start

En el Script pararRed.sh pondremos lo siguiente

#!/bin/bash

echo "Parando la red"
/etc/init.d/networking stop

Todos los servicios en GNU/Linux están contenidos en /etc/init.d
En el primer Script llamamos a networking y le decimos que se active
Y en el segundo llamamos a networking y le decimos que se pare.

A continuación probaremos los scripts que acabamos de realizar.



Hecho esto hoy habremos aprendido a configurar las interfaces de red y habremos entendido la localización del servicio networking y su forma de encenderlo y apagarlo. Habremos hecho una práctica creando dos scripts. Uno que lo encienda y otro que lo apague. Y habremos aprendido a deshabilitar y habilitar una interfaz de red con ifup y ifdown.

Con esto ya hemos acabado por hoy.

Un fuerte abrazo!

Un servidor en Debian: Día 1 -- Recordatorio

Comenzamos!




Al encender nuestro fabuloso Debian habiendo instalado todo sin entorno gráfico porque somos más chulos que nadie veremos la pantalla que podemos ver en a la introducción de esta entrada. Nos logueamos con nuestro usuario y tatatachán! Ya tenemos nuestro maravilloso Debian recién sacado del horno.

Para no hacer esto demasiado básico y largo no me pondré a explicar como instalar Debian sin entorno gráfico. Pero tranquilos, es super-intuitivo y hay tutoriales por la red.



Esta serie de entradas si bien serán muy básicas al principio servirán de referencia como apuntes de lo que demos en clase y ¿por qué no? Compartir lo que uno da no solo sirve de repaso sino además como ayuda para aquellos que quieran tener un acceso sencillo a la información. 

Para movernos entre carpetas utilizamos la instrucción cd más la ruta a la que queramos ir, que puede ser absoluta y relativa. Si escribimos cd ~ nos llevará directamente a nuestra carpeta personal. Si ponemos cd / nos llevará al directorio raíz del que cuelga todo el equipo. Para saber la ubicación en la que nos encontramos tenemos la instrucción pwd.


A continuación crearemos un script para recordar como se creaban estos. Para una mayor organización lo crearemos en nuestra carpeta personal en una carpeta llamada scripts. Para crear la carpeta mkdir scripts. Entramos en la carpeta con cd scripts

Y lo editaremos con el editor nano, así que escribiremos nano primerScript.sh que será el nombre de nuestro script.


La primera línea es conocida como shebang y está compuesta por los carácteres #! y la ruta que ejecutará nuestro script. Para el ejemplo usaré bash que se encuentra en /bin/bash.

Finalmente escribimos debajo una instrucción a ejecutar como echo "hola mundo!" para mostrar por la pantalla hola mundo!.


Utilizamos chmod 755 primerScript.sh para cambiarle los permisos y así poder ejecutarlo con nuestro usuario. Una vez realizada esta acción podríamos ejecutarlo con la sentencia ./primerScript.sh en caso de que nuestro Script tenga ese nombre.

No explicaré como se utiliza  chmod dado que no pretendo dar una serie de tutoriales sobre GNU/Linux sino sobre servidores en Debian para empresas. Aconsejo buscar todas las cosas que no queden claras fuera de este blog ya que la documentación es cada utilidad es muy extensa.


Ahora probaremos a copiar nuestro archivo primerScript en otra carpeta a la que llamaremos destino. Para volver a la carpeta anterior vamos a su ruta con cd .. y creamos otra carpeta que llamaremos destino.  Finalmente copiaremos el archivo utilizando la sentencia cp scripts/primerScript.sh destino/


Después realizaremos un borrado del archivo que hemos copiado en el destino con la sentencia rm destino/primerScript.sh
Podemos ir dándole a tabulador para utilizar el autocompletado de la terminal según escribamos.


A continuación recordaremos el uso de las tuberías o pipelines mostrando gradualmente el contenido de la carpeta /etc
Las tuberías se encargan de enviar la salida de un programa a otro. De esta forma podemos invocar al programa ls para listar el directorio de /etc y verlo gradualmente con el programa less. 

ls /etc | less



Para terminar con el recordatorio del día 1 veremos como enviar la salida de un programa como el listado de un directorio con ls, o otro, a un archivo. De esta manera podremos consultar la información. 

Si en lugar de usar una tubería usamos el símbolo mayor > la salida en lugar de mostrarse por la pantalla se enviará a un archivo en modo escritura. Esto quiere decir que si el archivo ya existía borrará los datos y los pondrá de nuevo. Para hacer esto en modo añadir al archivo pondríamos el operador >> en lugar de >.

Esto es muy útil a la hora de crear logs.

Con esto terminamos la entrada del día 1 y como siempre

un fuerte abrazo!

Top 5 lenguajes para empezar a programar


Por esa carilla de... pero pero pero... ¿por dónde empiezo?




Ante todo es una valoración personal como siempre basándome en mis experiencias y experiencias de compañeros. A mi humilde opinión creo que el top 5 lenguajes para empezar a programar son:




C
El superhéroe


Cuando empezamos a programar buscamos un lenguaje para algo en especial y aunque se puede hacer casi de todo con casi cualquier lenguaje... no siempre es el más óptimo para ello. C lo tiene todo, no tiene la dificultad de assembler, tiene velocidad de superhéroe y puede hacer de todo. Nos da las bases para empezar y nos hace comprender el funcionamiento de los programas a bajo nivel.

Su único problema tal vez, sea la dificultad y la enorme cantidad de código necesaria para hacer cualquier cosa. Arduino es una programador de microchips con el que podremos programar microcontroladores si nos gusta la electrónica desde C de arduino.


C++
C digievoluciona!

C++ carece de la ultra velocidad de C, no obstante, sigue siendo rapidísimo e introduce un nuevo concepto: la programación orientada a objetos. Con este nuevo concepto podremos reutilizar muchísimo código y realizar programas más "reales" al crear instancias de objetos. 

Su problema radica en la enorme dificultad de aprendizaje sino contamos con un buen manual, Debido a que muchísima gente mezcla C y C++ y funciona, porque C++ fue creado para que el código de C siguiera funcionando pero le añadiéramos entre otras cosas el concepto de objetos.
Esto es un grave error ya que el código compilado con el compilador de c++ pero escrito en c, será más lento que el código compilado con su correspondiente compilador.

En internet la gente suele mezclar mucho ambos lenguajes. 




C#
El lenguaje de Unity3D

Tal vez podríamos comparar C# a Java, yo diría que C# es más sencillo de entender. Java y yo no nos llevamos muy bien pero ya es cuestión de gustos. Unity3D el famoso motor gráfico nos permite crear Scripts para nuestros videojuegos en C#. Esto significa que podemos aprender C# creando videojuegos. Pero sería recomendable tener una base previa.
Puntos en contra: Tal vez la enorme reducción de velocidad comparado a C++ y C. Corre sobre .NET pero el compilador ha sido liberado y ahora también podemos compilar en GNU/Linux. También tenemos su alternativa 100% libre que es: monodevelop.




Python
Fácil rápido y bonito


Puestos a elegir una opción sencilla para empezar me puse a dudar entre Python o Ruby, Después de meditarlo llegué a la conclusión de que Python era infinitamente más fácil por la razón de que en Ruby ya debemos entender la POO antes de comenzar. 

Python es además un lenguaje multiplataforma, interpretado y con baterías incluidas. Esto significa que no es necesario compilarlo para correrlo. (Ni es necesario ni puede hacerse) Como mucho sacar un bytecode para agilizar la ejecución. Funciona en cualquier sitio donde tengas instalado Python. Tiene una comunidad enorme y tiene una gran cantidad de librerías ya incluidas. De ahí el dicho de baterías incluidas. Además su comunidad apoya enormemente el software libre.




HTML5
3 lenguajes en uno

HTML5 no es un lenguaje propiamente dicho, es un conjunto de tecnologías donde por un lado tenemos html, por otro Javascript y por otro CSS3.

La ventaja de esto es que veremos nuestros progresos de forma gráfica desde un navegador y es algo que nos da un aliciente bastante grande para progresar. Además muchos hemos querido muchas veces crear una página web y es un mercado increíble. 

Ahora si quieres dedicarte al desarrollo web esto es básico. Aparte deberías aprender php, python y algunos de sus frameworks como django o flask, o ruby y su famoso framework rails. O cualquier otro lenguaje para hacer nuestras páginas web interactivas.
Después de aprender Javascript empezar con Ruby no te costará ya que ya te habrán introducido el tema de la programación orientada a objetos. 





Creo que con esto termino el top 5 lenguajes para empezar a programar. Como siempre basándome en mis propias experiencias y concluyo diciendo que a día de hoy no se trata tanto de qué lenguaje uses. Sino de tu calidad como programador y de tu forma de ser. Cada lenguaje tiene una filosofía un por qué detrás. La mejor forma de entender y coger gusto a un lenguaje es entender el  por qué de que las cosas se hagan de una determinada manera y no de otra.

Si quieres comentar algún otro lenguaje que recomiendes estás invitado a hacerlo en los comentarios.
Pronto iré subiendo una serie de entradas sobre servidores en Debian que aunque partiré de una base los primeros días serán conceptos muy básicos como recordatorio. Es una temática que tocaremos en clase y me gustaría compartir con todos lo que demos ya que creo que es algo bastante interesante de conocer.

Un fuerte abrazo!

Desfragmentar == SSD ROTO

Las bue..ya no tan buenas prácticas


¿Qué ven mis ojos? Al fin el cuello de botella que suponían los discos duros HDD se comienza a solucionar con los discos SSD que aún, siendo caros, comienzan a hacerse ligeramente asequibles para los bolsillos cotidianos.

Todo buen informático sabe que de vez en cuando en Windows debería des-fragmentar los datos, crear restauraciones de las particiones en discos duros externos con clonezilla, por ejemplo. Ir creando puntos de restauración, realizar copias de seguridad de los datos, tener la mayoría de los datos almacenados en soportes externos en red y etcétera etcétera... 

Ahora, todo hay que decirlo, como realicemos la primera buena práctica con un disco SSD ya nos podemos ir despidiendo del disco SSD. Ya que desfragmentar realiza muchísimo movimiento de datos y este tipo de discos acortan su vida rápidamente con esta operación. 

¿A nadie le gusta que el recién comprado juguetito que hace que nuestro pc valla como un torpedo se estropee rápidamente no? 

Como siempre me baso en experiencias, un viejo amigo, informático,  llevaba 3SSD rotos y me dijo que esto de los SSD eran una desgracia, Mucho dinero para luego dos días de duración, cuando analicé las acciones que el tío iba haciendo ¡me faltaron collejas para darle!

Lo primero que hacía era desfragmentar el equipo, y cada x tiempo lo volvía a hacer.  

Recordad: Desfragmentador de disco == SSD roto.

No hace falta des-fragmentar nada, tan solo hay que pensar en como funcionan los discos SSD. 

¡Con ellos la fragmentación está pasada de moda!

Ojalá pronto pueda yo también permitirme el lujo de tener uno de ellos. Hasta entonces tendré que seguir a la reducida velocidad (a comparación) de mi disco HDD.

Un fuerte abrazo y hasta la próxima!

Instalando Windows desde Ubuntu

Prácticas poco usuales para gente poco práctica,
o necesidades especiales.


Tatatacháan! Damas y caballeros, se acabaron los dolores de cabeza, espero, frente a los continuos dolores de cabeza intentando instalar Windows 7 en el ordenador de un amigo que no tenía lector de CD decidí coger la imagen del CD que había comprado y conseguir una imagen iso de él. Después pensé que la pondría con unetbootin en un usb y solucionado! :D

Pero por desgracia no fue así, y lo probé también con yumi pero nada, que no había forma. Sonaba demasiado bonito para ser cierto, estuve indagando y descubrí una utilidad llamada winusb con la que sí se puede conseguir este propósito tan particular. Así que manos a la obra.


Para instalar winusb primero deberemos descargarlo de su repositorio ya que por defecto actualmente no viene. 

Si tenemos 32 bits:
wget https://launchpad.net/~colingille/+archive/freshlight/+files/winusb_1.0.11+saucy1_i386.deb 

Si tenemos 64 bits:
wget https://launchpad.net/~colingille/+archive/freshlight/+files/winusb_1.0.11+saucy1_amd64.deb   

Finalmente lo instalamos:

sudo dpkg -i winusb_1.0.11+saucy1*

Y corregimos los errores de dependencias:

sudo apt-get -f install

Con esto teóricamente deberíamos haber acabado y lo encontraríamos como una aplicación más. Tiene un modo gráfico muy intuitivo así que nada, ya es probar y sobre todo tener suerte! :)


DATO AÑADIDO: Si os da un error buscar su fichero de configuración que seguramente estará en /usr/bin/winusb y abrirlo con gedit:
sudo gedit  /usr/bin/winusb

o otro editor de texto...

y cambiáis la línea que ponga algo de grub-install (línea 140 o 141 si no recuerdo mal) por:

grub-install --target=i386-pc --boot-directory="$partitionMountPath/boot" "$device"


Un fuerte abrazo!

Correr LOL y otros juegos en VirtualBox

Level up my friend


 


Aunque no es mi tema y no suelo jugar a juegos de ordenador, prefiero crearlos un amigo me llevaba dando la lata durante meses con que era "imposible" correr juegos en VirtualBox. Y por lo tanto nunca se cambiaría a Linux si nunca podría volver a jugar a sus juegos. Le expliqué que habían otras alternativas como PlayonLinux para jugar a juegos de windows en distribuciones GNU/Linux.

Pero el se negaba a probar cosas "raras" (según el), que no le fueran a dar la fiabilidad del propio sistema operativo. Así que me puse a probar y elegí un juego Free To Play de los que usaba él. Y efectivamente después de instalar el juego "League of legends" en este caso y registrarme para jugar... No me cargaba la partida.

Mirando las opciones de configuración me encontré con que habían dos opciones desactivadas que usan los videojuegos. Aceleración 2D y aceleración 3D. Las activé.

A la hora de instalar las guest additions que se instalan desde Dispositivos >> Instertar CD de las Guest aditions y yendo a equipo y ejecutandolo si no se ejecuta solo.

Había una opción que mi amigo pasó por alto, y yo en las primeras pruebas y es la opción de habilitar la aceleración 3D (beta) al marcarla nos pone otro diálogo diciendo que es mejor dejar la básica y bla bla bla... le decimos que no.



Y nos instalará las Guest Additions con la aceleración 3D necesaria para correr los videojuegos.

NOTA: Siempre que podáis poned la máquina virtual a pantalla completa.

Resultado: Después de instalar el videojuego lo probé y funcionó a la perfección. Quitando una disminución evidente en el rendimiento, el juego iba a 30 FPS pero se podía jugar perfectamente.



Esto además a los gamers  y otra gente que juegue a videojuegos les viene de lujo. Ya que pueden exportar la máquina e importarla en cualquier otro ordenador sin necesidad de volver a instalar el juego por completo.


Se que esta entrada se sale un poco de lo que suelo hablar normalmente pero oye! en la diversidad está el gusto! :D Además me lo venía pidiendo un amigo desde hace ya y no me he podido negar y ya puestos lo comparto con todos.


Un fuerte abrazo!