viernes, 6 de junio de 2014

Instalar CAS en TI-Nspire CX non CAS

La semana pasada me compre una calculadora TI-Nspire CX; estaba todo bien hasta que quería hacer cálculos algebraicos :(.... la verdad nunca tuve antes una Texas Instrument, luego con pena y un poco contrariado vi que esta versión no lo hace, sino hay que comprar la otra CX CAS. (creo que son 30 US$ mas).

Indagando en paginas como las indicadas lineas abajo, entendí que el hardware de ambas calculadoras son iguales solo que una tiene restricciones (software control) para no poder bajar de versión o actualizar a la CAS, y es solo por una estrategia comercial, para suerte mía.

En fin, para liberar esta máquina se tiene que hacer varias cosas entre ellas copiar archivos en el área de Documentos.

1. Se debe instalar TI-Nspire Computer Link para conectar a la PC
2. Asimismo el software para utilizar y navegar por carpetas de la TI TI-Nspire Student Software

3. Para hacer la transformacion se requiere correr nless 3.1, intercambia entre SO inclusive permite tener dos SO.

4. Asimismo nsNandMgr el cual permite eliminar las restricciones al inicio del arranque o instalacion de OS.

5. TNOC para disminuir el tamaño de los SO y quitarle algunas cosas como Boot2.

6. TI-NspireCXCAS-3.1.0.392.tcc el SO que incluye CAS (ojo que este tiene extensión tcc)

En una carpeta aparte se debe tener las carpetas ndless, nlaunch, nsNandMgr y el archivo nlaunch.tco todas estas de los archivos antes mencionados.








7. el archivo TI-NspireCXCAS-3.1.0.392.tcc se debe modificar, primero con el software TNOC quitando Boot2, luego se renombra a phoenic.tns. he incluirlo en la carpeta nlaunch, reemplazar por el anterior. Luego mediante la conexión copiar las primeras 3 carpetas. Se debe ejecutar nsNandMgr para activarla.

8. Reiniciar la TI-Nspire y borrar el SO actual esto con presionando primero "reset" luego las teclas EE+Enter+doc luego sin soltar estas tres ultimas soltar "reset". Entonces se escoge opción 2 y luego 1.

 9. La TI-Nspire ya no tiene SO y esta a la espera del mismo con la barra de avance atorada en el medio, utilizando la conexion se instala el archivo "nlaunch.tco" instalar SO asi:
si sale error no hay problema, entonces comienza a utilizar el SO que esta en phoenic.tns (que tiene CAS). Finaliza y no hay mas errores pasa a nsNandMgr y hay que escojer el SO que tiene CAS en mi caso era BootD, luego se sale con 0.

Luego de ello todo Ok y ya se tiene todas las funciones de CAS en la TI-Nspire CX .






Referencias:

https://github.com/bibanon/android-development-codex/wiki/Nspire-Nlaunch
http://www.omnimaga.org/general-calculator-help/installing-cas-on-ti-nspire-cx-non-cas/60/
https://www.youtube.com/watch?v=brd8q0huPuY

lunes, 28 de enero de 2013

Uso de TortoiseSVN / Subversion

Bueno después de un tiempo, vuelvo para comentarles sobre el uso de este interesante controlador de versiones totalmente para windows.

 Bueno no diré de donde bajarlo pues de seguro ya lo saben (googlea)

La mecánica de SVN en este caso de tortoise es:
  1. Se crea un repositorio. 
  2. Se sacan copia del repositorio (copias de trabajo) 
  3. Desde las copias de trabajo, se actualiza el repositorio, como una nueva versión. 
  4. Se puede sacar desde el repositorio copia de cualquier versión que se tiene almacenada. 
  5. Se puede trabajar en paralelo con una misma versión y luego combinar y resolver conflictos de ambos archivos. 
Detallo cada uno de los pasos con comandos de windows:

  1. Una vez instalado el Tortoise se añadirá al menú contextual las opciones interesantes del mismo. La forma mas segura de crear un repositorio es importarlo, para tal fin se sigue los siguientes pasos: - Se crea una carpeta donde se guardara el repositorio: ejemplo
    "svnEjemplo", Bueno alli se hace menú contextual /TortoiseSVN/Create Repository here.. luego "create folder structure".
    Luego hay que importar los archivos que formaran parte del repositorio. Para ello uno se ubica en la carpeta donde están los archivos y con el menú contextual en /TortoiseSVN/Import...
    Pide como datos la dirección del repositorio en mi caso como esta en el disco D puse
      file:///D:/ejemSVN, se pude añadir un comentario. (ojo son 3 /// para direccionar a disco).
    Una ves importado ya se puede prescindir de los archivos de la carpeta importada, pues todo estara ahora en D:/ejemSVN, inclusive las futuras modificaciones o versiones.
  2. Para poder utilizar los archivos del repositorio uno tiene que realizar un checkout del repositorio para ello se debe crear una nueva carpeta donde se tendrán los archivos de trabajo. ejemplo "proy1", igual con menu contextual SVN Checkout sobre la carpeta creada. en la ventana también se pude indicar la versión que queremos en "Revision", de otro modo sera la ultima o mas reciente. Si todo esta bien obtendremos en "Proy1" todos los archivos y según la versión requerida.
  3. Una ves trabajados los archivos con actualizaciones o nuevos archivos (este ultimo se usa el add)  se realiza una actualización de version con el  menu contextual SVN commit. Ahora cuando hagamos otra copia de trabajo se tendra siempre la ultima version. E inclusive si ya teniamos una copia de trabajo la podemos actualizar con el comendo SVN Update..
  4. El procedimiento descrito anteriormente, es para trabajo secuencial, es decir SVN checkout - Modificaciones - SVN Commit.. / SVNUpdate. Pero que sucede si dos personas hacen cada uno una copia de trabajo y actualizan en paralelo los dos archivos. Ello para el Tortoise indicara un error, pues las versiones no estaran actualizadas. Para resolver ese problema se tiene que combinar (merge) y corregir (resolved), sea de manera manual o automática con Tortoise.
    En mi caso tuve el problema de trabajar un archivo word de manera paralela, para suerte nuestra se tiene que el Word puede hacer el combinado con lo cual nos ahorra bastante trabajo. El procedimiento es el siguiente:
    • Modifican 1
      Modifican 2
    • Commit en 1 - Aceptado los cambios de 1
    • Update en 2 : Muestra error por q el archivo esta desactualizado. Sirve para que se muestre el error
    • Commit en 2 (color rojo archivo) : muestra donde esta los errores para hacer commit; resolver conflictos con doble click en archivo rojo, se abre word con opcion - merge : finalmente solo se tiene que guardar.
    • Resolved... en 2:  Nueva version con los cambios de 1 y 2.
    • Commit en 2 : version final recoge lo de 1 y 2
    • Update 1: para tener la ultima version para 1 tambien











martes, 14 de junio de 2011

MPICH2 - Qdevelop/QT C++

Esta librería útil para procesamiento en paralelo,
se detalla el procedimiento para echarlo andar, ahora con resultados interesantes:

1. Instalar el programa correcto de mpich , la versión propuesta o actual todavía tiene problemas con la librería mpi.lib.

2.Copiar los archivos lib a la carpeta del \\Qt\4.3.2\lib

3. Lamarlos desde el compilador en mi caso uso QDevelop y tengo adicionar a la variable

INCLUDEPATH += "c:\Program Files\MPICH2\include"
LIBS += -lmpi

4. Compilar linkear y todo bien para el caso del QT se tiene estos:

g++ -c -O2 -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -I"e:\Qt\4.3.2\include\QtCore" -I"e:\Qt\4.3.2\include\QtCore" -I"e:\Qt\4.3.2\include\QtGui" -I"e:\Qt\4.3.2\include\QtGui" -I"e:\Qt\4.3.2\include" -I"..\..\..\Program Files\MPICH2\include" -I"e:\Qt\4.3.2\include\ActiveQt" -I"release" -I"." -I"e:\Qt\4.3.2\mkspecs\default" -o release\pi.o src\pi.cpp

g++ -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc -Wl,-s -Wl,-subsystem,console -mthreads -Wl -o "release\Multi.exe" release\pi.o -L"e:\Qt\4.3.2\lib" -lmpi -lQtGui4 -lQtCore4

Luego de muchos intentos y problemas como que el printf( del C++ no funciona correctamente y además detiene la ejecución del MPI (???) conseguí el código correcto para correr el calculo de pi.
Codigo de Calculo de Pi#include 
#include
#include
#include "math.h"

int main(int argc, char *argv[])
{
int n, myid, numprocs, i;
double PI25DT = 3.141592653589793238462643;
double mypi, pi, h, sum, x;
double starttime, endtime;

MPI_Init(&argc,&argv);
MPI_Comm_size(MPI_COMM_WORLD,&numprocs);
MPI_Comm_rank(MPI_COMM_WORLD,&myid);
while (1) {
if (myid == 0) {
fprintf(stdout,"Enter the number of intervals: (0 quits) ");
fflush(stdout);
//qDebug() << "Enter the number of intervals: (0 quits) ";
scanf("%d",&n);
}
starttime = MPI_Wtime();

MPI_Bcast(&n, 1, MPI_INT, 0, MPI_COMM_WORLD);
if (n == 0)
break;
else {
h = 1.0 / (double) n;
sum = 0.0;
for (i = myid + 1; i <= n; i += numprocs) {
x = h * ((double) i - 0.5);
sum += (4.0 / (1.0 + x*x));
}
mypi = h * sum;
MPI_Reduce(&mypi, &pi, 1, MPI_DOUBLE, MPI_SUM, 0,
MPI_COMM_WORLD);
endtime = MPI_Wtime();
if (myid == 0){
fprintf(stdout,"Pi es = %lf y el error es %lf ", pi, fabs(pi - PI25DT));
fprintf(stdout,"el tiempo fue %f seg\n",endtime-starttime);
fflush(stdout);}


}
}
MPI_Finalize( );
return 0;
}


Asimismo para poder ejecutarlo en paralelo en las diferentes opciones se usa el mpiexec asi:
Usos del mpiexec
#Correr en la misma máquina 10 procesos
mpiexec -n 10 pi.exe

#Correr en otro maquina n procesos
mpiexec -n 10 -host nombrehost pi.exe

#Correr en varias maquinas n procesos
#se indica el archivo hosts.txt con los nombre de las maquinas en el formato
#nombredelhost1:5
#nombredelhost1:4
#la suma de nro de procesos distribuidos deberia ser n
mpiexec -machinefile hosts.txt -n 9 pi.exe

#Esta sirve para correr 5 casos de *.exe. en las maquinas listadas en hosts.txt
#se tuvo que añadir el entorno pues el cplex requiere ubicacion del archivo de entorno.
mpiexec -env CPLEXLICDIR E:\ -machinefile hosts.txt -n 5 calc2.exe

Se Alumbra la vida!!



Quisiera que la vida aprenda
El verso que voy a contar
Se trata de un sueño posible
Conciencia de amor a recuperar
Soñé que paseábamos libres
Sentí que, no estábamos solos
Que todo el mundo se puso a cantar
Y que así muy juntos, armaban acordes de paz

Que nuestra canción
Se elevaba hacia el futuro
Que el cielo era nuestra profunda verdad
Soné que los vientos eternos y activos
Soplaban al centro de la humanidad
Y así la inocente sonrisa de un niño
se vuelve cada día un Sol matinal
que su hambre se acaba, por fin en este siglo
se alumbra la vida, la vida , vida

Se alumbra la vida, se alumbra la vida
Quisiera que la vida aprenda el verso que voy a cantar
Se alumbra la vida, se alumbra la vida
Se trata de un sueño posible, conciencia de amor a recuperar
Se alumbra la vida, se alumbra la vida
Que se alumbre la vida, se alumbre la vida, vida
Se alumbra la vida, se alumbra la vida

viernes, 1 de octubre de 2010

Firmar y cifrar correo o informacion con GnuPG

Idea general:

Se utiliza firma digital para certificar que el que envia el correo es la persona indicada, no hay suplantacion. asimismo para cifrar archivos (correos)
la firma digital esta publicada en internet y es generada como texto cifrado (complejo), en internet por si se requiere descargar o se olvido uno.
El cliente de correo debera verificar y comparar con la firma publica (privada en caso de cifrado) almacenada en la maquina para mostrar los correos enviados por otra persona.
asimismo el programa desencriptador (seahorse kgpg etc, gpg4win) revisara las firmas (publicas o privadas) instaladas en la maquina para poder abrir los archivos cifrados.



Linux tiene gpg por default
el programa interesante es seahorse (equivalente menor a gpg4win)
te permite general las firmas digitales para cualquier usuario.

Este se puede configurar en el correo para cifrar o firmar se necesida el ID.

pasos:
1. Crear una firma con seahorse, pide clave todo por default. igual para gpg4win
2. Escojer esa opcion en seguridad de correo en evolution (sera igual en el outlock?)
3. en linux o en windows ya se puede cifrar y firmar cosas ejemplo un archivo excel o una carpeta el resultado tendra extension
*.asc o gpg (el primero en correos (pgp) y el segundo para cosas desde el desktop) Click derecho en ambos.
4. la firma publica se debe compartir para poder activar el envio de correos a los destinatarios.
5. para tener una clave privada o todas las claves se debe exportar desde seahorse (igual se puede importar de alli o desde gpg4win)
6. Se requiere clave privada para poder cifrar correos y archivos para un usuario cualquiera.(???)


Nota: En gpg4win no se debe instalar Kleopatra para poder tener facilidad en click derecho.
hay que exportar la clave privada con comando DOS en windows ver internet


Pendientes:
. investigar como configurar en Outlock el envio y recepcion de correos cifrados y seguros
. como firmar sitios para permitir descargar ejemplo: debian

miércoles, 28 de abril de 2010

Compilar aplicaciones con glpk en Debian y windows7

Para los desarrolladores y usuarios que estan interesados en Programacion lineal, y software libre se tiene la opcion glpk para linux y glpk para windows

La idea del presente blog es explicar como consegui compilar mi primera aplicacion incluyendo la libreria glpk tanto en debian lenny como en Windows7.

para lenny la instalacion de glpk es sencilla, basta con usar Synaptic e instalar todo lo que tenga que ver con glpk (incluyendo libglpk-dev)

en windows se tiene que bajar el setup de gplk.

Ahora viene lo interesante con los programas compiladores y enlazadores, en mi caso usare Qdevelop tanto para windows como para linux.
antes de todo se debe instalar Qt4 en ambos sistemas, de eso nos ocuparemos en otro blog. Solo comentare que Qdevelop en linux se direcciona automaticamente al la instalacion de Qt realizada, mientras que en windows hay que compilar Qt y luego direccionar a las carpetas Qt creadas.

Si tenemos el mismo codigo siguiente para Lenny y Win

#include "stdio.h"
#include "stdlib.h"
#include "glpk.h"

int main(void)
{     glp_prob *lp;
int ia[1+1000], ja[1+1000];
double ar[1+1000], z, x1, x2, x3;
s1:   lp = glp_create_prob();
s2:   glp_set_prob_name(lp, "sample");
s3:   glp_set_obj_dir(lp, GLP_MAX);
s4:   glp_add_rows(lp, 3);
s5:   glp_set_row_name(lp, 1, "p");
s6:   glp_set_row_bnds(lp, 1, GLP_UP, 0.0, 100.0);
s7:   glp_set_row_name(lp, 2, "q");
s8:   glp_set_row_bnds(lp, 2, GLP_UP, 0.0, 600.0);
s9:   glp_set_row_name(lp, 3, "r");
s10: glp_set_row_bnds(lp, 3, GLP_UP, 0.0, 300.0);
s11: glp_add_cols(lp, 3);
s12: glp_set_col_name(lp, 1, "x1");
s13: glp_set_col_bnds(lp, 1, GLP_LO, 0.0, 0.0);
s14: glp_set_obj_coef(lp, 1, 10.0);
s15: glp_set_col_name(lp, 2, "x2");
s16: glp_set_col_bnds(lp, 2, GLP_LO, 0.0, 0.0);
s17: glp_set_obj_coef(lp, 2, 6.0);
s18: glp_set_col_name(lp, 3, "x3");
s19: glp_set_col_bnds(lp, 3, GLP_LO, 0.0, 0.0);
s20: glp_set_obj_coef(lp, 3, 4.0);
s21: ia[1] = 1, ja[1] = 1, ar[1] = 1.0; /* a[1,1]  = 1 */
s22: ia[2] = 1, ja[2] = 2, ar[2] = 1.0; /* a[1,2]  = 1 */
s23: ia[3] = 1, ja[3] = 3, ar[3] = 1.0; /* a[1,3]  = 1 */
s24: ia[4] = 2, ja[4] = 1, ar[4] = 10.0; /* a[2,1] = 10 */
s25: ia[5] = 3, ja[5] = 1, ar[5] = 2.0; /* a[3,1]  = 2 */
s26: ia[6] = 2, ja[6] = 2, ar[6] = 4.0; /* a[2,2]  = 4 */
s27: ia[7] = 3, ja[7] = 2, ar[7] = 2.0; /* a[3,2]  = 2 */
s28: ia[8] = 2, ja[8] = 3, ar[8] = 5.0; /* a[2,3]  = 5 */
s29: ia[9] = 3, ja[9] = 3, ar[9] = 6.0; /* a[3,3]  = 6 */
s30: glp_load_matrix(lp, 9, ia, ja, ar);
s31:  glp_simplex(lp, NULL);
s32:  z = glp_get_obj_val(lp);
s33:  x1 = glp_get_col_prim(lp, 1);
s34:  x2 = glp_get_col_prim(lp, 2);
s35:  x3 = glp_get_col_prim(lp, 3);
s36:  printf("\nz = %g; x1 = %g; x2 = %g; x3 = %g\n", z, x1, x2, x3);
s37:  glp_delete_prob(lp);
return 0;
}/* eof */


En ambos sistemas (Debian y Win) solo nos queda crear un nuevo proyecto vacio en Qdevelop, luego incluir un archivo sample.cpp con el codigo lineas arriba, glpk.h deberia ser llamado automaticamente, en ambos sistemas si esta instalado correctamente glpk, en todo caso se detalla la direccion donde esta instalado en propiedades del proyecto (en en otras palabras en el archivo Makefile en la seccion INCPATH = -I/C:\Program Files\GnuWin32\include).

luego para enlazar la libreria de manera implicita (esta manera pedira los *.dlls requeridos o los *.so en linux para correr la aplicacion, los cuales deben ir junto con el programa) en linux tuve que añadir en las propiedades del proyecto la libreria glpk entonces eso en Makefile.

LIBS          = $(SUBLIBS)  -L/usr/lib -lglpk -lm -lQtGui -lQtCore -lpthread



y en windows se tuvo que añadir la libreria se añade de igual manera solo que ahora se le dice glpk.lib, si no la encuentra poner la libreria en la direccion del codigo (Makefile-Release).

LIBS        =        -L"d:\Qt\4.3.2\lib" glpk.lib -lQtGui4 -lQtCore4


Luego de compilar y correr sin errrores se obtiene lo siguiente en la ventana de Depuracion o Salida.

Depurando...

(gdb) (gdb) (gdb) (gdb) (gdb) Starting program: /home/eangelino/glpkxxx/glpkxxx
[Thread debugging using libthread_db enabled]
* 0: objval = 0.000000000e+00 infeas = 0.000000000e+00 (0)
* 2: objval = 7.333333333e+02 infeas = 0.000000000e+00 (0)


OPTIMAL SOLUTION FOUND

z = 733.333; x1 = 33.3333; x2 = 66.6667; x3 = 0

Program exited normally.



Actualizacion: En windows luego de instalar el glkp solo ejecutables se debe incluir en el Qt, en propiedades del proyecto:

INCLUDEPATH : "C:\Program Files\GnuWin32\include"
LIB : "C:\Program Files\GnuWin32\lib\glpk.lib"

martes, 2 de febrero de 2010