Dedicado a mis proyectos en Gambas ,un lenguaje de programación parecido al Visual Basic + Java pero ampliamente mejorado y...¡¡para gnu/linux!!.La potencia del gnu/linux sumada a la facilidad del Basic



Consultas, Desarrollo de programas y petición de presupuestos:



viernes, 30 de junio de 2017

Pequeña Chuleta de pdftk y herramienta visual para modificaar archivos pdf: pdfshuffler



Pequeña Chuleta de pdftk y herramienta visual para modificar archivos pdf: pdfshuffler










Chuleta PDFTK:

Extraer varias pagina de un fichero:
pdftk A=nombre-de-archivo.pdf cat A52-57 output salida.pdf
Nota:
Extrae desde la pagina 52 a la pagina 57 creando unfichero "salida.pdf"



UNIR VARIOS FICHEROS:
pdftk * cat output archivo_final.pdf
Truco:
Podemos usar "*" si los archivos deben de estar nombrados con un número delante ( 01,02,03, etc..) y asi se añaden en el orden que queramos. Si no es así, tendremos que poner el nombre de cada archivos que queramos unir.


Quitar una pagina:
pdftk trabajo.pdf cat 1-3 5-end output trabajo_final.pdf
Nota:
De esta manera quito la pagina 4 del documento.

Herramienta visual para mover, eliminar, rotar páginas:
pdfshuffler







Referencias:
http://jsbsan.blogspot.com.es/2016/12/terminal-modificar-archivos-pdf-con.html

https://miguelmenendez.pro/es/articulos/unir-concatenar-archivos-pdf-sistemas-gnu-linux-linea-comandos.html

https://fortinux.com/tutoriales/linux-2-tutoriales/tutorial-extraer-paginas-de-archivos-pdf-con-pdftk-en-linux/

https://eliasbrasa.wordpress.com/2011/01/24/como-quitar-paginas-a-un-pdf-en-ubuntu/

https://lignux.com/pdf-shuffler-un-metodo-simple-de-editar-documentos-en-pdf/


miércoles, 28 de junio de 2017

[arranque - grub] Parámetro toram: carga tu liveDVD o liveCD en la RAM de tu equipo.

[arranque - grub] Parámetro toram: carga tu liveDVD o liveCD o liveUSB en la RAM de tu equipo.


Iniciar una distribución linux desde una  distro liveDVD (1) o liveCD o liveUSB, puede ser una buena manera de probar gnu/linux en tu equipo... pero es algo lento, porque estamos usando una lectora de DVD que es mucho más lento en velocidad de lectura/escritura que el disco duro.. ¿y si tuviésemos esa live cargada en la memoria RAM de nuestro equipo? (2) Conseguiríamos que el funcionamiento de la distro fuera rapidísima, ya que el acceso a los programas seria usando la RAM de nuestro equipo, en vez de trabajar con la lectora de DVD.

¿que hay que hacer?
Cuando arranque el grub de nuestro liveDVD (1), seleccionamos una de las opciones del menu arranque, que aparezca y hay que pulsar la tecla "TAB" o "INTRO" (fig. 1), para que aparezca la linea de comandos de la opción elegida (fig. 2). Añadiremos en la linea de comando que aparezca, la palabra toram (fig. 3), y luego pulsar la tecla enter, para que empiece a cargarse la distribución linux en la RAM. Tardará un poco, ya que se carga completamente todo el contenido de nuestro DVD en la memoria, pero luego en la ejecución se notará la velocidad al iniciar las aplicaciones.

Fig 1. Selección de la opción del menú.
Fig 2. Pulsando la tecla TAB o INTRO
 vemos la linea de comando con las ordenes de arranque.

Fig 3. Añadimos el parámetro "toram".






Una vez que se termine de iniciar la distribución (aparezca el escritorio de esta), podemos expulsar el DVD de nuestra lectora (fig. 4) , (en algunas distros como Minino Picaros,también hay que decirle que desmonte (fig. 5)  el DVD desde el administrador de archivos), y de esta manera tenemos liberado el uso de la lectora para poder leer otros DVD o grabarlos, si nos hiciera falta.
fig. 4: Expulsando DVD.

