Archivo de la etiqueta: Linux

Distribución del nacimiento de personas usando ROOT

El usuario ingresa la información sobre las fechas de nacimiento de la muestra de población en formato mes dia (MMDD). El programa basado en C++ (ROOT) genera tres histogramas (TH1F, TH2F) y guarda la información en un archivo de texto.


//////////////////////////////////////////////////////////////////////////////
// \file cumple.C
// \brief User inputs string data in MMDD format. Histrograms of some
// distros are genrated. Output file is saved in same folder.
// \version 2014-08-24 00:40
// \authors jasq
//////////////////////////////////////////////////////////////////////////////

#include // std::cout
#include // std::string, std::stof
#include // vector lib
#include // atof??
#include // for TH1F objects
#include // for TH2F objects

using namespace std;

void cumple()
{
//============================================================
// DEFINITIONS
int counter; // counter for the total number of people

std::string input; // HOW DO YOU RESTRIC TO BE 4 CHARACTERS LONG ONLY??
std::string entry;

std::vector numbers; // create a vector of strings called numbers with size zero initially

TH1F *hMonthVsFreq = new TH1F("MonthVsFreq","Mes Vs Frecuencia;Mes;Frecuencia",12,0.5,12.5);
TH1F *hDayVsFreq = new TH1F("DayVsFreq","Dia Vs Frecuencia;Dia;Frecuencia",31,0.5,31.5);
TH2F *hDayVsMonth = new TH2F("MonthVsDay","Dia Vs Mes (Frecuencia);Dia;Mes",31,0.5,31.5,12,0.5,12.5);

////////////////////////////////////////////////////////////

std::cout<<std::endl;
std::cout<<"|------ Birthday Analysis -------|"<<std::endl;
std::cout<<"| How many people share birthdays? |"<<std::endl;
std::cout<<"| You'll find out with this game! |"<<std::endl;
std::cout<<"| **** INSTRUCTIONS **** |"<<std::endl;
std::cout<<"| Type birthday in MMDD format |"<<std::endl;
std::cout<<"| Terminating with ctrl-d or 'end0'|"<<std::endl;
std::cout<<"| Type 'err0' for eliminate entry |"<<std::endl;
std::cout<<"|----------------------------------|"<<std::endl;
std::cout<<std::endl;
std::cout<<"Start typing below"<<std::endl;
std::cout<<"MMDD"<> input){
//std::cin >> input;
numbers.push_back(input);
++counter;
if(input == "err0") {
//std::cout<<"SCREAM!"<<" , "<<counter<<std::endl;
numbers.pop_back(); // eliminates 'err0' entry
--counter;
numbers.pop_back(); // eliminates real error entry
--counter;
}

if(input == "end0") {
numbers.pop_back(); // eliminates 'end0' entry
--counter;
break;
}

}

//============================================================
// SAVING RESULTS IN TEXT FILE
std::ofstream out;
out.open("data.txt");
if(!out){
cerr <<"Unable to open output data text file\n";
}
out <<"MMDD"<< endl;

//============================================================
// FILLING HISTOGRAMS

for (unsigned int k = 0; k Fill(m);
hDayVsFreq->Fill(d);
hDayVsMonth->Fill(d,m);

// COMPARE IF TWO ENTRIES OF VECTOR ARE EQUAL

// WRITES INFO ON data.txt OUTPUT FILE
out <<numbers[k] <<endl;

}

std::cout << "You entered: "<<numbers.size()<<","<<counter<Draw();

TCanvas* c2 = new TCanvas("c2","Test2");
hDayVsFreq->Draw();

TCanvas* c3 = new TCanvas("c3","Test3");
hDayVsMonth->SetStats(kFALSE);
hDayVsMonth->Draw("colz");

////////////////////////////////////////////////////////////

}

Anuncios

Bash Tutorials | 1 Setting up a Work Environment

One of the things that I have to do every day when starting the day is create what I call an “environment”. Usually, this env is defined as a set of applications consisting of an internet browser, some GNOME-Bash terminals, a Tomboy Note and a nautilus file manager window, all of them somehow clustered on the display of my lap.

Let’s focus on the terminals first and let’s create a script that pops up as many new terminals as desired when sourced.

Terminals

