Wednesday, 23 December 2015
Blog moved to http://maitesin.github.io/
I decided to move this blog to http://maitesin.github.io/ due a better integration with the tools I am currently using to create this posts.
Tuesday, 22 December 2015
Unit test with Google Test for C++
Introduction
Google Test is one of the available Frameworks to create unit test for C++. In this example I will use CMake to configure the project and build. Furthermore, for the dependency manager I will use the new and shiny conan.Before starting, why use a dependency manager such as conan or software to configure and build such as CMake? Because these technologies are widely use it in real projects.
All the code and configuration files used for this entry are available in this repo in GitHub.
Step 1 Install conan, configure project and gather dependencies
First of all we need to have install conan from pip2 doing:pip2 install conan
Now with conan installed we do not have to worry about installing Google Test in our system.Next step will be preparing the conanfile.txt to gather de dependencies:
[requires]
gtest/1.7.0@lasote/stable
[options]
gtest:shared=True
[generators]
cmake
Once we have conan ready we only need to run it to download the dependency and configure them to have them ready for CMake:conan install .
This will output something similar to:WARN: Migration: Updating settings.yml with new gcc versions
Requirements
gtest/1.7.0@lasote/stable
Package for gtest/1.7.0@lasote/stable in /home/maitesin/.conan/data/gtest/1.7.0/lasote/stable/package/ca89189bc59ff53842d6beea76549f289b7b88bd
Generated conaninfo.txt
Generated conanbuildinfo.cmake
Step 2 configuring CMake
The configuration will be done in the CMakeLists.txt file:project(Google_test_example)
cmake_minimum_required(VERSION 2.8)
include(conanbuildinfo.cmake)
CONAN_BASIC_SETUP()
INCLUDE_DIRECTORIES(src)
ADD_EXECUTABLE(run_test src/test.cpp)
TARGET_LINK_LIBRARIES(run_test ${CONAN_LIBS})
Step 3 code and unit test
The code will be held in the src folder. It will contain two files: functions.h and test.cpp.The function(s) we want to test will be in the header file function.h:
int int_addition(int a, int b) {
int c = a + b;
return c;
}
The test(s) we want to run will be in the source file test.cpp:#include "gtest/gtest.h"
#include "functions.h"
TEST(IntAddition, Negative) {
EXPECT_EQ(-5, int_addition(-2, -3)) << "This will be shown in case it fails";
EXPECT_EQ(-3, int_addition(5, -8));
}
TEST(IntAddition, Positive) {
EXPECT_EQ(4, int_addition(1, 3));
EXPECT_EQ(9, int_addition(4, 5));
}
int main(int argc, char **argv) {
testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
Step 4 putting all together
What is left to do is actually build the project and run the test. In order to do this we need to run:cmake .
This will output something similar to:-- The C compiler identification is GNU 5.3.0
-- The CXX compiler identification is GNU 5.3.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: /home/maitesin/workspace/blog/google_test_2015_12_22
There will be now a Makefile generated from CMake with everything ready to compile and link all the sources and dependencies together.make
This will output something like:Scanning dependencies of target run_test
[ 50%] Building CXX object CMakeFiles/run_test.dir/src/test.cpp.o
[100%] Linking CXX executable bin/run_test
[100%] Built target run_test
This will generate an executable in the bin folder, and we will be able to run them with the command:./bin/run_test
This will result with the following output:[==========] Running 2 tests from 1 test case.
[----------] Global test environment set-up.
[----------] 2 tests from IntAddition
[ RUN ] IntAddition.Negative
[ OK ] IntAddition.Negative (0 ms)
[ RUN ] IntAddition.Positive
[ OK ] IntAddition.Positive (0 ms)
[----------] 2 tests from IntAddition (0 ms total)
[----------] Global test environment tear-down
[==========] 2 tests from 1 test case ran. (0 ms total)
[ PASSED ] 2 tests.
Tuesday, 10 November 2015
Tmux, basic command and usage
Tmux, basic commands and usage
How to install tmux in Archlinux/Manjaro
To install tmux in Archlinux/Manjaro you only need to type in the terminal:yaourt -S tmux
How to start using tmux
Opening a tmux session
Tmux works with sessions, if you know screen you are familiar with this kind o sessions. How to create a session:tmux new -s main
What does this command? It creates a session (-s) with a label called main. Label are useful if you have several sessions running.Detaching from a tmux session
Detaching from a session means that tmux will keep running this session (as well as the programs running on it), but you will not see it. Really useful to keep it running in a server with something you do not want to loose even if the connection fails. To detach from a session simply type control + b and afterwards dAttach to a tmux session
Attaching to a session means that we will join again to a session we detached before. To do that you simply type:tmux attach -t main
What does this command? It attaches to (-t) to a session with label main.Demo of creating, detaching and attaching to a session
Inside tmux, basic steps
Split window horizontal
To split horizontally the window we only need to press: control + b and “Split window vertical
To split vertically the window we only need to press: control + b and %Moving between windows
To move between windows we only need to press: control + b and an arrow key one time.Resizing windows
To resize a window we only need to press: control + b and arrow key several times.Demo of splitting, moving and resizing windows
Create a new tab in the session
To create a new tab and move to it we only need to press: control + b and c. Check in the bottom of the terminal that you can see how many tabs do you have and what do they have focused.Go to next tab
To go to the next tab we only need to press: control + b and nGo to previous tab
To go to the previous tab we only need to press: control + b and pDemo of creating and swapping tabs
Well, that was the basics. You can do plenty more in tmux, but for that you will have to use change the config file. As always, if people wants to know more about it and how to configure it, please leave a comment.
Saturday, 17 October 2015
How to install Xmonad in Arch Linux/Manjaro (2/2)
Now it is time to talk about my personal configuration in Xmonad. I will show pieces of the configuration file and I will explain what they mean (no worries, we will not go into Haskell details) and I will show some pictures if needed.
After that, we can see for tiled1 the ratio of the amount of screen we want to use between the master window and the stack. Moreover, we can see how the pidginLayout and nobordersLayout are specified. Please, see below a screenshot for the pidginLayout.
In this piece of configuration file we can see the hooks that we want to have in the system. I think they are quite straight forward, but I would like to mention that Firefox is moved always to workspace 3:Web or Vlc is moved to workspace 5:Video.
Finally, to apply these changes you need to compile Xmonad and restart the session. To compile your changes you only have to write in the terminal:
That's all for today. If anyone has questions or wants more information, please, feel free to write a comment.
myTerminal = "xterm"
myWorkspaces = ["1:Main","2:Xat","3:Web","4:Music","5:Video","6", "7", "8", "9"]
myModMask = mod4Mask
In this code above we can see that xterm will be my terminal, my 9 workspaces (note that the names are strings, then you can change them as you wish) and the modMask button (using the windows button, mod4Mask, to use Xmonad actions).
myLayout = onWorkspace "2:Xat" pidginLayout $ onWorkspace "5:Video" nobordersLayout $ tiled1 ||| Mirror tiled1 ||| nobordersLayout
where
tiled1 = spacing 5 $ Tall nmaster1 delta ratio
--tiled2 = spacing 5 $ Tall nmaster2 delta ratio
nmaster1 = 1
nmaster2 = 2
ratio = 2/3
delta = 3/100
nobordersLayout = smartBorders $ Full
gridLayout = spacing 8 $ Grid
--gimpLayout = withIM (0.20) (Role "gimp-toolbox") $ reflectHoriz $ withIM (0.20) (Role "gimp-dock") Full
pidginLayout = withIM (18/100) (Role "buddy_list") gridLayout
In this part of the configuration file I am specifying what the behaviours of the different workspaces are. We can see that workspace 2:Xat will be using pidginLayout and workspace 5:Video will be using nobordersLayout. All the other workspaces will have three layouts (you can change them as you wish).After that, we can see for tiled1 the ratio of the amount of screen we want to use between the master window and the stack. Moreover, we can see how the pidginLayout and nobordersLayout are specified. Please, see below a screenshot for the pidginLayout.
| Pidgin running with special layout in workspace 2:Xat |
myManageHook = composeAll
[ className =? "File Operation Progress" --> doFloat
, resource =? "desktop_window" --> doIgnore
, className =? "xfce4-notifyd" --> doIgnore
, className =? "Pidgin" --> doShift "2:Xat"
, title =? "New Tab - Google Chrome" --> doShift "3:Web"
, className =? "Firefox" --> doShift "3:Web"
, className =? "Clementine" --> doShift "4:Music"
, className =? "Vlc" --> doShift "5:Video"
]
In this piece of configuration file we can see the hooks that we want to have in the system. I think they are quite straight forward, but I would like to mention that Firefox is moved always to workspace 3:Web or Vlc is moved to workspace 5:Video.
------------------
-- Window Managing
------------------
-- Move focus to the next window
, ((mod4Mask, xK_j), windows W.focusDown)
-- Move focus to the previous window
, ((mod4Mask, xK_k), windows W.focusUp)
-- Move focus to the master window
, ((mod4Mask, xK_m), windows W.focusMaster)
-- Swap the focused window and the master window
, ((mod4Mask, xK_Return), windows W.swapMaster)
-- Swap the focused windows with the next window
, ((mod4Mask .|. shiftMask, xK_j), windows W.swapDown)
-- Swap the focused windows with the previos window
, ((mod4Mask .|. shiftMask, xK_k), windows W.swapUp)
-- Shrink the master area
, ((mod4Mask, xK_h), sendMessage Shrink)
-- Expand the master area
, ((mod4Mask, xK_l), sendMessage Expand)
This is another important piece of the configuration file. This snippet shows how to interact with the windows you have in a workspace. Let's read a few lines to see how it works. The first one is how to focus on the next window, for that we have to use the combination Win+j or to move to the previous window we have to use the combination Win+k.
-------
-- Apps
-------
-- Google Chrome
, ((mod4Mask, xK_g), spawn "google-chrome-stable")
-- Pidgin
, ((mod4Mask .|. shiftMask, xK_p), spawn "pidgin")
-- VirtualBox
, ((mod4Mask, xK_v), spawn "VirtualBox")
-- Clementine
, ((mod4Mask, xK_c), spawn "clementine")
-- VLC
, ((mod4Mask .|. shiftMask, xK_v ), spawn "vlc")
-- Terminator
, ((mod4Mask, xK_Return), spawn "terminator") -- spawn terminator terminal
-- Thunar
, ((mod4Mask, xK_t), spawn "thunar")
-- Dmenu
, ((mod4Mask, xK_p), spawn "dmenu_run")
-- Kill the focused app
, ((mod4Mask .|. shiftMask, xK_c), kill) -- kill the app
The last piece of configuration file shows how to launch applications using shortcuts. As you can see, they are as easy as the movements of the windows. To launch pidgin I will have to use Win+Shift+p or to kill the app which I am focused I will use Win+Shift+c.Finally, to apply these changes you need to compile Xmonad and restart the session. To compile your changes you only have to write in the terminal:
xmonad --recompile
That's all for today. If anyone has questions or wants more information, please, feel free to write a comment.
Wednesday, 14 October 2015
Como instalar Xmonad en Arch Linux/Manjaro (1/2)
En éste post hablaré sobre como instalar Xmonad y usarlo con mis ficheros de configuración personales para hacerlo funcionar. Recuerda que los videos están hechos con asciinema. Eso significa que puedes copiar texto del video!!
Primer paso es añadir el repositorio archlinuxfr a el fichero /etc/pacman.conf e instalar yaourt.
Instala xmonad, xmobar, dmenu, zsh, git, feh entre otras cosas que son necesarias.
Clona el repositorio dot-files desde mi repositorio en GitHub y activa SLiM como login manager.
Una vez te autentiques en el sistema deberías ver algo parecido a esto:
Hay muchos ficheros de configuración que han sido usados para hacer funcionar esto. Además, sería muy costoso y extenso explicar cada uno de ellos, pero si la gente muestra interes, en alguno o en todos ellos, crearé otra entrada explicandolos.
En el siguiente post hablaré sobre my configuración de Xmonad y como usarlo. Si quieres ver un avance de lo que veremos en el proximo post puedes hechar un vistazo a el fichero ~/.xmonad/xmonad.hs
Para finalizar. Ultimamente he estado jugando un poco con DWM, otro tiling window manager, de suckless.org. Haré una entrada explicando como usarlo y porque creo que es muy interesante.
Primer paso es añadir el repositorio archlinuxfr a el fichero /etc/pacman.conf e instalar yaourt.
Instala xmonad, xmobar, dmenu, zsh, git, feh entre otras cosas que son necesarias.
Clona el repositorio dot-files desde mi repositorio en GitHub y activa SLiM como login manager.
Una vez te autentiques en el sistema deberías ver algo parecido a esto:
Hay muchos ficheros de configuración que han sido usados para hacer funcionar esto. Además, sería muy costoso y extenso explicar cada uno de ellos, pero si la gente muestra interes, en alguno o en todos ellos, crearé otra entrada explicandolos.
En el siguiente post hablaré sobre my configuración de Xmonad y como usarlo. Si quieres ver un avance de lo que veremos en el proximo post puedes hechar un vistazo a el fichero ~/.xmonad/xmonad.hs
Para finalizar. Ultimamente he estado jugando un poco con DWM, otro tiling window manager, de suckless.org. Haré una entrada explicando como usarlo y porque creo que es muy interesante.
Monday, 12 October 2015
How to install Xmonad in Arch Linux/Manjaro (1/2)
In this post I will talk about how to install Xmonad and use my personal configuration files to make it run. Remember the videos are made with asciinema. That means you can copy from the video!!
First step is adding archlinuxfr repo to the /etc/pacman.conf file and installing yaourt.
Install xmonad, xmobar, dmenu, zsh, git, feh and all other needed stuff.
Gather dot-files from my repository in GitHub and enable SLiM as login manager.
Once you log into the system you should see something like:
There are plenty of configuration files put in place to make it run. Therefore, it will be so long to explain each of them, but if people are interested in some or all of them I will make another entry explaining them.
In the next post I will talk about the configuration I have in Xmonad and how to use it. If you want to see something in advance have a look to the file ~/.xmonad/xmonad.hs
Finally, recently I have been playing with DWM, another tiling window manager, from suckless.org. I will make another entry in the future explaining about it, because I think is really interesting.
First step is adding archlinuxfr repo to the /etc/pacman.conf file and installing yaourt.
Install xmonad, xmobar, dmenu, zsh, git, feh and all other needed stuff.
Gather dot-files from my repository in GitHub and enable SLiM as login manager.
Once you log into the system you should see something like:
There are plenty of configuration files put in place to make it run. Therefore, it will be so long to explain each of them, but if people are interested in some or all of them I will make another entry explaining them.
In the next post I will talk about the configuration I have in Xmonad and how to use it. If you want to see something in advance have a look to the file ~/.xmonad/xmonad.hs
Finally, recently I have been playing with DWM, another tiling window manager, from suckless.org. I will make another entry in the future explaining about it, because I think is really interesting.
Thursday, 27 August 2015
Installing Manjaro minimal
Manjaro has different flavours and each one has their own installer, but there is a minimal version of Manjaro. The minimal version only installs the required software to start the system. At the end we have something similar such after installing Arch Linux, but we all advantages of Manjaro.
Manjaro minimal net install 64 bits
Manjaro minimal net install 32 bits
I hope you liked it. In the next post I will explain how to install and configure Xmonad in Manjaro.
Manjaro minimal net install 64 bits
Manjaro minimal net install 32 bits
Right below you can watch a video where I show how you can install Manjaro minimal (for those ones who remember the old Arch Linux installer this will remind you to it)
NOTE: When it looks like I am doing nothing in the /etc/hostname file actually is installing the system, but it is not shown in the video.
NOTE: When it looks like I am doing nothing in the /etc/hostname file actually is installing the system, but it is not shown in the video.
I hope you liked it. In the next post I will explain how to install and configure Xmonad in Manjaro.
Instalación mínima de Manjaro
Manjaro tiene diferentes instaladores dependiendo de que entorno de escritorio vayas a instalar, pero también cuenta con un instalador mínimo. Éste instala sólo lo necesario y nos proporciona un entorno parecido al que tenemos después de instalar Arch Linux, pero con las ventajas de Manjaro.
Manjaro minimal net install 64 bits
Manjaro minimal net install 32 bits
Espero que os haya gustado. En la siguiente entrada explicaré como instalar y configurar Xmonad en Manjaro.
Manjaro minimal net install 64 bits
Manjaro minimal net install 32 bits
A continuación podéis ver un video en el cual realizo una instalación de Manjaro (para los que llegasteis a conocer el antiguo instalador de Arch Linux os será familiar).
Nota: Cuando tengo el curso encima de /etc/hostname por unos 10 minutos es que el sistema se está instalando. No se porque no se ha grabado bien esa parte.
Nota: Cuando tengo el curso encima de /etc/hostname por unos 10 minutos es que el sistema se está instalando. No se porque no se ha grabado bien esa parte.
Espero que os haya gustado. En la siguiente entrada explicaré como instalar y configurar Xmonad en Manjaro.
Thursday, 6 June 2013
Diferentes tipos de redes para VirtualBox
La aplicación VirtualBox nos proporciona diferentes opciones para conectar las máquinas virtuales que hemos creado entre ellas o a diferentes redes. En esta entrada quiero mostraros las opciones que nos proporciona VirtualBox y que características y ventajas nos proporcionan.
por ejemplo, vamos a crear una regla que nos permita conectarnos por SSH a la máquina virtual ArchLinux, con cualquier IP y desde cualquier IP. Para ello vamos a dejar en blanco el apartado de las IP.
Los tipos de conexión que hay disponibles en VirtualBox:
- NAT (Network Address Translation).
- Bridged.
- Red interna.
- Red sólo anfitrión.
Supongo que la mayoría estáis familiarizados con los dos primeros tipos de conexión, pero los otros dos os pueden resultar confusos. Por eso paso a explicar un poco que características tienen cada tipo y la forma de utilizarlas en el VirtualBox.
NAT:
El NAT (Network Address Translation) es un mecanismo utilizado por routers IP para intercambiar paquetes
entre dos redes que asignan mutuamente direcciones incompatibles. En este caso el router es el sistema anfitrión que hace el trabajo de traducción entre las dos redes (la privada de las máquinas virtuales y a la que
está conectado el sistema anfitrión).
VBoxManage modifyvm "Nombre Máquina Virtual" --natpf1 "<Nombre de la regla>,tcp|udp,<IP destino>,<Puerto de escucha>,<IP máquina virtual>,<Puerto de la máquina virtual>"
por ejemplo, vamos a crear una regla que nos permita conectarnos por SSH a la máquina virtual ArchLinux, con cualquier IP y desde cualquier IP. Para ello vamos a dejar en blanco el apartado de las IP.
VBoxManage modifyvm "ArchLinux" --natpf1 "ConexionSSH,tcp,,2222,,22"
Bridged:
El Puente conecta segmentos de red formando una sola subred. Para nosotros tenemos dos segmentos de red,
uno es el que forman las máquinas virtuales y el otro es la red a la que está conectado el sistema anfitrión.
Utilizamos la máquina virtual ArchLinux para que se conecte a una red puente.
VBoxManage modifyvm "Nombre Máquina Virtual" --nic1 bridged --bridgeadapter1 <Adaptador de red adaptador>Utilizamos la máquina virtual ArchLinux para que se conecte a una red puente.
VBoxManage modifyvm "ArchLinux" --nic1 bridged --bridgeadapter1 eth0
Red interna:
La red interna es similar a la puente en que la máquina virtual se puede comunicar directamente con “el
mundo exterior”. Sin embargo, el “el mundo exterior” está limitado a las otras máquinas virtuales en el mismo
anfitrión que estén conectadas a la misma red interna.
Para utilizar este tipo de conexión debemos tener un servidor DHCP primero, para ello ejecutamos la siguiente orden:
Ahora debemos decirle a la máquina virtual que utilize la red que acabamos de crear. Para ello empleamos esta orden:
Para utilizar este tipo de conexión debemos tener un servidor DHCP primero, para ello ejecutamos la siguiente orden:
VBoxManage dhcpserver add --netname intnet --ip 192.168.2.100 --netmask 255.255.255.0 --lowerip 192.168.2.101 --upperip 192.168.2.254 --enableAhora debemos decirle a la máquina virtual que utilize la red que acabamos de crear. Para ello empleamos esta orden:
VBoxManage modifyvm "ArchLinux" --nic1 intnet
Red sólo-afitrión:
La red sólo−anfitrión es un híbrido entre la red puente y la res interna. Las máquinas virtuales puede
comunicarse entre si y además con el sistema anfitrión.
Primero debemos activar un servidor DHCP, como en el caso anterior, y después cambiar el tipo de red en la máquina virtual como en la siguiente orden:
VBoxManage modifyvm "ArchLinux" --nic1 hostonly
Como siempre si alguien tiene alguna duda o quiere preguntar algo, que lo escriba en los comentarios y lo intentaré responder ;)
comunicarse entre si y además con el sistema anfitrión.
Primero debemos activar un servidor DHCP, como en el caso anterior, y después cambiar el tipo de red en la máquina virtual como en la siguiente orden:
VBoxManage modifyvm "ArchLinux" --nic1 hostonly
Como siempre si alguien tiene alguna duda o quiere preguntar algo, que lo escriba en los comentarios y lo intentaré responder ;)
Tuesday, 19 March 2013
Kali Linux con Mate
Supongo que todos sabéis ya lo que es Kali Linux, o como lo llaman algunos BackTrack 6. Prefiero llamarla Kali Linux, ya que si los creadores han decidido cambiarle el nombre por algo será.
El objetivo de este post es instalar y hacer funcionar el escritorio Mate en Kali Linux. Personalmente no me gusta el gnome3 y prefiero instalar Mate. Para ello vamos a seguir unos sencillos pasos.
El primero es añadir a los orígenes del software el repositorios de mate para Debian. Para ello editamos el fichero /etc/apt/sources.list como en la figura siguiente.
![]() |
| Fichero /etc/apt/sources.list con el repositorios de Mate para Debian |
Ahora debemos hacer un apt-get update, pero nos dará un error. Eso es normal tranquilos, debemos instalar el paquete mate-archive-keyring como se puede ver en la figura siguiente.
![]() |
| Instalando el paquete mate-archive-keyring |
Ahora ya podemos realizar el apt-get update e instalar los paquetes: alsa-utils, gamin, mate-core, mate-desktop-environment y synaptic. Para ello podemos realizar los mismo que se puede ver en la siguiente figura.
![]() |
| Instalando paquetes necesarios para Mate |
Una vez hecho ésto podemos salir de la sesión y acceder pero cambiando el tipo de escritorio como en la siguiente figura.
![]() |
| Login en el sistema con la opción de Mate |
Si hemos seleccionado MATE como escritorio ahora podemos ver que tenemos las herramientas de Kali Linux en el menú, pero no de forma ordenada y bonita como en el gnome. Para ello debemos ir a la carpeta /etc/xdg/menus como en la figura siguiente.
![]() |
| Cambiando de carpeta para ir a los menús |
Ahora debemos editar el fichero mate-applications.menu y añadir el apartado Kali Linux que podemos ver en la siguiente figura. Yo lo he añadido entre los apartados Internet y Multimedia como en la versión de gnome.
![]() |
| Edición del manú de Mate |
Ahora debemos salir de la sesión y autenticarnos de nuevo para acceder al escritorio Mate como hemos hecho anteriormente y ya tendremos el menú de Kali Linux en Mate. Lo podemos ver en la siguiente figura.
![]() |
| Mate con menú Kali Linux |
Si también queremos el fondo de escritorio que trae Kali Linux por defecto podemos pulsar el botón derecho en el escritorio y elegimos "cambiar fondo de escritorio". A continuación pulsamos añadir y buscamos en la carpeta /usr/share/wallpapers/kali/contents/images/ ahí encontraremos diferentes versiones del fondo de escritorio.
![]() |
| Buscando la imagen de fondo de escritorio por defecto en Kali Linux |
Elegimos la más adecuada a nuestra resolución y ya tendremos un Kali Linux totalmente funcional con Mate.
![]() |
| Kali Linux con Mate |
Thursday, 24 January 2013
Gráficas en Python
Otra entrada sobre Python, ésta vez sobre como hacer gráficas muy chulas y de forma sencilla.
Necesitamos tres paquetes para poder hacer las figuras con los ejemplos que voy a describir. Como siempre los pasos a seguir son en Arch Linux aunque deben ser fáciles de reproducir en otros sistemas operativos.
[maitesin@Malesero ~]$ yaourt -S python2-numpy python2-matplotlib
[sudo] password for maitesin:
resolviendo dependencias...
verificando conflictos...
Objetivos (9): python2-dateutil-2.1-6 python2-dbus-1.1.1-2 python2-pyparsing-1.5.7-1 python2-pyqt-4.9.6-1 python2-pytz-2012j-1
python2-sip-4.14.2-1 python2-six-1.2.0-2 python2-matplotlib-1.2.0-8 python2-numpy-1.7.0-1
Tamaño de descarga: 30,17 MiB
Tamaño instalado: 95,95 MiB
¿Continuar con la instalación? [S/n]
En mi caso yo uso Python 2 si queréis utilizar éstos módulos en Python 3 sólo tenéis que eliminar el 2 del nombre del paquete. Una vez instalado se usa como el en siguiente ejemplo:
#!/usr/bin/env python
#Graficas para los grafos con ciclos
from numpy import *
from pylab import *
from matplotlib import rc, rcParams
#rc('text',usetex=True) #Para habilitar la escritura en Latex en los textos
rc('font',**{'family':'serif','serif':['Computer Modern']})
# Read in data from an ASCII data table
binomial = genfromtxt('../prim/ciclos/final_binomial.txt')
lazy = genfromtxt('../prim/ciclos/final_lazy.txt')
fibonacci = genfromtxt('../prim/ciclos/final_fibonacci.txt')
#Plot results
plot(binomial[:,0], binomial[:,1], 'o-', label='Binomial')
hold(True)
plot(lazy[:,0], lazy[:,1], 'o-', label='Lazy')
plot(fibonacci[:,0], fibonacci[:,1], 'o-', label='Fibonacci')
# Options
xlabel(r'Tamaño grafo')
ylabel(r'Tiempo(ms)')
title(r'Grafos Ciclos')
legend(loc='best')
# Turn on a grid
grid(True)
# Save the figure in a separate file
savefig('ciclos.eps') # soporta diferentes formatos jpg, png, eps...
# Draw the plot to the screen
show()
Creo que no hace falta describir que es cada parte del o como funciona el código. El resultado de la ejecución la podemos ver en la siguiente imagen.
Ya me contáis como os ha ido ;)
Necesitamos tres paquetes para poder hacer las figuras con los ejemplos que voy a describir. Como siempre los pasos a seguir son en Arch Linux aunque deben ser fáciles de reproducir en otros sistemas operativos.
[maitesin@Malesero ~]$ yaourt -S python2-numpy python2-matplotlib
[sudo] password for maitesin:
resolviendo dependencias...
verificando conflictos...
Objetivos (9): python2-dateutil-2.1-6 python2-dbus-1.1.1-2 python2-pyparsing-1.5.7-1 python2-pyqt-4.9.6-1 python2-pytz-2012j-1
python2-sip-4.14.2-1 python2-six-1.2.0-2 python2-matplotlib-1.2.0-8 python2-numpy-1.7.0-1
Tamaño de descarga: 30,17 MiB
Tamaño instalado: 95,95 MiB
¿Continuar con la instalación? [S/n]
En mi caso yo uso Python 2 si queréis utilizar éstos módulos en Python 3 sólo tenéis que eliminar el 2 del nombre del paquete. Una vez instalado se usa como el en siguiente ejemplo:
#!/usr/bin/env python
#Graficas para los grafos con ciclos
from numpy import *
from pylab import *
from matplotlib import rc, rcParams
#rc('text',usetex=True) #Para habilitar la escritura en Latex en los textos
rc('font',**{'family':'serif','serif':['Computer Modern']})
# Read in data from an ASCII data table
binomial = genfromtxt('../prim/ciclos/final_binomial.txt')
lazy = genfromtxt('../prim/ciclos/final_lazy.txt')
fibonacci = genfromtxt('../prim/ciclos/final_fibonacci.txt')
#Plot results
plot(binomial[:,0], binomial[:,1], 'o-', label='Binomial')
hold(True)
plot(lazy[:,0], lazy[:,1], 'o-', label='Lazy')
plot(fibonacci[:,0], fibonacci[:,1], 'o-', label='Fibonacci')
# Options
xlabel(r'Tamaño grafo')
ylabel(r'Tiempo(ms)')
title(r'Grafos Ciclos')
legend(loc='best')
# Turn on a grid
grid(True)
# Save the figure in a separate file
savefig('ciclos.eps') # soporta diferentes formatos jpg, png, eps...
# Draw the plot to the screen
show()
Creo que no hace falta describir que es cada parte del o como funciona el código. El resultado de la ejecución la podemos ver en la siguiente imagen.
Ya me contáis como os ha ido ;)
Wednesday, 23 January 2013
Parsear opciones en Python
A pesar de que después los amigos me pincharán voy a escribir algunas cosillas que he aprendido ha hacer con python :)
Nunca ha sido demasiado de mi agrado, más que nada porque estoy acostumbrado a realizar las cosas como en C/C++ y claro la deformación profesional...
Bueno a lo que íbamos, por un trabajo que he tenido que utilizar python y quería poder dar diferentes opciones al programa. Entonces encontré el siguiente módulo: optparse
Funciona como en el siguiente ejemplo:
#!/usr/bin/python
from optparse import OptionParser
parser = OptionParser()
parser.add_option("-s", "--start", dest="start", help="Ejemplo de opcion", metavar="Start")
parser.add_option("-f", "--finish", dest="finish", help="Otro ejemplo de opcion", metavar="Finish")
(options, args) = parser.parse_args()
if __name__ == "__main__":
if options.start != None:
print "Tenemos opcion en Start", options.start
else:
print "No hay opcion en Start"
if options.finish != None:
print "Tenemos opcion en Finish", options.finish
else:
print "No hay opcion en Finish"
print "En argumentos tenemos", args
Podemos ver en el ejemplo que los parámetros necesarios para añadir una nueva opción son las siguientes:
add_option(opción_corta, opción_larga, atributo_destino, mensaje_de_ayuda, metavar_usado_en_la_ayuda)
Un par de ejecuciones del ejemplo son las siguientes:
[maitesin@Malesero ~]$ ./ejemplo.py -s 12 -f Hola Adios
Tenemos opcion en Start 12
Tenemos opcion en Finish Hola
En argumentos tenemos ['Adios']
[maitesin@Malesero ~]$ ./ejemplo.py -s 12 Adios
Tenemos opcion en Start 12
No hay opcion en Finish
En argumentos tenemos ['Adios']
[maitesin@Malesero ~]$ ./ejemplo.py
No hay opcion en Start
No hay opcion en Finish
En argumentos tenemos []
[maitesin@Malesero ~]$ ./ejemplo.py --help
Usage: ejemplo.py [options]
Options:
-h, --help show this help message and exit
-s Start, --start=Start
Ejemplo de opcion
-f Finish, --finish=Finish
Otro ejemplo de opcion
Espero que os sirva ésto tanto como a mi.
Nunca ha sido demasiado de mi agrado, más que nada porque estoy acostumbrado a realizar las cosas como en C/C++ y claro la deformación profesional...
Bueno a lo que íbamos, por un trabajo que he tenido que utilizar python y quería poder dar diferentes opciones al programa. Entonces encontré el siguiente módulo: optparse
Funciona como en el siguiente ejemplo:
#!/usr/bin/python
from optparse import OptionParser
parser = OptionParser()
parser.add_option("-s", "--start", dest="start", help="Ejemplo de opcion", metavar="Start")
parser.add_option("-f", "--finish", dest="finish", help="Otro ejemplo de opcion", metavar="Finish")
(options, args) = parser.parse_args()
if __name__ == "__main__":
if options.start != None:
print "Tenemos opcion en Start", options.start
else:
print "No hay opcion en Start"
if options.finish != None:
print "Tenemos opcion en Finish", options.finish
else:
print "No hay opcion en Finish"
print "En argumentos tenemos", args
Podemos ver en el ejemplo que los parámetros necesarios para añadir una nueva opción son las siguientes:
add_option(opción_corta, opción_larga, atributo_destino, mensaje_de_ayuda, metavar_usado_en_la_ayuda)
Un par de ejecuciones del ejemplo son las siguientes:
[maitesin@Malesero ~]$ ./ejemplo.py -s 12 -f Hola Adios
Tenemos opcion en Start 12
Tenemos opcion en Finish Hola
En argumentos tenemos ['Adios']
[maitesin@Malesero ~]$ ./ejemplo.py -s 12 Adios
Tenemos opcion en Start 12
No hay opcion en Finish
En argumentos tenemos ['Adios']
[maitesin@Malesero ~]$ ./ejemplo.py
No hay opcion en Start
No hay opcion en Finish
En argumentos tenemos []
[maitesin@Malesero ~]$ ./ejemplo.py --help
Usage: ejemplo.py [options]
Options:
-h, --help show this help message and exit
-s Start, --start=Start
Ejemplo de opcion
-f Finish, --finish=Finish
Otro ejemplo de opcion
Espero que os sirva ésto tanto como a mi.
Latex cambiar cuadro por tabla
Me he propuesto escribir más en el blog, así que si no es algo muy especial las entradas serán más seguidas pero con menos contenido.
Ahora pasamos ya al lío. Me he encontrado con que en Latex cuando creamos una tabla nos dice de nombre Cuadro X, en vez de Tabla X.
La solución que he encontrado es editar el fichero de configuración del idioma español en Latex, no os asustéis que es fácil.
Editamos el fichero: /usr/share/texmf-dist/tex/generic/babel/spanish.ldf (en Arch Linux) y en la línea 127 encontramos lo siguiente:
\def\es@tablename{Ccuadro}
Simplemente lo cambiamos por:
\def\es@tablename{Ttabla}
Ahora pasamos ya al lío. Me he encontrado con que en Latex cuando creamos una tabla nos dice de nombre Cuadro X, en vez de Tabla X.
La solución que he encontrado es editar el fichero de configuración del idioma español en Latex, no os asustéis que es fácil.
Editamos el fichero: /usr/share/texmf-dist/tex/generic/babel/spanish.ldf (en Arch Linux) y en la línea 127 encontramos lo siguiente:
\def\es@tablename{Ccuadro}
Simplemente lo cambiamos por:
\def\es@tablename{Ttabla}
Una vez hecho esto ya os pondrá las tablas como Tabla y no como Cuadro.
Como siempre, cualquier duda a los comentarios ;)
Wednesday, 15 August 2012
XFCE en Arch Linux
Añadir un usuario:
El usuario debe pertenecer como mínimo a los grupos que aparecen en la siguiente imagen:
![]() |
| Añadiendo el usuario maitesin |
Debes contestar a las preguntas que te realiza el sistema. Cuando finalices la creación del usuario verás una pantalla como la siguiente:
![]() |
| Usuario añadido |
Dar permisos de Admin al usuario e instalar algunas herramientas:
Para ello instalaremos y configuraremos la herramienta sudo.
![]() |
| Instalando sudo |
![]() |
| Modificar sudoers |
También deberíamos instalar la herramienta bash-completion, que como su nombre indica sirve para que al darle al tabulador autocomplete en la terminal bash.
![]() |
| Instalando bash-completion |
![]() |
| Autenticado con el usuario maitesin |
Instalar Xorg y XFCE:
El primer paso es instalar Xorg
![]() |
| Instalando Xorg |
En éste caso a mi no me ha sido necesario. Como he realizado la instalación en una máquina virtual no he puesto lo pasos para la instalación de los drivers en la tarjeta gráfica ya que son distintos. Pero si mirais en la Wiki de Arch allí encontraréis toda la información para la instalación de los drivers y la configuración del Xorg.
Nota: En caso de tener una tarjeta Nvidia podéis mirar una entrada antigua de éste blog en la cuál se muestra como hacerlo. Nvidia
Ahora es el momento de la instalación de XFCE y otros componentes útiles como dbus, gamin y slim.
![]() |
| Instalando xfce4, gamin, slim y dbus |
Configurar dbus y configurar el sistema para el arranque gráfico:
Debemos añadir dbus a la lista de demonios que hay en /etc/rc.conf
![]() |
| Añadiendo dbus a la lista de demonios |
![]() |
| Contenido del fichero ~/.xinitrc |
Ahora en el fichero /etc/inittab debemos cambiar dos partes, concretamente es comentar dos y descomentar otras dos.
![]() |
| Comentamos el id:3... y descomentamos el id:5... |
![]() |
| Comentamos la línea de xdm y descomentamos la del slim |
Primer arranque de XFCE:
Antes de reiniciar y ver el resultado deberíamos instalar los siguientes paquetes: ttf-bitstream-vera, ttf-dejavu, ttf-droid y ttf-freefont que nos irán de perlas para el sistema. Esto lo podemos hacer con el siguiente comando:
sudo pacman -S ttf-bitstream-vera ttf-dejavu ttf-droid ttf-freefont
Ahora ya podemos reiniciar y veremos la siguiente pantalla de login proporcionada por slim
![]() |
| Login usando slim |
![]() |
| Nuestro sistema con XFCE |
Wednesday, 8 August 2012
Instalar Arch Linux sin instalador
Introducción:
Como el título de la entrada indica, voy a explicar como instalar Arch Linux sin instalador. Debido a que el famoso ejecutable que nos ayudaba a instalar el sistema no tenía soporte han decidido prescindir de él.
Si alguna vez habéis instalado algún sistema como Gentoo o parecidos, la forma de instalar Arch ahora es parecida, pero no os asustéis que no es complicado ni mucho menos, sólo se tiene que tener una idea básica de que se está haciendo.
De acuerdo, vamos por partes, lo primero es bajarse el CD de instalación http://www.archlinux.org/download/ podréis comprobar que ya no existen ni la versión core ni la net-install ni podremos elegir arquitectura (32 o 64 bits), esto se debe a que ahora sólo habrá un único CD que pesa unos 400MB.
Empezamos la instalación:
Una vez arrancamos el PC con el CD de Arch nos muestra las siguientes opciones de arranque:
![]() |
| Arranque del nuevo CD de Arch Linux |
Entre las opciones veréis que podemos elegir entre las dos arquitecturas y a parte siguen estando las mismas opciones de siempre. En mi caso he seleccionado la opción de 32 bits, la cual usaré para mostrar los pasos a seguir para realizar la instalación.
Una vez el sistema ha arrancado nos encontramos en que ahora la consola que utilizamos utiliza la terminal zsh. Lo primero que debemos hacer es cambiar la distribución del teclado, esto se hace con el comando loadkeys.
![]() |
| Cambiando la distribución del teclado |
Particionado del disco duro:
Para particionar los discos yo utilizo el programa fdisk, cada uno que utilice el que prefiera yo describiré los pasos usando dicho programa.
![]() |
| Información que proporciona el fdisk cuando se ejecuta |
Si elegimos la opción m nos mostrará la ayuda:
![]() |
| Ayuda del fdisk |
También podemos ver que de momento el disco duro no tiene ninguna partición, en caso de querer borrar una partición se usa la opción d:
![]() |
| No hay ninguna partición en el disco duro |
En mi caso voy a crear 4 particiones primarias en el disco:
- Boot 150MB.
- SWAP 256MB.
- Root (Sistema) 8GB.
- Home (Carpeta Personal) 11,6GB.
![]() |
| Se ha creado la partición para el boot |
Para crear una partición nueva se utiliza la opción n y se le introduce la información que se nos pide.
![]() |
| Se ha creado una partición para el swap |
![]() |
| Se ha creado una partición para el Sistema |
![]() |
| Se ha creado una partición para el Home |
Una vez tenemos creadas las particiones hemos de crear el sistema de ficheros para cada una. En este caso la partición del Boot será Ext2 y el Sistema y el Home serán Ext3. A continuación podéis ver el proceso:
![]() |
| Sistema de ficheros para el boot |
![]() |
| Sistema de ficheros para el Sistema |
![]() |
| Sistema de ficheros para el Home |
![]() |
| Creando el SWAP y activándolo |
Montar particiones e instalar el sistema base:
Ahora debemos montar las particiones en su lugar correspondiente. Además, también tenemos que configurar la conexión a internet si no estamos conectados por cable. La parte de la conexión no la haré ya que yo estaba conectado por cable, cualquier cosa en la Wiki de Arch está explicado de maravilla.
![]() |
| Montaje de las particiones |
Primero se ha montado el sistema /dev/sda3, a continuación se han creado dos directorios (/boot, /home) de esta forma el genfstab los detectará automáticamente y los montará. Después se han montado las otras dos particiones en sus respectivos directorios.
En caso de querer especificar el origen de los paquetes (los servidores de donde se descargan) éste es el momento. Para ello debemos editar el fichero /etc/pacman.d/mirrorlist como se muestra a continuación:
![]() |
| Editar la lista de servidores |
Ahora ha llegado el momento de instalar el sistema base, para ello se utiliza la herramienta pacstrap que hace lo mismo que el pacman pero eligiendo el destino, esto se puede ver en la siguiente imagen:
![]() |
| Instalando el sistema base |
En mi caso he instalado también el paquete base-devel debido a que utilizaré AUR para compilar e instalar algunos paquetes que no vienen en los repositorios por defecto.
GRUB y configuración del sistema:
Debemos instalar también un bootloader que en mi caso utilizaré GRUB2, ya que el GRUB original ha sido substituido por esta nueva versión en el paquete estable.
![]() |
| Instalación del GRUB2 |
Hay dos variantes del GRUB2 el BIOS y el EFI, cada uno depende del sistema básico de la placa base. Si tu placa base tiene BIOS debes utilizar el paquete grub-bios, en cambio si tu placa base utiliza el sistema EFI debes utilizar el paquete grub-efi. A parte de en la instalación, los comandos a seguir son los mismos para los dos paquetes.
Primero debemos utilizar el programa genfstab que creará automáticamente el fichero fstab para nuestro sistema utilizando las particiones que estén montadas.
También realizamos un chroot a la carpeta /mnt para configurar el sistema, para ello utilizaremos el comando arch-chroot, ya que nos prepará el entorno y montará los diferentes dispositivos y directorios necesarios automáticamente.
![]() |
| Configuración del fstab y utilización del arch-chroot |
Una vez estamos dentro del nuevo sistema podemos ver que la terminal por defecto es la sh pero esto no supone ninguna novedad. A continuación se deben configurar los siguientes ficheros:
- /etc/hostname (Para darle un nombre al sistema).
- /etc/localtime (Para la hora del sistema).
- /etc/locale.conf (Para la configuración del idioma del sistema).
- /etc/locale.gen (Para la generación de las locale de los idiomas).
- /etc/mkinitcpio.conf (Sólo en caso de necesitar montar cosas especiales como LVM o RAID)
![]() |
| Dentro sólo debes escribir el nombre del ordenador |
![]() |
| Es un enlace simbólico al fichero de la zona horaria |
![]() |
| Idioma español de España y el segundo parámetro es para cuando se muestra información |
![]() |
| Descomentamos la línea de español de España |
![]() |
| Se generan las locale |
Como no se ha utilizado ningún tipo especial de administrador de dispositivos o volúmenes como el RAID o el LVM no se ha cambiado la configuración del mkinicpio. Entonces, ahora se ejecuta para crearlo.
![]() |
| Creando el initcpio utilizando el mkinitcpio |
Recordemos que hemos instalado el grub pero no lo hemos configurado. Si tienes en tu ordenador instalados otros sistemas operativos, como Windows por ejemplo, debes instalar el paquete os-prober utilizando el comando
pacman -S os-prober
El primer paso es que busque los diferentes sistemas operativos e imágenes del kernel para poder utilizarlas para arrancar:
Sólo queda escoger el disco duro sobre el que funcionará el GRUB, normalmente es el mismo que tiene el boot.
Ahora ha llegado el momento de cambiar la contraseña del root:
![]() |
| Utilizamos grub-mkconfig para realizar la búsqueda |
![]() |
| Los hemos instalado sobre /dev/sda y no ha habido errores |
Ahora ha llegado el momento de cambiar la contraseña del root:
![]() |
| Cambiando la contraseña del usuario root |
Salimos del chroot, utilizando el comando exit, y desmontamos las particiones:
![]() |
| exit y desmontar las particiones |
Primer arranque y configuración del teclado:
Si estamos en el paso anterior debemos reiniciar utilizando reboot y quitar el CD de Arch. Una vez hecho esto y el ordenador arranque veremos la siguiente pantalla del GRUB, donde podemos elegir el sistema con el que queremos arrancar, en este caso sólo está Arch Linux.
![]() |
| GRUB mostrando los sistemas para arrancar |
![]() |
| Login del sistema |
![]() |
| Se ha añadido KEYMAP="es" para el teclado español |
Para utilizar la distribución de teclado debemos reiniciar el sistema. Hasta aquí ha llegado éste tutorial, en el próximo partiré de esta base para instalar el apartado gráfico y todo lo necesario para tener un sistema con el que se pueda trabajar. El entorno gráfico elegido será XFCE, ya que he decidido probarlo. Pero todo esto será en el próximo tutorial.
Subscribe to:
Posts (Atom)























