fig. 5: Desmontando unidad.
Así quedará liberada la lectora de DVD para usarla. 


Por supuesto, todos los cambios que hagamos en la distribución al apagar el equipo, se perderán, al quedar todo en la  memoria volátil "RAM". Pero podemos acceder a nuestro disco duro para guardar los datos. Por ejemplo si estamos creando o editando un archivo de texto, lo podemos guardar en alguna carpeta de nuestro disco duro. Nuestro disco duro lo podemos encontrar en el directorio: /media/NombreDiscoDuro.




Notas:
1; Cuando digo liveDVD , también me refiero a LiveCD o LiveUSB

2: Necesitamos que nuestro equipo tenga suficiente ram para almacenar dentro de ella la iso y poder luego usar los programas. Por ejemplo: si tenemos un liveCD de 800 mb, tenemos que tener por lo menos 2 GB para que 800 mb se cargen en memoria y el resto 1200 lo tengamos para usar los programas (aproximadamente).

Usando "toram": Con la herramienta top, podemos ver lo que ocupa
en la memoria ram el liveDVD de Minino Picaros cargado con el parámetro toram:
4.78 GB usada, dejando libre 1.4 GB (de los 6 GB que tiene el equipo)


martes, 27 de junio de 2017

[solución]: Word da error al abrir archivo .ODT


[solución]: 

Word da error al abrir archivo .ODT


En principio, Word el procesador de textos de Microsoft Office (por si no lo conoceis 😊😉😉 ), puede abrir archivos .odt (los que podemos crear con openoffice y/o libreoffice desde el procesador de textos Writer)... Pero cuando intento abrir un documento .odt  creado por libreoffice Writer, nos da el siguiente error:


figura 1: Error al leer archivo .odt creado por libreoffice Writer
¡¡pero el archivo .odt no tiene ningún error ni esta dañado!!

Por lo visto, Microsoft no sigue los estándares para leer los .odt compatibles con otras aplicaciones. Puede crear archivos .odt, los cuales podemos cargar en writer sin problemas. Pero a la hora de leerlos, solo lee los que crea él mismo y los que no han sido creados por él,  da el error de la figura 1.

Tenemos varias soluciones para este problema:
- Desde Writer  en "guardar como", guardar el documento con extensión de word:
Este archivo .doc o .docx, si podremos abrirlo desde Word, sin problemas.

- Decirle al usuario que le pasemos el archivo, que se instale libreoffice o openoffice, que es gratis y libre, y ya no tendrá problemas al abrir archivo .odt


Saludos

viernes, 23 de junio de 2017

Llega el fin de curso... ¿o no?

Llega el fin de curso... ¿o no?


Llega el final del curso para los alumnos... pero para algunos padres, empieza la "recuperación"









Enlace: https://Pixton.com/es/:dhfro9nz

El dia que maté a... PlasmaShell


El día que maté a... PlasmaShell 



Pues estaba el otro día probando varios widgets  que trae el escritorio KDE Plasma 5, probé el del comic, que coloca una tira de viñetas y puedes elegir entre varias fuentes. Al colocarlo en el escritorio, no aparecía nada, pensé que era un problema de configurar el widget, y empece a navegar por sus menús... de repente el escritorio dejo de funcionar, y haciendo click con el ratón no hacia nada, ni la barra de  menús de aplicaciones.... Entonces  me dispuse a abrir una consola (use Ctrl+Alt+F2) y ver con htop, como estaban los procesos que se estaban ejecutando....

Vi que el proceso llamado "plasmashell", estaba consumiendo el 100% uno de los dos cores que tengo, osea que se había quedado "pillado" o "colgado", ya que el escritorio gráfico no funcionaba...... y lo maté... Si,  sin pensarlo dos veces..., a las bravas  (con htop,y la tecla F3 que te permite buscar y la tecla  F9 matar al proceso que selecciones).

