El método de la trisección Examen interciclo semestre mar-ago 2021

31 de mayo de 2021

El método numérico llamado método de la trisección no existe, sin embargo, resulta en un práctica interesante de programación.

La única diferencia entre el método de la bisección y el de la trisección es que, en este último, el intervalo de búsqueda de la raíz se divide en tres parte iguales.

La definición completa del examen se encuentra en https://www.scribd.com/doc/306301095/Ejercicios-Basicos-de-Programacion

Una posible solución

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Thu May 20 19:36:44 2021
Me tomó 27 minutos resolver
27*3 + 15 min. para leer el texto = 96 min.
96 min. + 5 min. para subir a evirtual = 101 min.
@author: Angel Vázquez-Patiño
"""
from math import factorial

def seno(x):
    suma = 0
    for i in range(50):
        numerador = ((-1)**i)*(x**(2*i+1))
        denominador = factorial(2*i+1)
        suma += numerador/denominador
    return suma

def f(x):
    return seno(2*x+1)-(3/5)*x+1

def triseccion(f, a, b):
    aproximaciones = [(a+b)/2]
    e_a = 1 # para que entre al menos una vez al while
    while e_a > 0.000001:
        mi = a + (b-a)/3
        md = (mi + b)/2
        
        if f(a)*f(mi) < 0:
            aproximaciones.append((a+mi)/2)
            b = mi
        elif f(mi)*f(md) < 0:
            aproximaciones.append((mi+md)/2)
            a, b = mi, md
        elif f(md)*f(b) < 0:
            aproximaciones.append((md+b)/2)
            a = md
        elif f(mi) == 0:
            aproximaciones.append(mi)
            return aproximaciones
        elif f(md) == 0:
            aproximaciones.append(md)
            return aproximaciones
        
        e_a = abs((aproximaciones[-1]-aproximaciones[-2])/aproximaciones[-1])
    return aproximaciones

def grabar(lista, path):
    with open(path, 'w') as f:
        f.write('Aproximación, Valor\n')
        for i in range(len(lista)):
            f.write(str(i)+','+str(lista[i])+'\n')
a, b = -19, 3.5          
aproxs = triseccion(f, -19, 3.5)
grabar(aproxs, 'interciclo_resultados.csv')
# FIN de esta posible solución del examen (hay muchas otras formas de resolverlo)

# De aquí en adelante no es parte del examen
import numpy as np # Esto no he utilizado en la solución en sí del examen
from matplotlib import pyplot as plt # Esto no he utilizado en la solución en sí del examen
xs = np.linspace(a, b, 100)
ys = [seno(2*i+1)-3*i/5+1 for i in xs]
ys = np.array(ys)

plt.figure(figsize=(4,3))
plt.plot(xs, ys, label='$f(x)$', lw=2)
plt.scatter([1.21], [0], label='raíz', color='k')
plt.axhline(0, color='gray')
plt.axvline(0, color='gray')
plt.xlabel('x')
plt.ylabel('y')
plt.legend()
plt.show()

El juego de las palabras cosidas Prueba 2 semestre mar-ago 2021

20 de mayo de 2021

Prueba dos de la materia de Programación Orientada al Cálculo Científico del semestre marzo - agosto 2021. Tomado el día jueves 20 de mayo de 2021.

Planteamiento

El juego comienza generando una letra del alfabeto (incluyendo la letra ñ) de manera aleatoria (0.5 puntos). Con esa primera letra, el jugador 1 debe escribir una palabra. El jugador 2 debe escribir una siguiente palabra que comience con la letra con la que termina la palabra del jugador 1. Esa palabra debe ser una que no haya sido escrita antes por ningún jugador. De la misma manera, el jugador 1 debe escribir una nueva palabra que comience con la última letra de la última palabra escrita por el jugador 2. Esa palabra debe ser una que no haya sido escrita antes por ningún jugador. Se repite estos pasos hasta que termine el juego (1 punto). El juego termina cuando los dos jugadores, de manera sucesiva, no son capaces de escribir palabras diferentes (i.e., que no hayan sido ingresadas antes por cualquiera de los dos jugadores) o siguiendo la regla del juego (e.g., cuando el jugador escribe una palabra que no comienza con la última letra de la última palabra escrita) (1.5 puntos). Un jugador tiene la posibilidad de indicar que no puede escribir una palabra válida presionando la tecla Enter sin antes escribir ningún carácter; cuando en dos jugadas sucesivas se presiona Enter, se termina el juego (0.5 puntos). Gana el juego la persona que haya escrito el mayor número de caracteres (se suma la cantidad de caracteres de todas las palabras ingresadas por cada jugador); se lo debe indicar cuando termina el juego (0.5 puntos). Al finalizar el juego, todas las palabras (una palabra es una cadena de al menos un carácter) diferentes ingresadas por los jugadores deben ser escritas en un archivo junto con el puntaje de cada jugador (1 punto).

Si usa Python, la siguiente línea de código le ayuda a generar las letras del abecedario: import string; print(string.ascii_lowercase).

Ejemplos de la ejecución del juego se muestran en el documento Ejercicios Básicos de Programación.

Una posible solución

import string
from random import choice

def letra():
    letras = list(string.ascii_lowercase)
    letras.append('ñ')
    return choice(letras)

palabras1 = [] # palabras del jugador 1
palabras2 = [] # palabras del jugador 2

ultima_letra = letra()
palabras_repetidas = 0 # permite terminar el juego
palabras_que_comienzan_mal = 0 # permite terminar el juego
enters = 0 # permite terminar el juego
jugador = 1 # la uso como bandera
print(ultima_letra)
while palabras_repetidas < 2 and palabras_que_comienzan_mal < 2 and enters < 2:
    palabra = input('Jugador '+str(jugador)+': ')
    if palabra in palabras1 or palabra in palabras2:
        palabras_repetidas += 1
    else:
        palabras_repetidas = 0
    if palabra != '':
        if palabra[0] != ultima_letra:
            palabras_que_comienzan_mal += 1
        else:
            palabras_que_comienzan_mal = 0
    
    if palabra == '':
        enters += 1
    else:
        enters = 0
    if (not palabra in palabras1) and palabra != '' and palabra[0] == ultima_letra:
        if jugador == 1:
            palabras1.append(palabra)
        else: # cuando jugador es igual a 2
            palabras2.append(palabra)
            
    if palabra != '':
        ultima_letra = palabra[-1]
    
    if jugador == 1: # uso de la estrategia de bandera
        jugador = 2  # para cambiar de jugador en cada iteración
    else:
        jugador = 1

print('\nPalabras repetidas sucesivas:', palabras_repetidas)
print('Palabras sucesivas con primera letra incorrecta:', palabras_que_comienzan_mal)
print('\"Enters\" sucesivos:', enters, end='\n\n')

puntaje1, puntaje2 = 0, 0 # puntajes para los jugadores

for elemento in palabras1:
    puntaje1 += len(elemento)
for elemento in palabras2:
    puntaje2 += len(elemento)

if puntaje1 > puntaje2:
    print('¡Ganó jugador 1!')
elif puntaje2 > puntaje1:
    print('¡Ganó jugador 2!')
else:
    print('¡Hubo empate!')

print('\tJugador 1:', puntaje1, 'puntos.')
print('\tJugador 2:', puntaje2, 'puntos.')

with open('prueba2.csv', 'w') as f:
    f.write('Jugador 1, Jugador 2\n')
    longitud = max(len(palabras1), len(palabras2))
    for i in range(longitud):
        
        if not(i >= len(palabras1)):
            f.write(palabras1[i]+',')
        else:
            f.write(',')
        if not(i >= len(palabras2)):
            f.write(palabras2[i]+'\n')
        else:
            f.write(',\n')

Examen supletorio programación semestre sep 2020 - feb 2021

5 de marzo de 2021

Examen supletorio de la materia de Programación Orientada al Cálculo Científico del semestre septiembre 2020 - febrero 2021. Tomado el día viernes 5 de marzo de 2021.

Planteamiento

  1. Lea CON PANDAS el archivo predictores_estacionarios_luego_de_mutual_info_regression.csv (3 puntos). La primera columna en el archivo es el índice (que es una fecha) que debe usar para el DataFrame 1 de pandas (4 puntos).
  2. Para cada columna del DataFrame 1 de Pandas que contenga la información del archivo (no el índice del DataFrame), ajuste una recta. De cada recta ajustada a los datos, de cada columna del DataFrame 1, tome el valor de la pendiente. (8 puntos)
  3. Genere un nuevo DataFrame 2 de Pandas que contenga las mismas columnas que el DataFrame 1 referido en el punto 1 y 2 (4 puntos). En la única fila que va a tener este nuevo DataFrame 2, debe poner las pendientes que calculó en el punto 2. Es decir, en cada columna debe estar la pendiente correspondiente a la recta ajustada a los datos de las columnas correspondientes del DataFrame 1 (4 puntos).
  4. Guarde el nuevo DataFrame 2 de Pandas referido en el punto 3 como archivo csv (ponga el nombre que quiera al archivo) (3 puntos). El archivo csv no debe ser guardado con el índice que tiene el DataFrame (4 puntos).
  5. Suba a EVIRTUAL solamente el archivo .py de su script. Debe subir un (1) script. Puede subir hasta las 09h00. Solamente calificaré lo que suba a EVIRTUAL.

Nota: La información del DataFrame 2 debe ser guardado utilizando Pandas.

Solución

import pandas as pd
from scipy.optimize import curve_fit

def f(x, m, a):
    ''' Función que evalua una función que es un polinomio de primer grado.
    x: valor de la abscisa
    m: valor de la pendiente
    a: valor del intercepto
    '''
    return m*x + a

# index_col = 0 indica que la primera columna del archivo se usará como índice
df1 = pd.read_csv('predictores_estacionarios_luego_de_mutual_info_regression.csv',
                  index_col=0)

df2 = pd.DataFrame(columns=df1.columns, index=['Pendiente'])

for columna in df1.columns:
    # línea que permite verificar resultados
    print('Columna', columna)
    parametros, _ = curve_fit(f, range(len(df1[columna])), df1[columna])
    # línea que permite verificar resultados
    print('\tPendiente: {0}\n\tIntercepto: {1}'.format(parametros[0], parametros[1]))
    df2[columna] = parametros[0]
    
# index=False indica que no se guardará el índice en el archivo csv
df2.to_csv('pendientes.csv', index=False)

Graficación de datos experimentales en 3D: dispersión, superficie, malla y líneas de contorno

24 de junio de 2015

clear all;
clc;

% Ejemplo que indica cómo graficar un conjunto de puntos en 3D. Estos
% puntos pueden ser datos producto de un experimento de dos variables
% independientes (x, y en este ejemplo) y una variable dependiente (z en
% este ejemplo).
%
% En este caso vamos a utilizar una función z = x^2 + y^2 para generar los
% datos de prueba de la variable dependiente (z). Como se dijo anteriormente,
% estos datos no necesariamente deben venir de una función definida, sino
% que pueden ser datos de algún experimento. Por lo tanto, dichos datos
% podrían no estar linealmente espaciados (en el ejemplo, gracias a la
% generación de datos aleatorios con rand, los datos de las variables
% independientes no son linealmente espaciados).

% Generación de 150 datos aleatorios que constituyen los valores de las
% variables independientes. Estos puntos (x,y) son los que serán evaluados
% con la función de un paraboloide.
x=rand(150,1)*20-10;
y=rand(150,1)*20-10;

% Generamos los datos de la variable dependiente evaluando la función en
% los puntos datos por las variables x, y.
z=x.^2+y.^2;

% Graficación de los puntos (gráfica de dispersión) en 3D.
subplot(2,2,1); scatter3(x,y,z); title('Scatter 3D')

% Dado que los puntos generados no son linealmente espaciados. Encontramos
% una función de interpolación que pase por cada uno de los datos datos.
F=TriScatteredInterp(x,y,z);

% Generamos datos linealmente espaciados desde el límite inferior de los
% datos de x (min(x)) hasta el límite superior de y (max(x)).
xlin=linspace(min(x),max(x));
% Generamos datos linealmente espaciados desde el límite inferior de los
% datos de x (min(y)) hasta el límite superior de y (max(y)).
ylin=linspace(min(y),max(y));

% Generamos una rejilla de malla (matriz) de datos linealmente espaciados
% que serán utilizados para la evaluación de la función interpolada (F)
[X,Y]=meshgrid(xlin,ylin);

% Evaluación de los puntos de la malla con la función (F) producto de la
% interpolación.
Z=F(X,Y);

subplot(2,2,2); surf(X,Y,Z); title('Superficie: z = x^2 + y^2')
subplot(2,2,3); mesh(X,Y,Z); title('Malla: z = x^2 + y^2')
subplot(2,2,4); contour(X,Y,Z);

Figura 1: resultado final del programa.

Ternary Operation Python

1 de abril de 2015

op1 if condition else op2

Example

userGender = '0' if userFields[1] == 'M' else '1'
userAge = '0' if userFields[2] == '18-24' else \
    '1' if userFields[2] == '25-34' else \
    '2' if userFields[2] == '35-49' else '3'

Another interesting way here.

Información de derechos adicionales no otorgados por la licencia CC

1 de mayo de 2014

Aunque la licencia del blog es Creative Commons sin obras derivadas por tratarse de un espacio donde los autores pueden publicar ensayos de opinión personal o artículos que deben mantenerse íntegros por una u otra razón, podrían haber algunas entradas cuyo contenido pueda ser modificado siempre y cuando sea distribuido bajo la misma licencia.
Las entradas con dicha libertad estarán indicadas explícitamente al final de las mismas.
Es decir, las entradas en donde al final de las mismas se dé libertad de modificación siempre y cuando esa modificación sea distribuida bajo la misma licencia se acogen a la licencia del blog con esa atribución y condición adicional, caso contrario, se rigen a la licencia del blog únicamente; existiendo solamente esas dos posibilidades.

Agrupación pro Software Libre de la Universidad de Cuenca (ASLUC) y la FLISOL 2013: Cuenca - Ecuador

18 de abril de 2013

Un día, pasando por la Facultad, me di cuenta de un anuncio acerca de un grupo formado para la divulgación de software libre. El 16 de marzo de 2013, +Daniel Campoverde había iniciado con un grupo en la Universidad de Cuenca que pretende "Difundir, promover y desarrollar Software Libre como tecnología y filosofía"; la Agrupación pro Software Libre de la Universidad de Cuenca. Cuando era estudiante tenía la idea de crear un grupo parecido; desgraciadamente no pasó de eso por cuestiones de tiempo, ya que pronto me gradué y me alejé un poco de la universidad.
Primer logo de la Agrupación pro Software Libre de la Universidad de Cuenca (por +Daniel Campoverde).
Una vez creado el grupo creo importante apoyarlo de manera que siga creciendo y poder llegar a los objetivos que tiene dicha comunidad. El primer paso en el que di una mano fue la creación de la una página oficial del grupo en facebook al que invito a todos a visitar. Luego, como para tenerlo pendiente en cuanto al "pulido", se creó un blog del grupo al que invito a todos a participar con el envío de sus artículos.
La primera iniciativa y quizá una de las más importantes con la que el grupo trata de ir tomando espacio en la Universidad de Cuenca y darse a conocer a nivel local y nacional (porqué no pensar a nivel internacional), es la organización de la FLISOL 2013 Cuenca. El Festival de Instalación de Software Libre (FLISOL) "es el mayor evento de difusión del Software Libre que se realiza desde el año 2005 en diferentes países de manera simultánea. En el año 2012 participaron más de 290 ciudades en 20 países de Latinoamérica" [1] y este año 2013, como no puede ser de otra manera, Cuenca debe estar entre una de esas ciudades. Es por eso que incentivo a toda la gente amante del software libre, interesados y por qué no a los que no comparten esta ideología, a participar en las diferentes exposiciones, además de la instalación gratuita de software, a llevarse a cabo en el evento. Éste se llevará a cabo el día 27 de abril de 2013 en el local de APC tecnología 4to piso (Calles José Peralta y Cornelio Merchán) de 09h00 a 18h00 (mayor información).
Espero sinceramente que la creación de este grupo dentro de la Universidad de Cuenca pueda contribuir a la construcción de una sociedad, en general, y de una universidad, en particular, donde las tecnologías libres estén consideradas antes (en orden de prioridad) que cualquier otra opción (sin demostrar tampoco un fanatismo ciego y absurdo). Quizá el primer pasó político (al que hay que agradecer) dado en el Ecuador fue el decreto No 1014 (abril 2008). Esta iniciativa política, junto con la creación y fortalecimiento de comunidades como la Agrupación pro Software Libre de la Universidad de Cuenca, espero que sean consideradas herramientas e iniciativas que ayuden a cumplir con los objetivos mencionados.

Enlaces importantes
Blog: http://asluc.blogspot.com/
Página Google+:https://plus.google.com/109474859817977760118
Página Facebook: http://www.facebook.com/ASLUC.ec
Comunidad Google+: https://plus.google.com/communities/104508175059387096872
Grupo Facebook: http://www.facebook.com/groups/asluc/

Página oficial de FLISOL Cuenca 2013: http://www.flisol.net/FLISOL2013/Ecuador/Cuenca
Enlace ciudadano acerca del decreto 1014 en Ecuador: http://youtu.be/lwX2_VNcquk
Intervención del presidente ecuatoriano en Campus Party 2012: http://youtu.be/yp381TnQ9K0

Referencia
[1] http://es.wikipedia.org/wiki/Festival_Latinoamericano_de_Instalaci%C3%B3n_de_Software_Libre

Instalación de ARWPost y GrADS

4 de mayo de 2012

VIDEO QUE DA CÓMO COMPILAR  ARWPost http://youtu.be/zXvfQ4i0IJE

ARWpost:
ARWpost, is a Fortran program that reads WRF ARW input and output file and generate GrADS output files.

Once the output files have been generated, GrADS can be used to producing horizontal or vertical cross section plots of scalar fields (contours) or vector fields (barbs or arrows), vertical profiles and soundings.

$ tar -xvzf ARWpost_V3.tar.gz
$ cd ARWpost
$ ./configure

** WARNING: No path to NETCDF and environment variable NETCDF not set.
** would you like me to try to fix? [y]
y
Enter full path to NetCDF include directory on your system
/usr/local/include
Enter full path to NetCDF library directory on your system
/usr/local/lib
created new ./netcdf_links directory
total 0
lrwxrwxrwx. 1 angelv angelv 18 abr 18 15:41 include -> /usr/local/include/
lrwxrwxrwx. 1 angelv angelv 14 abr 18 15:41 lib -> /usr/local/lib/
Will use NETCDF in dir: /home/angelv/ARWpost/netcdf_links
------------------------------------------------------------------------
Please select from among the following supported platforms.

   1.  PC Linux i486 i586 i686 x86_64, PGI compiler   
   2.  PC Linux i486 i586 i686 x86_64, Intel compiler   
   3.  PC Linux i486 i586 i686 x86_64, gfortran compiler

Enter selection [1-3] : 2  
------------------------------------------------------------------------
Configuration successful. To build the ARWpost, type: compile
------------------------------------------------------------------------

$ ./compile

Se dió el siguiente error:

    module_interp.f:(.text+0x6ece): undefined reference to `ncvgt_'
    collect2: ld devolvió el estado de salida 1
    make: [ARWpost.exe] Error 1 (no tiene efecto)

Instalación de Vis5D

Descargar desde la página web oficial: http://www.ssec.wisc.edu/~billh/vis5d.html

$ tar -xvzf vis5d+-1.3.0-beta.tar.gz
$ cd vis5d+-1.3.0-beta
$ ./configure --with-mixkit=/usr/lib64/

****************************************************
You need to install a 3D graphics library, preferably
the free OpenGL replacement, Mesa.  You can download
Mesa from the Mesa home page:
          http://www.mesa3d.org/
and install it by running:
       ./configure && make && su -c 'make install'
in the Mesa directory.
You may also need to run /sbin/ldconfig as root
to update the system after installing Mesa.
(First, add '/usr/local/lib' to /etc/ld.so.conf if
you installed Mesa under /usr/local, the default.)
****************************************************

Nota: Para borrar un repositorio en GNU/Linux fedora http://www.ibm.com/developerworks/ssa/linux/library/l-lpic1-v3-102-5/index.html

Hay que instalar Mesa

# yum install mesa-libGLU-devel

Luego de eso de nuevo (para instalar vis5d)

$ ./configure

.
.
.
checking for fcntl.h... yes
configure: creating ./config.status
config.status: creating vis5d+.pc
config.status: creating gtk/vis5dgtk.pc
config.status: creating gtk/gradients/Makefile
config.status: creating gtk/Makefile
config.status: creating po/Makefile.in
config.status: creating Makefile
config.status: creating src/Makefile
config.status: creating doc/Makefile
config.status: creating lui5/Makefile
config.status: creating util/Makefile
config.status: creating m4/Makefile
config.status: creating po/Makefile.in
config.status: creating config.h
config.status: creating src/api-config.h
config.status: src/api-config.h is unchanged
config.status: creating po/POTFILES
config.status: creating po/Makefile
config.status: creating po/POTFILES
config.status: creating po/Makefile

$ make
$ make check
# make install

Para instalar MixLib http://pkgs.org/centos-6-rhel-6/puias-computational-x86_64/MixKit-2.1-3.puias6.x86_64.rpm.html

1. Instalar puias release http://mirror.yandex.ru/fedora/russianfedora/russianfedora/free/el/releases/6/Everything/i386/os/
2. Instalar puias core http://puias.math.ias.edu/wiki/YumRepositories6
3. Instalar puias addon http://pkgs.org/centos-6-rhel-6/puias-i386/puias-addons-6-1.puias6.6.noarch.rpm.html
4. Instalar puias en sí como root rpm -Uvh puias-computational*rpm

# rpm -Uvh puias-computational*rpm
advertencia:puias-computational-6-1.puias6.5.noarch.rpm: CabeceraV3 RSA/SHA256 Signature, ID de clave 41a40948: NOKEY
Preparando...               ########################################### [100%]
   1:puias-computational    ########################################### [100%]

# yum install MixKit

Otra vez con la instalación de vis5d+-1.2.1

$ ./configure --with-mixkit=/usr/lib64/
$ make

Finalmente no se pudo instalar ARWPost en la máquina Scientific Linux donde tenemos WRF por problemas, pienso yo, de algunas librerías.

Se procede a instalar entonces en una máquina virtual con la distribución GNU/Linux Ubuntu. La intalación se realiza de la siguiente manera (http://youtu.be/zXvfQ4i0IJE):

Descargar ARWPost desde la página http://www.mmm.ucar.edu/wrf/users/download/get_sources.html

Nota: Para la descarga hay que suscribirse de manera gratuita al sitio.

El link de descarga de la versión 3.1 es la siguiente: http://www.mmm.ucar.edu/wrf/src/ARWpost_V3.tar.gz

Una vez descargado el paquete de ARWPost se realizan los siguientes pasos:

Nota: Se debe tener compilado NetCDF en la máquina en la que se piensa instalar ARWPost.

$ tar -xvzf ARWpost_V3.tar.gz
$ cd ARWpost
$ ./configure

** WARNING: No path to NETCDF and environment variable NETCDF not set.
** would you like me to try to fix? [y]
y
Enter full path to NetCDF include directory on your system
/usr/local/include
Enter full path to NetCDF library directory on your system
/usr/local/lib
created new ./netcdf_links directory
total 0
lrwxrwxrwx. 1 angelv angelv 18 abr 18 15:41 include -> /usr/local/include/
lrwxrwxrwx. 1 angelv angelv 14 abr 18 15:41 lib -> /usr/local/lib/
Will use NETCDF in dir: /home/angelv/ARWpost/netcdf_links
------------------------------------------------------------------------
Please select from among the following supported platforms.

   1.  PC Linux i486 i586 i686 x86_64, PGI compiler   
   2.  PC Linux i486 i586 i686 x86_64, Intel compiler   
   3.  PC Linux i486 i586 i686 x86_64, gfortran compiler

Enter selection [1-3] : 2  
------------------------------------------------------------------------
Configuration successful. To build the ARWpost, type: compile
------------------------------------------------------------------------

$ ./compile

******************************************************************************************
GrADS
******************************************************************************************

Instalación de GrADS (He seguido los pasos que se muestran en "Como instalar GrADS"  http://youtu.be/e4s92fer85s)


Descargar de la página oficial el código fuente (source) para compilarlo. http://www.iges.org/grads/downloads.html

Nota: Los pasos a seguir están mostrados en el archivo INSTALL en el archivo comprimido en source.tar.gz.
Nota: Tutorial en español con un ejemplo de uso de GrADS está en: http://www.iges.org/grads/gadoc/

$ tar -xvzf grads-2.0.1-src.tar.gz
$ cd grads-2.0.1
$ ./configure

.
.
.

- OPeNDAP for station data disabled

  +=========================================================================+
   GrADS 2.0.1 : Built Wed May 2 17:53:35 ECT 2012 for x86_64-unknown-linux-gnu
  +=========================================================================+

  +-------------------------------+
  |                               |
  |  GrADS will be built with:    |
  |                               |
  |  - GUI disabled               |
  |  - readline disabled          |
  |  - geotiff disabled           |
  |  - shapefile disabled         |
  |  - printim disabled           |
  |  - grib2 disabled             |
  |  - hdf4 disabled              |
  |  - hdf5 disabled              |
  |  - netcdf disabled            |
  |  - OPeNDAP disabled           |
  |                               |
  |  gxtran will not be built     |
  |  grib2scan will not be built  |
  |                               |
  +-------------------------------+
configure: creating src/VERSION
configure: creating src/buildinfo.h
configure: creating ./config.status
config.status: creating Makefile
config.status: creating src/Makefile
config.status: creating src/config.h

Run 'make && make install' to build GrADS.
Executables will be installed to bin/ in current dir, unless prefix was specified.

# make && make install

Cuando se manda make && make install sale el siguiente error:

.
.
.
gxdxwd.c:16:29: error: X11/Xmu/WinUtil.h: No existe el fichero o el directorio
make[2]: *** [gxdxwd.o] Error 1
make[2]: se sale del directorio `/home/angelv/Descargas/grads-2.0.1/src'
make[1]: *** [all] Error 2
make[1]: se sale del directorio `/home/angelv/Descargas/grads-2.0.1/src'
make: *** [all-recursive] Error 1

En la siguiente página se da la solución a este problema: http://dougsland.livejournal.com/54995.html

Se debe instalar libxmu-dev

Ahora mandamos a instalar make && make install ([root@localhost grads-2.0.1]# make && make install)

$ make
$ make check
# make install

Una vez que está compilado GrADS, pasamos todos los ejecutables (los que se generan luego de la compilación) que están en el directorio bin hacia el directorio /usr/local/bin.

Cuando ya se va a abrir una salida de WRF y si no están instalados datos 2, sale esto:

.
.
.
Error opening stroke character data set
  Data set names = /usr/local/lib/grads/font0.dat ; font0.dat
Error opening stroke character data set
  Data set names = /usr/local/lib/grads/font0.dat ; font0.dat

Instalación de datos (datos2.tar.gz)
------------------------------------

Se debe instalar el archivo datos2.tar.gz desde la página web http://grads.iges.org/grads/downloads.html

Nota: Los pasos a seguir están mostrados en el archivo INSTALL en el archivo comprimido en source.tar.gz.

Todos los archivos que están empoquetados se copian a un directorio del sistema llamado /usr/local/lib/grads (el directorio grads dentro de lib se debe crear).

Una vez instalados GrADS y sus respectivos datos (datos2.tar.gz), se puede hacer una prueba con la salida de ARWPost.

Copiamos los archivos de salida de ARWPost (salida.ctl y salida.dat) al directorio de GrADS y en la terminal del sistema ponemos

$ grads
ga> open salida.ctl
ga> d t2
ga> d t
ga> d u10m

WRF, WPS y WRF Domain Wizard en Scientific Linux

30 de marzo de 2012

Seguir lo que dice en el siguiente manual
-----------------------------------------

    http://www.cmc.org.ve/mediawiki/index.php?title=%E2%97%A6_WRF


Para descargarse las librerías, hay una lista de esos datos a bajar
-------------------------------------------------------------------

    http://www.mmm.ucar.edu/wrf/users/download/get_sources.html


Sistema operativo: GNU/Linux
Distribución: Scientific Linux
Versión: 6.1
------------------------------
------------------------------


1. Descargar software necesario
-------------------------------

Descarga de WRF y WPS desde la página oficial. Se ha instalado la versión 3.3.1

http://www.mmm.ucar.edu/wrf/src/

Datos de topografía

www.mmm.ucar.edu/wrf/src/wps_files/geog.tar.gz

Librerías adicionales necesarias

www.mmm.ucar.edu/wrf/src/wps_files/jasper-1.701.0.tar.gz
www.mmm.ucar.edu/wrf/src/wps_files/libpng-1.2.12.tar.gz
www.mmm.ucar.edu/wrf/src/wps_files/zlib-1.2.3.tar.gz

NetCDF (la librería más importante para WRF). La última versión (ahora es la versión 4.1.3).

http://www.unidata.ucar.edu/downloads/netcdf/index.jsp

WRFDomainWizard

http://wrfportal.org/domainwizard/WRFDomainWizard.zip

2. Instalación de compiladores y paquetes adicionales
-----------------------------------------------------

    NOTA IMPORTANTE: Para todos los paquetes que se instalen y compilen en adelante, se debe utilizar las MISMAS VERSIONES de los compiladores.
    ---------------

# yum install gcc
# yum install gcc-gfortran
# yum install gcc-c++ (necesario para compilar NetCDF)
# yum install make
# yum install perl (en Scientific Linux ya está instalado por defecto)
# yum install java (necesario para correr WRFDomianWizard)

3. Instalación de librerías adicionales
---------------------------------------

Se recomienda instalar un editor llamado nano, para poder hacer cualquier creación o modificación de scripts en lo posterior mediante consola (terminal): # yum install nano.

ZLIB (Instalar con -fPIC: export CFLAGS=-fPIC antes de todo)

$ zlib-1.2.3.tar.gz
$ cd zlib-1.2.3
$ ./configure
$ make
$ make check
# make install


JASPER

$ tar -xvzf jasper-1.701.0.tar.gz
$ cd jasper-1.701.0
$ ./configure
$ make
$ make check
# make install

LIBPNG

$ tar -xvzf libpng-1.2.12.tar.gz
$ cd libpng-1.2.12
$ ./configure
$ make

    ERROR:    /usr/bin/ld: /usr/local/lib/libz.a(crc32.o): relocation R_X86_64_32 against `.rodata' can not be used when making a shared object; recompile with -fPIC
        /usr/local/lib/libz.a: could not read symbols: Bad value
        collect2: ld returned 1 exit status

    Posible solución: http://www.gentoo.org/proj/en/base/amd64/howtos/index.xml?part=1&chap=3

    Si al momento de contruir (make) sale un error que pide que se recompile con -fPIC, se debe inicializar la variable CFLAGS = "-O3 -fPIC". Y luego de eso volver a ./configure. Así:
        $ export CFLAGS="-O3 -fPIC"
        $ ./configure

    Se puede ver el contenido de una variable de la sigui./run_DomainWizard
ente manera:
   
        $ echo $NOMBRE_VARIABLE

    Se puede borrar el valor de una variable de la siguiente manera:

        $ unset NOMBRE_VARIABLE

        NO PUDE ARREGLAR EL ERROR. Se puede instalar con: # yum install libpng. En Scientific Linux 6.1 ya está instalada la versión 1.2.46-2
        --------------------------
   
$ make check
# make install

4. Instalación NetCDF
---------------------

Se lo ha puesto como un subtítulo puesto que es la librería más importante para WRF.

$ tar -xvzf netcdf-4.1.3.tar.gz
$ cd netcdf-4.1.3
$ ./configure --disable-netcdf-4
$ make
$ make check
# make install

Para comprobar la instalación (se lo debe hacer pues es muy importante para WRF) se puede usar el siguiente comando:

ls /usr/local/include/netcdf*

El resultado debe contener los siguientes archivos:

/usr/local/include/netcdfcpp.h
/usr/local/include/netcdf.h
/usr/local/include/netcdf.hh
/usr/local/include/netcdf.inc
/usr/local/include/netcdf.mod

El siguiente comando:

ls /usr/local/lib/libnetcdf*

El resultado debe contener los siguientes archivos:

/usr/local/lib/libnetcdf.a    
/usr/local/lib/libnetcdf_c++.la
/usr/local/lib/libnetcdf_c++.a
/usr/local/lib/libnetcdf.la

5. Instalación de WRF
---------------------

$ tar -xvzf WRFV3.3.1.TAR.gz
$ cd WRFV3

Necesitaremos ahora agregar unas nuevas líneas al /etc/bashrc. Son las que se ven a continuación:

$ export JASPERLIB=/opt/jasper-1.701.0
$ export JASPERINC=/opt/jasper-1.701.0
$ ulimit -s unlimited

Para actualizar las variables de ambiente, como es usual:

$ source /etc/bashrc

$ ./configure

Aparece lo siguiente:

checking for perl5... no
checking for perl... found /usr/bin/perl (perl)
** WARNING: No path to NETCDF and environment variable NETCDF not set.
** would you like me to try to fix? [y]

decimos "y" e incluimos los PATH:

/usr/local/include
/usr/local/lib

en cada uno de los casos que pregunta. Si hemos hecho todo bien aparecerá un menú (al principio de todo indica que se han reconocido los caminos a la biblioteca JASPER):

Please select from among the following supported platforms.

   1.  Linux x86_64, PGI compiler with gcc  (serial)
   2.  Linux x86_64, PGI compiler with gcc  (smpar)
   3.  Linux x86_64, PGI compiler with gcc  (dmpar)
   4.  Linux x86_64, PGI compiler with gcc  (dm+sm)
   5.  Linux x86_64, PGI accelerator compiler with gcc  (serial)
   6.  Linux x86_64, PGI accelerator compiler with gcc  (smpar)
   7.  Linux x86_64, PGI accelerator compiler with gcc  (dmpar)
   8.  Linux x86_64, PGI accelerator compiler with gcc  (dm+sm)
   9.  Linux x86_64 i486 i586 i686, ifort compiler with icc  (serial)
  10.  Linux x86_64 i486 i586 i686, ifort compiler with icc  (smpar)
  11.  Linux x86_64 i486 i586 i686, ifort compiler with icc  (dmpar)
  12.  Linux x86_64 i486 i586 i686, ifort compiler with icc  (dm+sm)
  13.  Linux i486 i586 i686 x86_64, PathScale compiler with pathcc  (serial)
  14.  Linux i486 i586 i686 x86_64, PathScale compiler with pathcc  (dmpar)
  15.  x86_64 Linux, gfortran compiler with gcc   (serial)
  16.  x86_64 Linux, gfortran compiler with gcc   (smpar)
  17.  x86_64 Linux, gfortran compiler with gcc   (dmpar)
  18.  x86_64 Linux, gfortran compiler with gcc   (dm+sm)
  19.  Cray XT CLE/Linux x86_64, PGI compiler with gcc  (seri./run_DomainWizard
al)
  20.  Cray XT CLE/Linux x86_64, PGI compiler with gcc  (smpar)
  21.  Cray XT CLE/Linux x86_64, PGI compiler with gcc  (dmpar)
  22.  Cray XT CLE/Linux x86_64, PGI compiler with gcc  (dm+sm)
  23.  Cray XT CLE/Linux x86_64, Cray CCE compiler with gcc  (serial)
  24.  Cray XT CLE/Linux x86_64, Cray CCE compiler with gcc  (smpar)
  25.  Cray XT CLE/Linux x86_64, Cray CCE compiler with gcc  (dmpar)
  26.  Cray XT CLE/Linux x86_64, Cray CCE compiler with gcc  (dm+sm)

Enter selection [1-26] : 15

Compile for nesting? (0=no nesting, 1=basic, 2=preset moves, 3=vortex following) [default 0]: 1

Configuration successful. To build the model type compile .

Testing for NetCDF, C and Fortran compiler

no entry nc.o in archive
This installation NetCDF is
C compiler is 64-bit
Fortran compiler is 64-bit
It will build in

¡YA!
----

$ ./compile em_real

Y SE COMIENZA A COMPILAR
------------------------

Para comprobar que se haya realizado con éxito la compilación. Se deben encontrar en el directorio main (dentro de WRFV3), entre otros, los siguientes archivos:

$ ls run/*.exe

wrf.exe
real.exe
nup.exe
ndown.exe
tc.exe
ndown.exe

Para hacer una prueba se puede bajar el siguiente archivo empaquetado: http://www.mmm.ucar.edu/wrf/src/data/jan00_wps.tar.gz

Se lo pone dentro de test/em_real

$ cd test/em_real
$ tar -xvzf jan00_wps.tar.gz
$ cp namelist.input.jan00 namelist.input
$ ./real.exe

    Puede salir el siguiente error: ./real.exe: error while loading shared libraries: libnetcdff.so.5: cannot open shared object file: No such file or directory
    Solución: $ export LD_LIBRARY_PATH=/usr/local/lib


Para recompilar

$ ./clean -a
$ ./configure
$ ./compile

INSTALACIÓN WPS
---------------

$ tar -xvzf WPSV3.3.1.TAR.gz
$ cd WPS/
$ export JASPERLIB=/opt/jasper-1.701.0
$ export JASPERINC=/opt/jasper-1.701.0

    NOTA: Aquí se muestra cómo hacer para que se configure WPS con grib2: https://nesccdocs.rdhpcs.noaa.gov/wiki/index.php/WPS
    Básicamente se tiene que poner en configure.wps
        COMPRESSION_LIBS = -ljasper -lpng12 -lpng -lz

$ ./configure
** WARNING: No path to NETCDF and environment variable NETCDF not set.
** would you like me to try to fix? [y]
y
Enter full path to NetCDF include directory on your system
/usr/local/include
Enter full path to NetCDF library directory on your system
/usr/local/lib
created new ./netcdf_links directory
total 0
lrwxrwxrwx. 1 angelv angelv 18 mar  5 16:31 include -> /usr/local/include/
lrwxrwxrwx. 1 angelv angelv 14 mar  5 16:31 lib -> /usr/local/lib/
Will use NETCDF in dir: /home/angelv/WPS/netcdf_links
$JASPERLIB or $JASPERINC not found in environment, configuring to build with grib2 I/O...
------------------------------------------------------------------------
Please select from among the following supported platforms.

   1.  PC Linux x86_64, Intel compiler    serial, NO GRIB2
   2.  PC Linux x86_64, Intel compiler    serial
   3.  PC Linux x86_64, Intel compiler    DM parallel, NO GRIB2
   4.  PC Linux x86_64, Intel compiler    DM parallel
   5.  PC Linux x86_64, gfortran compiler,    serial, NO GRIB2
   6.  PC Linux x86_64, gfortran compiler,    serial
   7.  PC Linux x86_64, gfortran compiler,    DM PARALLEL, NO GRIB2
   8.  PC Linux x86_64, gfortran compiler,    DM PARALLEL
   9.  PC Linux x86_64 (IA64 and Opteron), PGI compiler 5.2 or higher, serial, NO GRIB2
  10.  PC Linux x86_64 (IA64 and Opteron), PGI compiler 5.2 or higher, serial
  11.  Cray XT/XE Linux x86_64 (Opteron), PGI compiler 5.2 or higher, DM parallel
  12.  Cray XT/XE Linux x86_64 (Opteron), PGI compiler 5.2 or higher, DM parallel, NO GRIB2
  13.  Cray XT/XE Linux x86_64 (Opteron), Cray CCE compiler 7.0 or higher, DM parallel
  14.  Cray XT/XE Linux x86_64 (Opteron), Cray CCE compiler 7.0 or higher, DM parallel, NO GRIB2
  15.  PC Linux x86_64 (IA64 and Opteron), PGI compiler 5.2 or higher, DM parallel, NO GRIB2
  16.  PC Linux x86_64 (IA64 and Opteron), PGI compiler 5.2 or higher, DM parallel
  17.  PC Linux x86_64 (IA64 and Opteron), PathScale compiler 2.1 or higher, serial, NO GRIB2
  18.  PC Linux x86_64 (IA64 and Opteron), PathScale compiler 2.1 or higher, DM parallel, NO GRIB2
  19.  PC Linux x86_64, g95 compiler,    serial, NO GRIB2
  20.  PC Linux x86_64, g95 compiler,    serial
  21.  PC Linux x86_64, g95 compiler,    DM PARALLEL, NO GRIB2
  22.  PC Linux x86_64, g95 compiler,    DM PARALLEL

Enter selection [1-22] : 8
------------------------------------------------------------------------
Configuration successful. To build the WPS, type: compile
------------------------------------------------------------------------

$ ./compile

**********************************************************************************************************************
**************************************  WRFDomainWizard  *************************************************************
**********************************************************************************************************************

WRFDomainWizard
---------------
---------------

Descompresión del programa. Se lo ha realizado dentro de la carpeta personal /home/angelv/WRFDomainWizard

$ unzip WRFDomainWizard.zip (este comando descomprime los archivos donde esté WRFDomainWizard.zip)

Cambiamos los permisos de ejecución del lanzador del programa (http://belinuxmyfriend.blogspot.com/2007/04/chmod-jugando-con-los-permisos.html):

$ chmod 777 run_DomainWizard

$ ./run_DomainWizard

Datos no transitorios
---------------------

Descargar datos geográficos (454 MB) de: http://www.mmm.ucar.edu/wrf/src/wps_files/geog.tar.gz

Descomprimir los datos geográficos (13 GB). Se lo puede hacer en cualquier directorio; en este caso se lo ha descomprimido en el directorio donde está WPS (/home/angelv/WPS).

$ tar -xvzf geog.tar.gz

Uso de WRFDomainWizard
----------------------

NOTA: Por facilidad (para no usar línea de comandos) se ha creado un lanzador o acceso directo a WRFDomainWizard para acceder desde el escritorio.
    Click derecho en el Escritorio
    Crear Lanzador
    Se ingresan los siguientes datos
        Tipo: Aplicación
        Nombre: WRFDomainWizard (Este nombre puede ser cualquiera)
        Comando: java -Xmx575m -jar /home/angelv/WRFDomainWizard/WRFDomainWizard.jar
        Comentario: GUI para uso de WPS (Puede ser cualquier comentario)

Primero se configuran los parámetros de WRFDomainWizard

    NOTA: Se crea un directorio para los resultados de ejecución de WPS (para usarlo en el parámetro Domains al momento de configurar WRFDomainWizard): $ mkdir /home/angelv/WPS/Domains

Computer (se rellena automáticamente luego de ingresar los siguientes tres parámetros): localhost.localdomain
WPS Programs: /home/angelv/WPS
Geography: /home/angelv/WPS/geog
Domains: /home/angelv/WPS/Domains

NOTA: Para ver el uso de WRFDomainWizard: http://wrfportal.org/DomainWizard.html


Para instalar Skype en Scientific Linux: http://unix.stackexchange.com/questions/25846/skype-missing-gpg-key


PRUEBA DE EJECUCIÓN CON WRF
---------------------------

$ ./real.exe

    Salió este error:
-------------- FATAL CALLED ---------------
 FATAL CALLED FROM FILE:    LINE:     693
  input_wrf.F: SIZE MISMATCH:  namelist ide,jde,num_metgrid_levels=         100         132          65 ; input data ide,jde,num_metgrid_levels=         100         132          27

Aquí tuve pistas para resolver el problema: http://forum.wrfforum.com/viewtopic.php?f=9&t=2781

El error dice que no hay consistencia entre el valor configurado en la variable num_metgrid_levels y los valores que existen para hacer la corrida. Hay que editar el valor de la variable, cambiando de 65 a 27 (como se indica en el archivo mismo).

Luego de una ejecución exitosa debe aparecer el siguiente resultado:

 Domain  1: Current date being processed: 2012-03-30_00:00:00.0000, which is loop #   9 out of    9
 configflags%julyr, %julday, %gmt:        2012          90   0.0000000   
  metgrid input_wrf.F first_date_input = 2012-03-30_00:00:00
  metgrid input_wrf.F first_date_nml = 2012-03-29_00:00:00
 d01 2012-03-30_00:00:00 Timing for input          0 s.
 d01 2012-03-30_00:00:00          flag_soil_layers read from met_em file is  1
 Using sfcprs3 to compute psfc
 d01 2012-03-30_00:00:00 Old data, no inland lake information
  Assume Noah LSM input
 LAND  CHANGE =            0
 WATER CHANGE =            0
 d01 2012-03-30_00:00:00 Timing for processing          0 s.
 LBC valid between these times 2012-03-29_21:00:00.0000 2012-03-30_00:00:00    
 d01 2012-03-30_00:00:00 Timing for output          0 s.
 d01 2012-03-30_00:00:00 Timing for loop #    9 =          1 s.
 d01 2012-03-30_00:00:00 real_em: SUCCESS COMPLETE REAL_EM INIT

$ ./wrf.exe

Timing for Writing wrfout_d01_2012-03-29_03:00:00 for domain        1:    0.30800 elapsed seconds.
 d01 2012-03-29_03:00:00 wrf: SUCCESS COMPLETE WRF

ERROR ERROR ERROR
-----------------
-----------------

Por aquí puede estar la solución: http://forum.wrfforum.com/viewtopic.php?f=6&t=2531


[angelv@localhost em_real]$ ./wrf.exe
 Namelist dfi_control not found in namelist.input. Using registry defaults for variables in dfi_control
 Namelist tc not found in namelist.input. Using registry defaults for variables in tc
 Namelist scm not found in namelist.input. Using registry defaults for variables in scm
 Namelist fire not found in namelist.input. Using registry defaults for variables in fire
 --- NOTE: sst_update is 0, setting io_form_auxinput4 = 0 and auxinput4_interval = 0 for all domains
 --- NOTE: grid_fdda is 0 for domain      1, setting gfdda interval and ending time to 0 for that domain.
 --- NOTE: both grid_sfdda and pxlsm_soil_nudge are 0 for domain      1, setting sgfdda interval and ending time to 0 for that domain.
 --- NOTE: obs_nudge_opt is 0 for domain      1, setting obs nudging interval and ending time to 0 for that domain.
 --- NOTE: num_soil_layers has been set to      4
 WRF V3.3.1 MODEL
  *************************************
  Parent domain
  ids,ide,jds,jde            1         100           1         132
  ims,ime,jms,jme           -4         105          -4         137
  ips,ipe,jps,jpe            1         100           1         132
  *************************************
 DYNAMICS OPTION: Eulerian Mass Coordinate
    alloc_space_field: domain            1 ,             596733464  bytes allocated
   med_initialdata_input: calling input_input
Timing for processing wrfinput file (stream 0) for domain        1:    0.17400 elapsed seconds.
 INPUT LandUse = "USGS"
 LANDUSE TYPE = "USGS" FOUND          33  CATEGORIES           2  SEASONS WATER CATEGORY =           16  SNOW CATEGORY =           24
 INITIALIZE THREE Noah LSM RELATED TABLES
  LANDUSE TYPE = USGS FOUND          27  CATEGORIES
  INPUT SOIL TEXTURE CLASSIFICATION = STAS
  SOIL TEXTURE CLASSIFICATION = STAS FOUND          19  CATEGORIES
Timing for Writing wrfout_d01_2012-03-29_00:00:00 for domain        1:    0.86100 elapsed seconds.
Timing for processing lateral boundary for domain        1:    0.04900 elapsed seconds.
 WRF TILE   1 IS      1 IE    100 JS      1 JE    132
 WRF NUMBER OF TILES =   1
Timing for main: time 2012-03-29_00:03:00 on domain   1:   25.85200 elapsed seconds.
Timing for main: time 2012-03-29_00:06:00 on domain   1:   15.83300 elapsed seconds.
Timing for main: time 2012-03-29_00:09:00 on domain   1:   15.50600 elapsed seconds.
Timing for main: time 2012-03-29_00:12:00 on domain   1:   16.01300 elapsed seconds.
Timing for main: time 2012-03-29_00:15:00 on domain   1:   15.59900 elapsed seconds.
Timing for main: time 2012-03-29_00:18:00 on domain   1:   16.03300 elapsed seconds.
 Flerchinger USEd in NEW version. Iterations=          10
 Flerchinger USEd in NEW version. Iterations=          10
 Flerchinger USEd in NEW version. Iterations=          10
  WOULD GO OFF TOP: KF_ETA_PARA I,J,DPTHMX,DPMIN          52          89             NaN   5000.0000
Violación de segmento

--------------------
--------------------
ERROR ERROR ERROR

-----------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------
***************************** INSTALACIÓN DE ARW POST *******************************************************************************
-----------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------

VIDEO QUE DA CÓMO COMPILAR http://youtu.be/zXvfQ4i0IJE

ARWpost:
ARWpost, is a Fortran program that reads WRF ARW input and output file and generate GrADS output files.

Once the output files have been generated, GrADS can be used to producing horizontal or vertical cross section plots of scalar fields (contours) or vector fields (barbs or arrows), vertical profiles and soundings.

$ tar -xvzf ARWpost_V3.tar.gz
$ cd ARWpost
$ ./configure

** WARNING: No path to NETCDF and environment variable NETCDF not set.
** would you like me to try to fix? [y]
y
Enter full path to NetCDF include directory on your system
/usr/local/include
Enter full path to NetCDF library directory on your system
/usr/local/lib
created new ./netcdf_links directory
total 0
lrwxrwxrwx. 1 angelv angelv 18 abr 18 15:41 include -> /usr/local/include/
lrwxrwxrwx. 1 angelv angelv 14 abr 18 15:41 lib -> /usr/local/lib/
Will use NETCDF in dir: /home/angelv/ARWpost/netcdf_links
------------------------------------------------------------------------
Please select from among the following supported platforms.

   1.  PC Linux i486 i586 i686 x86_64, PGI compiler   
   2.  PC Linux i486 i586 i686 x86_64, Intel compiler   
   3.  PC Linux i486 i586 i686 x86_64, gfortran compiler

Enter selection [1-3] : 2  
------------------------------------------------------------------------
Configuration successful. To build the ARWpost, type: compile
------------------------------------------------------------------------

$ ./compile

Se dió el siguiente error:

    module_interp.f:(.text+0x6ece): undefined reference to `ncvgt_'
    collect2: ld devolvió el estado de salida 1
    make: [ARWpost.exe] Error 1 (no tiene efecto)

Instalación de Vis5D

Descargar desde la página web oficial: http://www.ssec.wisc.edu/~billh/vis5d.html

$ tar -xvzf vis5d+-1.3.0-beta.tar.gz
$ cd vis5d+-1.3.0-beta
$ ./configure

****************************************************
You need to install a 3D graphics library, preferably
the free OpenGL replacement, Mesa.  You can download
Mesa from the Mesa home page:
          http://www.mesa3d.org/
and install it by running:
       ./configure && make && su -c 'make install'
in the Mesa directory.
You may also need to run /sbin/ldconfig as root
to update the system after installing Mesa.
(First, add '/usr/local/lib' to /etc/ld.so.conf if
you installed Mesa under /usr/local, the default.)
****************************************************

Apache Wicket 1.5.3 en Eclipse Helios

26 de noviembre de 2011

En una entrada anterior [1] publiqué cómo hacer un "Hola Mundo" en Eclipse usando el Framework Apache Wicket. Indiqué que lo había hecho con la versión 1.3 de Wicket. He encontrado la forma en la que se debe crear un nuevo proyecto con la versión más reciente del Framework. Dejo el vídeo [2].

Referencias:
[1] http://ingfomentor.blogspot.com/2011/11/hola-mundo-con-wicket-en-eclipse-sobre.html
[2] http://youtu.be/3fdiCBb4rK8

Hola Mundo con Apache Wicket en Eclipse sobre servidor Apache Tomcat

3 de noviembre de 2011

La idea fue probar la forma de crear aplicaciones con el framework java Apache Wicket utilizando Eclipse. Lo logré, mas he optado por hacerlo en NetBeans pues es mucho más fácil con el plugin [1] que se tiene para ese IDE (si no se instala el plugin, asegurarse de que se tiene la última versión del IDE) y sobre todo tiene la versión 1.4, en cambio en Eclipse se crea y utiliza la versión 1.3 (debe haber cómo utilizar la última versión de Wicket, pero he decidido no seguir gastando tiempo en hacer eso).

Si se desea comenzar a utilizar Apache Wicket recomiendo seguir el libro Enjoying Web Development with Wicket de Kent Ka Iok Tong que, aunque es del 2007, me ha ayudado sobremanera.

1. Descargar Apache Tomcat [2].
2. Instalar el servidor Apache Tomcat en Eclipse [3]. Para provar un proyecto web básico verificando que el servidor funcione [4].
3. Instalar Plugin Maven 2 en Eclipse [5].
4. Creamos un nuevo proyecto Maven 2

Concepto o Técnica de la Horda de Mongoles

7 de octubre de 2011

Desde hace un tiempo he estado leyendo el libro de Roger S. Pressman llamado Ingeniería del Software - Un enfoque práctico (Séptima edición). La cosa es que en el capítulo 1 se habla de los Mitos del Software (página 18) y se menciona el mito de que "si nos atrasamos [en un proyecto de software], podemos agregar más programadores y ponernos al corriente (en ocasiones, a esto se le llama 'concepto de la horda de mongoles')". Lo que no entendía es porqué se menciona el concepto de la horda de mongoles, no sabía a qué se refería eso y porqué se usa ese concepto en ingeniería de software. La verdad es que no se me hizo fácil hallar la respuesta (hasta lo pregunté en yahoo answers [1]) hasta que alguien (@hergUStone [2]) en twitter me ayudó con la respuesta [3].

Referencias

[1] http://mx.answers.yahoo.com/question/index?qid=20111005200521AAqk98i
[2] http://twitter.com/hergUStone
[3] http://blog.betterriskmanagement.com/2009/03/disaster-recovery-via-the-mongolian-horde-technique/

Agregar Impresora HP LaserJet P2055dn en Red. Windows XP

29 de septiembre de 2011


Web Semántica

18 de septiembre de 2011

La web semántica14 [Berners-Lee 2001] propone superar las limitaciones de la web actual mediante la introducción de descripciones explícitas del significado, la estructura interna y la estructura global de los contenidos y servicios disponibles en la WWW. Frente a la semántica implícita, el crecimiento caótico de recursos, y la ausencia de una organización clara de la web actual, la web semántica aboga por clasificar, dotar de estructura y anotar los recursos con semántica explícita procesable por máquinas. La figura 2 ilustra esta propuesta. Actualmente la web se asemeja a un grafo formado por nodos del mismo tipo, y arcos (hiperenlaces) igualmente indiferenciados. Por ejemplo, no se hace distinción entre la página personal de un profesor y el portal de una tienda on-line, como tampoco se distinguen explícitamente los enlaces a las asignaturas que imparte un profesor de los enlaces a sus publicaciones. Por el contrario en la web semántica cada nodo (recurso) tiene un tipo (profesor, tienda, pintor, libro), y los arcos representan relaciones explícitamente diferenciadas (pintor – obra, profesor – departamento, libro – editorial).

La web semántica mantiene los principios que han hecho un éxito de la web actual, como son los principios de descentralización, compartición, compatibilidad, máxima facilidad de acceso y contribución, o la apertura al crecimiento y uso no previstos de antemano. En este contexto un problema clave es alcanzar un entendimiento entre las partes que han de intervenir en la construcción y explotación de la web: usuarios, desarrolladores y programas de muy diverso perfil. La web semántica rescata la noción de ontología del campo de la Inteligencia Artificial como vehículo para cumplir este objetivo.

Gruber define ontología como “a formal explicit specification of a shared conceptualization” [Gruber 1993]. Una ontología es una jerarquía de conceptos con atributos y relaciones, que define una terminología consensuada para definir redes semánticas de unidades de información interrelacionadas. Una ontología proporciona un vocabulario de clases y relaciones para describir un dominio, poniendo el acento en la compartición del conocimiento y el consenso en la representación de éste. Por ejemplo, una ontología sobre arte podría incluir clases como Pintor, Cuadro, Estilo o Museo, y relaciones como autor de un cuadro, pintores pertenecientes a un estilo artístico u obras
localizadas en un museo.

La idea es que la web semántica esté formada (al menos en parte) por una red de nodos tipificados e interconectados mediante clases y relaciones definidas por una ontología compartida por sus distintos autores. Por ejemplo, una vez establecida una ontología sobre cuadros y pintura, un museo virtual puede organizar sus contenidos definiendo instancias de pintores, cuadros, etc., interrelacionándolas y publicándolas en la web semántica. La adopción de ontologías comunes es clave para que todos los que participen de la web semántica, contribuyendo o consumiendo recursos, puedan trabajar de forma autónoma con la garantía de que las piezas encajen. Así por ejemplo varios museos podrían colaborar para dar lugar a un gran meta-museo que integre los contenidos de todos ellos. Un programa que navegue por una red como ésta puede reconocer las distintas unidades de información, obtener datos específicos o razonar sobre relaciones complejas. A partir de aquí sí podemos distinguir entre un cuadro pintado por un artista y un retrato de un artista.

Por último, la web no solamente proporciona acceso a contenidos sino que también ofrece interacción y servicios (comprar un libro, reservar una plaza en un vuelo, hacer una transferencia bancaria, simular una hipoteca). Los servicios web semánticos son una línea importante de la web semántica, que propone describir no sólo información sino definir ontologías de funcionalidad y procedimientos para describir servicios web: sus entradas y salidas, las condiciones necesarias para que se puedan ejecutar, los efectos que producen, o los pasos a seguir cuando se trata de un servicio compuesto. Estas descripciones procesables por máquinas permitirían automatizar el descubrimiento, la composición, y la ejecución de servicios, así como la comunicación entre unos y otros.

Instalación de NetBeans IDE 7.0.1 en Ubuntu 11.04

  1. Descargar el IDE desde la página oficial de NetBeans [1].
  2. Con el paquete en algún directorio local, desde el terminal tecleamos [2]: sudo sh netbeans-7.0.1-ml-linux.sh
  3. Se nos lanza el instalador.

Error en el tipo de datos cargados en la función SIM

7 de septiembre de 2011

La idea principal fue crear un ejecutable en Matlab [1] en donde se hace uso de funciones de redes neuronales. Este ejecutable debía servir sin la necesidad de que Matlab esté instalado en el equipo. El problema surgió cuando se genero el ejecutable. En una de las funciones, a saber, la función sim, no podía funcionar con uno de los parámetros que matlab "automáticamente" cambiaba de tipo al cargar. Se hacía la carga de la siguiente manera 

load('net.mat');

El error era el siguiente:

Warning: Class ':all:' is an unknown object class. Object 'net' of this class has been converted to a structure.

La solución [2] simplemente fue agregar una línea de código al comienzo del archivo que contenía la línea mencionada (load('net.mat');), es línea fue la siguiente:

%#function network

Con esto ya no se cambiaba el tipo de objeto y la ejecución era exitosa.

Referencias

Instalación de OpenOffice en Ubuntu

8 de febrero de 2011

Así es como instalé OpenOffice 3.3 en Ubuntu 10.10.
  1. Desinstalé todos los paquetes de la versión actual (En Synaptic se marca todos los paquetes para su desinstalación).
  2. Descargué el paquete (.DEB) de la página oficial de OpenOffice.
  3. Copié el archivo a la carpeta personal (es opcional, sólo por comodidad).
  4. tar -vxzf nombreDeArchivo.tar.gz
  5. cd directorio_OOo/DEBS (directorio_OOo es el desempaquetado de nombreDeArchivo.tar.gz)
  6. sudo dpkg -i *.deb
  7. cd desktop-integration (esta carpeta está dentro de directorio_OOo/DEBS)
  8. sudo dpkg -i *.deb
Fuente
Hagar de l'Est. [Tutorial] Installing OOo on Ubuntu, Debian and Co., Sun Nov 18, 2007 11:35 pm. En línea http://user.services.openoffice.org/en/forum/viewtopic.php?f=74&t=68

Leer partición Ext4 desde Windows 7

16 de enero de 2011

Una mañana quise seguir trabajando en mi Ubuntu como todos los días y pues nunca más pude arrancarlo.  La verdad es que yo mismo tuve la culpa de actualizar algunas cosas que no debía. Quise arreglar el problema y la verdad no tenía tiempo para recuperar el sistema de archivos, pero lo que no quería perder era al menos los datos. En el computador tenía además Windows 7, así que tenía que recuperar la información, que es lo más importante en realidad. Busqué un poco y encontré Ext2Read, sólo me lo descargué y lo instalé; la utilización es muy fácil, yo lo ejecuté y enseguida me mostró la partición que deseaba.
Pantalla Principal de Ext2Read
Ext2Read es una utilidad para examinar ficheros ext2/ext3/ext4. Ahora soporta LVM2 y EXT4. Y puede ser usado para ver y copiar ficheros y carpetas. Puede también copiar recursivamente carpetas enteras y ser usado para ver y copiar discos y ficheros” (SourceForge, 2010).

La Web Semántica en comparación con la Inteligencia Artificial

8 de enero de 2011

Pequeña parte de mi tesis que fue borrada, a alguien le servirá.

La mayoría de las tecnologías necesarias para la realización de la Web Semántica se basan en el trabajo del área de la Inteligencia Artificial (IA). De ahí que se tenga ciertas dudas en su evolución, puesto que en la inteligencia artificial, algunas veces se han planteado objetivos demasiado prometedores, pero sin una conclusión satisfactoria de los mismos.

Esta preocupación está justificada. Pero para los fines que se persiguen en la Web Semántica, la solución de la Inteligencia Articial va a funcionar. Incluso si un agente inteligente no fuera capaz de hacer todas las conclusiones que un ser humano puede ser capaz de hacer, el agente aún contribuiría a hacer la Web Semántica muy superior a la Web actual. Esto lleva a otra diferencia notoria: si el objetivo último de la IA es construir un agente inteligente que exhiba inteligencia de nivel humano (incluso superior), el objetivo de la Web Semántica es ayudar a los seres humanos en las actividades de navegación on line del día a día.

Una vez hecha esta distinción, es claro que la Web Semántica hará uso extensivo de la tecnología de la Inteligencia Artificial actual, y que los avances en la tecnología llevarán a una mejora de la Web Semántica. Pero no hay necesidad de esperar a que la Inteligencia Artificial alcance un mayor nivel de logro, la actual tecnología ya es suficiente para recorrer un largo camino hacia la realización de la visión de la Web Semántica.

5 mitos acerca de Google

27 de septiembre de 2010

Cuando se trata de Internet, simplemente no se puede pensar en algo más grande que Google. En los Estados Unidos,entre el 70 y el 75 por ciento de búsquedas se realizan mediante este motor. En otros lugares se eleva el número a más de 90 por ciento.

Google ha llegado a ser sinónimo de búsqueda en Internet. Tal exito atrae la atención, de hecho, existen muchos equipos de periodistas siguiendo cada uno de los pasos de Google.

La siguiente lista muestra algunos mitos que existen en cuanto a google.

1: Google quiere apropiarse del Internet

Cuando Google compra algo - como YouTube - por lo general es noticia de primera plana. Es por eso que algunos observadores de Google están intrigados por la silenciosa compra de la compañía de kilómetros y kilómetros de fibra oscura. 

La fibra oscura es cable de redes de fibra óptica de alta velocidad que no se han conectado todavía. Sus ejecutivos dicen que Google es el mayor propietario de fibra oscura del mundo. 

¿Qué puede hacer una empresa como Google con todo ese cable extra? Una respuesta corta: En realidad podría secuestrar el Internet. 

Este es el escenario del fin del mundo de la tecnología propuesta por el escritor y columnista Robert X. Cringely. Como más y más personas utilizan Internet para descargar películas, programas de televisión, música y otros medios de comunicación, proveedores de servicios Internet (ISP) lucharían por satisfacer las demandas de mayor ancho de banda. Google, por su parte, utilizará toda su fibra oscura para construir su propia versión más rápida y más eficiente de Internet. Cuando los ISPs lleguen a su límite de capacidad, no tendrán más opción que enrutar todo su tráfico a través de Google. 

Cringely escribió en 2007: "No sabremos si estamos accediendo a Internet o Google, y para todos los propósitos prácticos, no importa", "Google se convertirá en nuestra compañía telefónica, nuestra compañía de cable, nuestro equipo de música y nuestra filmadora digital".

Los representantes de Google tienen una explicación un poco menos dramática para las compras de fibra oscura. Ellos simplemente quieren utilizarlo para interconectar los centros de datos ubicados en todo el mundo. 

Google también se asocia con compañías de telecomunicaciones como AT & T para pedir prestado ancho de banda en sus redes a nivel nacional (en Estados Unidos). Para el funcionamiento de esos acuerdos, Google tiene que dirigir una gran parte de su tráfico a lugares de pares específicos. Eso requiere una gran cantidad de redes de fibra extra.

2: Google Earth está espiando

Hay algo innegable sobre Google Earth. Si escribimos la dirección de nuestra casa, la cámara baja en picada desde la estratosfera y nos muestra claramente la antena de nuestra casa. Acercando la captura podremos ver las rosas del jardín y el carro fuera en la clazada. 

Muchos esperan acercar la captura a la ventana de la sala y mirarse sentados en la computadora, entonces saludar a la cámara.

El mito sobre Google Earth es que es la cámara espía más potente del mundo en tiempo real. La verdad es que cada imagen que se ve en Google Earth fue tomada de uno a tres años atras. Google recopila y compone imágenes de satélites y compañías aéreas como DigitalGlobe y Tele Atlas, así como de las agencias gubernamentales y las fuerzas armadas. 

Entonces sí, si eres increiblemente afortuando, existe una pequeña posiblilidad de ser capturado por una fotografía de Google Earth.

El "Street View", opción de Google Maps, también ha sido criticada por defensores de la privacidad que creen que también funciona como una cámara espía. Pero una vez más, las imágenes sólo se actualizan una vez cada pocos años. Además, Google ha creado un algoritmo que vuelve borrosas las caras de los individuos capturados accidentalmente para proteger su identidad.

3: Google sabe todo sobre usted

En lo profundo de las entrañas de un clima controlado, en una granja de servidores dentro de un insignificante centro de datos de Google en un parque industrial sin nombre de Arkansas, se encuentran millones de gigabytes de información. Esta información pinta una imagen sorprendentemente precisa de quiénes somos, dónde vivimos y qué nos gusta ver en YouTube. Suena siniestro, ¿no? 

Todo esto es verdad: Google guarda las consultas de búsqueda relacionadas con nuestro Protocolo de Internet (IP) por nueve meses. Utiliza un  programa para explorar palabras clave en los correos electrónicos. Con un nuevo servicio de telefonía celular llamado Latitud (latitude), nuestros  amigos (y Google) siempre sabe dónde estamos. Incluso YouTube siempre parece sugerir videos que realmente queremos ver. Espeluznante, ¿verdad? 

Obviamente, si Google tiene acceso a toda esta información lo está usando de una manera siniestra.  No tan rápido: Según los representantes de Google, no hay nada que identifique a una persona en particular entre cualquiera de los datos que Google guarda y analiza. Nuestras consultas de búsqueda, por ejemplo, no son las consultas de búsqueda actual, sino búsquedas realizadas desde la dirección IP de nuestro ordenador. Una dirección IP sólo le da a Google una ubicación geográfica imprecisa, no un nombre. 

A ningún empleado de Google se le permite hacer conexiones entre las direcciones IP y los individuos. De hecho, Google tiene un historial de solicitudes negadas al gobierno de Estados Unidos para entregar historiales de búsqueda para  investigaciones.

Lo más malévolo que hace Google con su vasto almacén de información es, usando nuestro historial de búsqueda y palabras clave de correo electrónico, mostrarnos la publicidad según nuestros intereses. Sin embargo, los defensores de la privacidad argumentan que a ninguna entidad se le debería permitir recopilar tal cantidad de información. Están preocupados de que algunos hackers malévolos puedan tener en sus manos información de Google. ¿Qué pasa si de repente Google necesita  dinero fácil? ¿Qué impide a esta compañía la venta de nuestra información al mejor postor? 

La respuesta, según Google, es la filosofía corporativa número seis: "Se puede ganar dinero sin hacer el mal".

4: Google nos está volviendo tontos

¿Cuál es la capital de Uruguay? ¿Quién fue la primera astronauta de la NASA? ¿Cuál es exactamente la Segunda Ley de Movimiento de Newton? ¡Oh, eso es fácil! Google. Google. Google. Google. Google. La respuesta se encuentra con Google. 

Aunque no lo creamos, hubo un tiempo en que el mundo realmente esperaba que recordemos y analicemos las fechas, hechos y otros datos fácilmente olvidables que se aprenden en la escuela.  Ahora, en lugar de la memoria a largo plazo y la inteligencia, tenemos todo esta información dentro de una caja a la que accedemos por Google. 

Entonces ¿Google realmente nos está volviendo tontos o hemos cambiado la definición de inteligencia? 

Un artículo reciente en The Atlantic Monthly apunta que la gente ha culpado de la caída de la inteligencia a la tecnología desde que ésta inició. Sócrates lamentaba la invención de la escritura, diciendo que haría que los seres humanos se convirtieran en olvidadizos; la imprenta provocó protestas por la democratización del conocimiento y su efecto degradante en la creencia religiosa. 

La Internet también tiene sus críticos. Los estudios demuestran que la Internet ha provocado algunos cambios claros en la forma de procesar información. En el mundo en línea, las ojeadas rápidas, enlaces a otras páginas y otras formas de lectura no continua, se han vuelto más comunes que la lectura de largas secciones de texto, como lo haríamos en un libro o una revista.  Los críticos argumentan que nuestro creciente desinterés en la lectura de los pasajes más largos de texto significa que no podemos pensar en forma crítica acerca de un tema. 

Los defensores de la internet argumentan lo contrario: Google nos ha hecho infinitamente más inteligentes por que nos da acceso instantáneo a toda la fuente del conocimiento colectivo del mundo.  Ellos argumentan que Google es la solución inteligente a un tecnológicamente tonto y obsoleto sistema de bibliotecas. Con Google, podemos recopilar la información más actual a partir de miles de fuentes, con una rapidéz increible. 

En otras palabras: Sí, nosotros damos ojeadas rápidas a la información, pero eso no es necesariamente malo.

5: Google no gana dinero

Google ofrece algunos servicios en línea. Tiene el motor de Busqueda Google, que es el más representativo, Gmail, Google Maps, Google Earth, Google News, Google Talk, Google Docs y Google Calendar, entre otros.También hay populares sitios web propiedad de Google como YouTube, Picasa y Blogger. Todos estos servicios son absolutamente gratuitos. 

Entonces, ¿cómo gana dinero Google? Desde que Google apareció ha existido un rumor persistente de que el modelo económico de la empresa no es de negocio, por lo tanto no tienes fines de lucro. ESO ES UN GRAN MITO.

En 2008, Google ganó casi $ 22 mil millones. El noventa y siete por ciento de los ingresos de la compañía provenían de la publicidad. ¿Cómo lo logran? Google ha desarrollado dos modelos de publicidad muy rentables: Google AdWords y Google AdSense.

AdWords son los anuncios que aparecen en las búsquedas de Google por encima y al lado derecho de los resultados de búsqueda. Están etiquetados como "Enlaces patrocinados". Los anunciantes pueden utilizar AdWords para redactar anuncios cortos y etiquetas con palabras clave. A continuación, Google utiliza algoritmos complejos para encontrar los anuncios más relevantes para determinadas búsquedas en Google. 

El anunciante no paga a Google cada vez que su anuncio se muestra. Se paga sólo cuando alguien hace clic en sus anuncios. Los costos pueden ser tan bajos como 10 centavos de dólar, lo que no es una inversión fuerte para los anunciantes. Pero para Google, todas esas monedas de diez centavos se suman rápidamente. 

AdSense funciona de manera similar, pero los anuncios aparecen en páginas que no son de Google. Si creas un sitio web y quieres ganar un poco de dinero por publicidad, puedes registrarse con AdSense. Google utiliza sus algoritmos para mostrar los anuncios pertinentes a los visitantes del sitio. Cada vez que un visitante hace clic en un anuncio, el anunciante paga a Google desde 10 centavos hasta $20 (a veces más), dependiendo de la popularidad de una determinada palabra clave. Entonces Google le da al propietario del sitio web una pequeña parte de esa tasa. 

Tenga en cuenta que no todos los ingresos son beneficio puro: Después de un año de bajas de inversión y el caos económico general, Google obtuvo ganancias de 4 millones de dólares en 2008. En el último trimestre de 2008, sin embargo, experimentó su primera caída de la historia.

Fuente

Related Posts with Thumbnails