1. Open a terminal and create a shell script at $HOME, or where the regular path of the terminals prompts:

% emacs -nw   name_of_file.sh

2. The first line defines the kind of bash that you’re using (i.e. by typing  echo $SHELL). In my case,

#!/bin/bash

3. How many terminals do you want to display?

#how many terminals do you want?
echo -n "How many terminals do you want to display? "
read m

4. Now the interesting part, if the user types a number, we want to store that value on memory for then use it as a upper limit in the for loop:

for i in $(seq 1 $m)
do
gnome-terminal
#echo "Number: $i" # uncoment when testing
done

5. If the script has performed OK, then exit:

exit 0

Resume

As an example, this script opens  a set of terminals determined by the user and runs the same process in each of them.

------
#!/bin/bash
#got kerberos ticket? 
echo -n "Kerberos ticket? (y/n)"
read t
if [ $t = 'y' ] || [ $t = 'yes' ]
then
#"bash -c 'cd /home/andres/Desktop';bash" 
gnome-terminal -e "bash -c '<some_command> -f xxxxx@fnal.gov';bash" #comment for testing 
elif [ $t = 'n' ] || [ $t = 'no' ]
then
 continue
else
 continue
fi
#how many terminals do you want? 
echo -n "How many terminals do you want to display? "
read m
for i in $(seq 1 $m)
do
gnome-terminal -e "bash -c 'ssh xxxxx@fnal.gov';bash" #Comment for testing 
 #gnome-terminal 
 #echo "Welcome $i times" 
done
exit 0
#close terminal? 
#echo "Process ID=$$"
#sleep 5 & # in seconds?
#echo "Background process ID =$!"

------

HAPPY CODING!

Internet desde Linux mediante la Terminal

Volvamos a lo básico. Esta serie de comandos es útil cuando ningún “encargado del centro de cómputo” puede ayudar a conectarte a Internet.

Desde la Terminal y una vez dentro de root (como super-usuario) escribimos

[Usuario@root]# ifconfig eth0:1 123.456.789.000 netmask 255.255.255.000
[Usuario@root]# route add default gw 123.456.789.123
[Usuario@root]# ping fejer.ucol.mx

Descripción:

  1. El comando ifconfig es el encargado de iniciar el proceso de configuración entre el módem y tu computadora. Nos interesa la conexión a Ethernet únicamente ya que es  con la cual Linux trabaja (además de la inalámbrica), USB no está a nuestro alcance (aún). Por lo tanto eth0:1 es el nombre de dicha conexión a Ethernet (abajo se darán más detalles). La dirección IP asignada a tu computadora viene a ser 123.456.789.000 y la máscara de sub-red es nada más  y nada menos que 255.255.255.000 (esto es un ejemplo ilustrativo, claro).
  2. El comando route establecerá los protocolos de conexión servidor-usuario, add default agregará esta conexión nueva como “predeterminada” y gw permitirá el acceso a cookies y demás (gw = gateway).
  3. Si todo sale como debería, comprobamos nuestra nueva conexión mediante un suave y delicado “pingueo” a nuestro servidor favorito (de la misma manera que se hace en Windows), en este caso, uno de mala reputación… El envío de paquetes aparecerá en terminal y confirmará nuestra conexión exitosa a la web.

Para hacer un Shell:

Un shell es básicamente, un programita que hace todo lo anterior de manera automática. Para editarlo, basta escribir las órdenes de arriba dentro de un editor de textos (como Emacs)

[Usuario@root]# emacs nombre_del_shell.sh &

y escribir

ifconfig eth0:1 123.456.789.000 netmask 255.255.255.000
route add default gw 123.456.789.123
ping fejer.ucol.mx

finalmente, guardamos y ejecutamos en la terminal mediante la linea de comando

[Usuario@root]# sh nombre_del_shell.sh

y listo.

¿Cómo conseguir la IP?

Una (de tantas) forma(s) es estar directamente en Windows (sí, tenemos que rebootear después) meternos a Inicio>Ejecutar>cmd (enter). Se desplegará una ventana como la siguiente:

Ante nuestros ojos, estará toda la info necesaria para hacer las conexiones pertinentes.

NOTA: los datos numéricos que buscamos son para la conexión a Ethernet únicamente.

Ejoit !!