Con la combinación de teclas Ctrl + Alt + F7, volví a la sesión gráfica, donde el fondo del escritorio estaba "en negro" (sin fondo de pantalla), y las barra de aplicaciones tampoco estaban... ¿me había quedado sin poder hacer nada? Pues no, pulsando Alt+F2, arrancó KRunner,  que permite escribir el nombre del programa que desees (incluso te  muestra opciones mientras  escribes)  y ejecutarla lo que desees... Elegí ejecutar chrome, y me funcionó, incluso también ejecute telegram, y pude  entrar el en canal de KDE Cañas y Bravas, y comentar lo que me pasaba... abriendo una consola puede volver a ejecutar plasmashell, pero a los pocos segundos se me volvía a "colgar" la aplicación (y el escritorio), pero no las otras aplicaciones que tenia abiertas (chrome, telegram,...)

Al final eliminando el widget del comic, todo volvió a la normalidad y la estabilidad del escritorio, de la que llevo meses disfrutando con KDE.... 

En fin... se ve que ese pequeño granujilla del widget Comic, no furula bien... 



Lista de Teclas Rápidas:
Ctrl + Alt + F2(F3)(F4)(F5)(F6) = Selecciona diferentes terminales de consola.

Ctrl + Alt + F7 = Volver a la sesión gráfica.

Alt+F2 -> ejecuta una aplicación krunner


Para más información;
https://askubuntu.com/questions/846781/why-is-plasmashell-using-100-cpu


jueves, 22 de junio de 2017

videotutoriales: LMMS: Vamos a hacer música...

videotutoriales: 

LMMS: Vamos a hacer música... 

Empezamos por el principio: ¿que es LMMS?...
Linux MultiMedia Studio o LMMS es una estación de trabajo de audio digital de software libre (con licencia GPL) y multiplataforma que permite producir música con la computadora. Es una alternativa a programas como FL StudioLogic Pro o Cubase puesto que es de corte profesional. Está disponible para GNU/LinuxOpenBSDMicrosoft Windows y Mac OS X1 La música puede ser producida al crear o sintetizar sonido, organizar muestras de audio y mediante su teclado MIDI. 


Os dejo una lista de videotutoriales, que os van a explicar como hacer música con este programa




Indice de videos:

  1.  Basico: Produción musical
  2.  Base de Ritmos
  3.  Piano Roll
  4.  Sample LMMS
  5.  Uso del Mixer
  6.  Función de apergio y acorde
  7.  Subir Jessie Music Box y Vst Plugin




martes, 20 de junio de 2017

Aplicaciones SemiAutomáticas: A medio camino de automatizar tareas


Aplicaciones SemiAutomáticas: 

A medio camino de automatizar tareas


Automatizar una tarea tediosa y que el "programa-ordenador" se encargue de todo es muchas veces un ideal difícil de conseguir. Puede que nos falte tiempo o conocimientos para  poderlo programar ese "todo" hasta el último detalle o tener en cuenta todas las variantes que se nos pueden presentar del problema. Pero hay una estrategia que uso frecuentemente:  podemos  evaluar entre que parte  del problema podemos hacer "manual" y que parte  que vamos a "programar" (automatizar), para conseguir el coeficiente de mejor rendimiento frente menor costo tiempo en  la tarea o el trabajo.

Abordar la resolución de problemas pensando desde primera hora,  de que parte de él se iba a resolver "manualmente" y otra parte "automáticamente",  me ha sido muy efectivo:  
  • Centrarme en la parte que podía programar, a partir de un algoritmo, sin  tener el miedo de que la aplicación se podía quedar a medias o incompleta,  con lo que no me sirviera lo que había hecho  y quedarme  con la sensación de haber perdido el tiempo.
  • Y en la parte que iba a hacer "manual" me iba a encargar de lo que no podía o no sabía como  programar.
Esta forma de resolver problemas, me ha hecho conseguir un repertorio de pequeñas "herramientas semiautomáticas", que aprovechan lo mejor de los "dos mundos", con parte  manual y parte automática. 


Os pongo un ejemplo real: Cuando estudiaba la carrera de ITOP, teníamos una asignatura de cálculo de estructuras. Una de los métodos que estudiábamos era el "método de Cross":
"El método de Cross es un método para resolver problemas de estructuras reticulares, mediante  aproximaciones sucesivas"

