miércoles, 25 de noviembre de 2015

Cosas que hacer al instalar Fedora 23 desde 0

Hola.

Os voy a resumir las aplicaciones básicas que suelo utilizar en Linux, para que lo tengais en cuenta. Si prefieres ahorrarte poner sudo todo el rato, puedes loguearte como administrador con el comando
su -
No lo recomiendo por temas de seguridad.

1º Actualiza el sistema y reinicia.
sudo dnf update
 
2º Cambia el nombre de tu ordenador (Opcional)
sudo hostnamectl set-hostname --static "VgoniF23"
sudo hostnamectl status
3º Si juegas, instala steam ANTES de instalar los gráficos propietarios de Nvidia, sino, no podrás usar Steam. Tendrás que desinstalarlos, instalar y ejecutar Steam, y volverlos a instalar.
sudo dnf config-manager --add-repo=http://negativo17.org/repos/fedora-steam.repo
sudo dnf -y install steam
4º Instala tu escritorio favorito, en mi caso, Cinnamon
sudo dnf install @cinnamon-desktop
Aunque puedes utilizar @mate-desktop @kde-desktop @xfce-desktop o @lxde-desktop


5º Instala dependencias importantes como Java, unzip
sudo dnf install icedtea-web java-openjdk unzip
6º Instala los programas que uses normalmente, como:
sudo dnf install guake vlc gimp qbittorrent VirtualBox
7º Instala tu sistema de mensajería favorito. Yo suelo emplear para todo Telegram, por comodidad y quitarme la necesidad de mirar el móvil, porque es seguro, y opensource:
sudo dnf copr enable rommon/telegram && sudo dnf -y install telegram-desktop.x86_64
8º Y además un buen gestor de texto, yo personalmente uso atom, también por ser opensource, aunque lo complemento con vim para acceso por consola (aunque para pequeños cambios uso atom que viene preinstalado)
sudo dnf copr enable helber/atom && sudo dnf -y install atom vim
Y por último no te olvides de instalar los drivers de nvidia si lo necesitas porque eres un "exigente" del rendimento, como ya expliqué aquí. He de decir que el rendimiento de los drivers en linux es inferior a Windows 10, por eso da mejores resultados, aunque no todo son los drivers, como puedes ver aquí. Aunque siempre habrá gente que se vaya, aunque a veces vuelva.

sábado, 21 de noviembre de 2015

Guia de scripting bash para GNU/Linux I, introducción


La shell es el interprete de comandos, la consola o terminal de toda la vida, la capa más básica para comunicar al usuario con el kernel del sistema. Con ella podemos hacer potentes scripts para automatizar tareas que de por si son aburridas, triviales y costosas en tiempo humano. Sacrificando algo de tiempo en automatizarlas te ahorrará gritones de horas a tu yo del futuro, aunque para ello tendrás que sacrificar algo de  tiempo de tu yo presente.

Rendimiento respecto tiempo invertido

Para este tutorial me voy a basar en esta guia, comenzaré con unos conceptos básicos:
  • Como usar variables
  • Como imprimir información por pantalla
  • Uso básico de if, while y for

Para los ansiosos, teneis todo el código de este tutorial aqui. En próximos tutoriales ampliaré información y al final resolveré el problema de tener varios ficheros con texto no deseado para editarlos automáticamente.

Para los más pacientes, parto de la base de que no sois expertos en el tema aunque si sabeis algo de programar en general, dejaré todo extensamente comentado y bien tabulado para que no te pierdas en el proceso (vamos, como hago siempre).

Script bash coloreado en Atom

Puedes usar tu editor de texto favorito para hacer los scripts, yo usaré atom porque es multiplataforma, opensource, y colorea la sintaxis.

Crea el fichero "myfirstscript.sh" en la ruta que quieras. No olvides que a cada fichero que crees hay que darle permisos de ejecución, escritura y lectura, bien para cada usuario:
chmod +rwx myfirstscript.sh
O bien solo para el creador:
chmod u+rwx myfirstscript.sh
Y para ejecutarlo el clásico
./myfirstscript.sh
Conceptos básicos e importantes:

1.- Variables:
  • Tipo int, se asigna valor con nombre=value, siendo value un número.
  • Tipo string, se asigna el valor con nombre="value", siendo value caracteres
  • Tipo undefined, si no existe una variable, es NULL, y no se imprime
2.- Imprimir información:
  • Se usa el comando echo "mensaje"
  • El contenido de una variable se imprime ${nombre}
  • Si la variable (undefined) no existe no aparecerá nada.
3.- Comprobación if, manual, comparations.
  • Se usa la sintaxis if[condición]
  • then para el codigo que se debe ejecutar si es cierto
  • elif para más condiciones
  • else para los casos restantes
Ejemplo:
if [ -z "${var}" ] # Check if exist, z option true if size is zero
then
   echo "var no existe"
else
   echo "var si existe"