Representación gráfica de las iteraciones (las "aproximaciones sucesivas") donde se resuelve
 una estructura reticular formada por 3 barras y 4 nudos, con cargas continuas, mediante el método de Cross

Nota: No voy a entrar en detalles de en que consiste el método pero os dejo varias referencias al final del artículo. 

El caso es que la parte estricta de cálculo del método de Cross, era fácilmente programable y automatizable. El problema venia en la introducción de los datos a tener en cuenta en cada iteración (de donde venían estos, ya que dependía de la forma de la estructura reticular que nos dieran a calcular y los datos calculados en la anterior iteración).  Mi solución fue que esa parte la  iba a hacer "manualmente" mediante  en una hoja cuadriculada con varias columnas destinadas a escribir  los distintos nudos teniendo en cuenta la relación que tenían (si estaban conectados o no),  los datos que afectaban y el resultado de cada iteración sucesiva del cálculo.  Con lo cual conseguí un método muy rápido en cálculo y adaptable a cualquier estructura que me dieran en el examen. 



Cálculadora Casio FX 880  con la que me hacia programas en BASIC durante la carreta :)

Desgraciadamente, con el paso del tiempo (ya casi 20 años) perdí el programa :(, pero la estrategia que use para resolverlo,  quedó.

Actualmente, como os comentaba, anteriormente, tengo un pequeño repositorio de pequeñas herramientas "semiautomáticas", que me facilitan el día a día, resolver problemas o realizar tareas "repetitivas", eso si, ahora no uso hojas cuadriculadas, sino hojas de cálculo!!


Saludos


Material extra: Explicación con detalle del método de Cross y ejemplos.

lunes, 19 de junio de 2017

Recopilación: Herramientas para saber el estado de tu sesion: glances,htop, atop,iotop y iftop


Recopilación: Herramientas para saber el estado de tu sesión:  glances, htop, atop, iotop y iftop


He estado recopilando varias herramientas, para saber el estado de nuestra sesión, por ejemplo saber que proceso consume más cpu, memoria, ancho de banda, etc... 


glances

instalación:
sudo apt-get install gances

Sirve para monitorizar la carga de tu CPU, carga del sistema, estadísticas del disco duro y la red, procesos, uso de la memoria y ver los puntos de montajes de las unidades de disco.
Algunos atajos de teclado:

  • a: ordena los procesos automáticamente
  • c: ordena los procesos por consumo de CPU
  • m: ordena los procesos por consumo de memoria RAM
  • p: ordena los procesos por nombre
  • i: ordena los procesos dependiendo de la velocidad de entrada-salida en disco.








htop

Instalación:
sudo apt-get install htop
Muestra información sobre:

  • - uso de las CPUs
  • - Memoria RAM
  • - Memoria de intercambio SWAP
  • - Estadisticas del sistema: tiempo encendido, tareas, hilos


E información de los procesos  que se esten ejecutando:
PIP, usuario, cpu% y memoria% que usa, tempo, comando

Esta información se puede mostrar interactivamente, usando la teclas de funcion (f1, f2, etc) en forma de arbol de procesoso, ordenarla o filtrar por nombre de comando.




atop:

Muestra el estado de los recursos de hardware más críticos (desde el punto de vista del rendimiento) a nivel sistema, por ejemplo CPU, memoria, disco y red. Además muestra qué procesos son responsables de dicha carga (respecto a CPU y memoria).

En cada intervalo de tiempo (por defecto 10 segundos) se muestra información actualizada sobre la ocupación de recursos del sistema, seguida de una lista de procesos activos durante dicho intervalo.

iotop:

Herramienta que nos indica que proceso tiene mayor porcentaje de lectura y escritura a nuestra unidad de disco duro.



iftop:

Es una herramienta que permite visualizar de manera continua el tráfico de nuestras interfaces de red, en el cual se muestra por cada conexión establecida la recepción (RX) y la transmisión (TX) de datos.





Os dejo un video donde explican el uso de estos  comandos (en inglés):








Fuentes:
https://www.redeszone.net/gnu-linux/glances-monitor/
https://hipertextual.com/archivo/2010/03/comando-linux-htop-administra-interactivamente-los-procesos-del-sistema/
https://www.linuxito.com/gnu-linux/nivel-alto/522-monitorear-el-estado-general-de-tu-sistema-con-atop
https://lamiradadelreplicante.com/2014/11/13/iotop-determinar-que-proceso-genera-carga-de-trabajo-al-disco-duro/
https://www.youtube.com/watch?v=KE1fqZRX9mg
https://www.linuxito.com/gnu-linux/nivel-alto/522-monitorear-el-estado-general-de-tu-sistema-con-atop
http://lamiradadelreplicante.com/2014/10/14/vigila-el-consumo-de-ancho-de-banda-de-tu-red-con-iftop/



jueves, 15 de junio de 2017

webscraping ¿Como extraer datos de páginas web con Python? Ejemplo con página de apuestas



webscraping 

 ¿Como extraer datos de páginas web con Python?





En python tenemos varias librerías que nos facilitan la extracción de datos de páginas web. En el ejemplo que sigue voy a usar las siguientes:

  • requests (que es la que se encarga de leer la página web) 
  • beatifulsoup4 ( https://www.crummy.com/software/BeautifulSoup/ ) que es la que tiene las herramientas para extraer la información.


Para instalarlas, usa los siguientes comandos.


$ pip install beautifulsoup4
$ pip install requests

Ejemplo:
Trataremos de extraer los datos de la página web www.maratonbet.es de un partido "en vivo", que nos muestre datos del tipo: tiempo, resultado, y las cuotas de los mercados más importante (resultados). En programa necesita que se le pase en la linea de comando un parámetro con la url de la pagina web a analizar.

En el siguiente enlace podéis descargar el código del programa: alojado en google drive


Análisis del código:

1) Importando librerias
from bs4 import BeautifulSoup
import requests
import sys
Importamos las librerías que vamos a usar en la aplicación. La librería "sys" es necesaria para leer los argumentos de la linea de comandos.
2) Análisis de argumentos

if len(sys.argv)>=2:

  Hacemos una comprobación sobre el numero de argumentos. Si hay 2 o más seguimos ejecutando el programa, sino escribiremos en la consola que faltan argumentos:
else:
print "Falta argumento: url de la página mbet a analizar";

3) Cuerpo principal del programa:
3.1) Leer la url del argumento de la linea de comando y cargar página web:
URL=sys.argv[1]

req = requests.get(URL)

3.2) Una vez cargada empezamos con crear un objeto BeautifulSoup con el texto extraido:

html = BeautifulSoup(req.text, "html.parser")


3.3) Extraigo el resultado y el tiempo del encuentro.

resultadoytiempo=html.find('td',{'class':'event-description'})

Nota: Anteriormente he analizado la página web de los encuentros en directo de mbet, y he visto como esta formado la página web, etiquetas tipo table, td, div, class, que usa página web para mostrar la información.
Imprimo el resultado y tiempo:

print " %s " %resultadoytiempo.getText()


3.4) Proceso entradas de resultados:
Las etiquetas "div" que usan la case "nowrap simple-price", contienen datos del mercado y cuota a la que estan referidas. Con la siguiente instrucción, consigo un array con estos datos.


entradas = html.find_all('div', {'class': 'nowrap simple-price'})


Ahora con un bucle for, voy extrayendo los datos del mercado dentro de cada elemento de "entradas"

for i, entrada in enumerate(entradas):
# Con el método "getText()" no nos devuelve el HTML
equipo1 = entrada.find('span', {'class': 'left-simple'}).getText()
cuota1= entrada.find('span', {'class': 'right-simple'}).getText()

Y los imprimo en pantalla:
# Imprimo el equipo/resultado y cuota
print "%d - %s | %s " % (i + 1, equipo1, cuota1)


Pantallazo de uso y salida del script:



Vídeo de uso de la aplicación:




Saludos


Fuentes y Documentación Extra:
https://jarroba.com/scraping-python-beautifulsoup-ejemplos/
https://www.crummy.com/software/BeautifulSoup/
https://es.slideshare.net/ecrespo/webscraping