fi
 4.- Bucle while, manual, comparations.
  • Se usa la sintaxis while [ CONDICIÓN ]
  • do para el código que se debe ejecutar mientras sea cierta
  • El script saldrá del bucle si se deja de cumplir la condición, o se ejecuta un break
  • En caso contrario quedaría atrapado hasta que se mate el proceso con kill o se mate el actual en consola con Control+C
Ejemplo:
counterwhile=0
while [ ${counterwhile} -lt 5 ]
    do
    echo "Hola iteración: ${counterwhile}"
    let counterwhile=counterwhile+1 # Forward
    #break
done
Nota: Si descomentas el break, saldrá en la primera iteración, sino imprimirá de la 0 a la 4.

5.- Bucle for, manual.
  • Se usa la sintaxis for NOMBRE in LISTA
  • do para el código que se debe ejecutar en cada iteración, al terminar done
  • El script termina al acabar la llista, o se ejecuta un break
  • Siempre acaba.
Ejemplo:
  for name in {1..5}
  do
      echo "  Variable name is: ${name}"
      #break
  done
Nota: Si descomentas el break, saldrá en la primera iteración, sino imprimirá de la 1 a la 5.

Ahora si, copia el código del snippet, pegalo en myfirstscript.sh, y ejecutalo. Se debería crear las carpetas input y output, y dar como salida:
------- My first script begins execution...
--------------------------------------------
  If you want to print a special character use \ before, # is not, $ is a special characters
  Variable with type int intvariable, ${intvariable} contains 5
  Variable with type string inputpath, ${inputpath} contains ./input
  Variable with type string outputpath, ${outputpath} contains ./output
  An unassigned variable no exist, so ${unassigned} = NULL =
  Check if exist input path...
  Creating input folder...
  Check if exist output path...
  Creating output folder...
  Check if exist file: myfile, with extension dat, full name is: myfile.dat
  File: myfile.dat not found, creating...
  List with files in ./output:
  Filename 0: myfile_0.dat   -    full: ./output/myfile_0.dat
  Filename 1: myfile_1.dat   -    full: ./output/myfile_1.dat
  Filename 2: myfile_2.dat   -    full: ./output/myfile_2.dat
  Filename 3: myfile_3.dat   -    full: ./output/myfile_3.dat
  Filename 4: myfile_4.dat   -    full: ./output/myfile_4.dat
  ls show a list of all of them too:
myfile_0.dat  myfile_1.dat  myfile_2.dat  myfile_3.dat    myfile_4.dat
------- My first script end now!
---------------------------------
Para cualquier duda, google es tu amigo, y sino busca ayuda en stackoverflow después de leerte las normas.

Drivers nvidia en Alienwarex11-R2 sobre Ubuntu 15.04, no sirve en la 15.10

 Aquí tienes la guía oficial.

Este modelo de portatil, algo antiguo, utiliza 2 tarjetas gráficas, la de la placa base y una nvidia dedicada. Se pueden ejecutar aplicaciones entre ambas añadiendo delante los siguientes comandos:
glxinfo|egrep "OpenGL vendor|OpenGL renderer*"
La de la placa base, dará una salida como esta:
OpenGL vendor string: Intel Open Source Technology Center
OpenGL renderer string: Mesa DRI Intel(R) Ironlake Mobile
y con la dedicada:
optirun glxinfo|egrep "OpenGL vendor|OpenGL renderer"
cuya salida será:
OpenGL vendor string: NVIDIA Corporation
OpenGL renderer string: GeForce GT 335M/PCIe/SSE2
 Y usas steam, y quieres que al lanzar los juegos utilicen la nvidia, añade en opciones de lanzamiento:
primusrun %command%
Si prefierse correrlo con intel para ahorrar energía, utiliza
optirun %command%

Las diferencias son:
optirun - run programs on the discrete video card
primusrun - run an application on a discrete NVIDIA video card
 Puedes comprobar la diferencia entre ponerlo y no ponerlo. Más info aquí.

Es algo complicado instalar los drivers correctamente, tras dar muchas vueltas lo conseguí con este articulo y resolver los problemas duales. Si dispones de la ultima versión de Ubuntu, aquí tienes toda la información referente a gráficos propietarios.

Nota: No actualiceis a Ubuntu 15.10, el kernel usa ABI 20, pero el driver 340 de nvidia no lo soporta, si lo hacen superiores, pero esos no soportan esta tarjeta gráfica que es la NVidia 335M. Tampoco funciona correctamente en Fedora 22 ni 23.

Para instalarlo en Ubuntu 15.04 lo más fácil y sencillo es seguir este articulo.

jueves, 5 de noviembre de 2015

15 algoritmos para ordenar vectores en C++ oidos

Para la entrada de hoy os traigo una curiosidad de video, en el que se analizan distintos tipos clásicos de algoritmos para la ordenación de un vector, de menor a mayor, y les ponen curiosos sonidos



En la página web a parte del video, encontrareis el código fuente en C++, los ejecutables para Linux y Windows, el código fuente y una explicación del proyecto. Espero que lo disfruteis tanto como yo.