domingo, enero 08, 2012

Contabilidad personal con jGnash


El año pasado junto con otros amigos (Hamer y Marconi) nos apuntamos a recibir un curso de Finanzas para no Financieros en la UPOLI.



En ese curso aprendimos un poco de contabilidad por partida doble, activo, pasivo, capital, etc. Luego intentando implementar los conocimientos recién adquiridos y llevar control de mis finanzas personales busqué un software libre que me asistiera, así encontré: jGnash.


jGnash según Wikipedia:

jGnash es una aplicación libre de gestión de finanzas personales programada en Java.

Entre sus principales características destaca:

- Está basado en transacciones de partida doble (debe y haber)
- Cuenta de ajuste o reconciliación
- Generación de informes o reportes en PDF
- Soporte para múltiples monedas
- Actualizaciones automáticas en línea de tasas de cambio de monedas
- Catálogo de cuentas personalizable
- Interfaz de usuario amigable
- Multiplataforma, es ejecutable en cualquier plataforma que soporte Java (linux y windows)

Su sitio Web, desde el cual se puede encontrar más información o desde el cual se puede descargar, es:

http://sourceforge.net/apps/mediawiki/jgnash/index.php?title=Main_Page

Instalar jGnash

1- Descargar la última versión de jGnash de su sitio Web.
2- Descomprimir el zip

Ejecutar jGnash y crear una nueva base de datos

Desde una consola ejecutar el jar de la siguiente manera (en windows se puede hacer doble clic sobre el ejecutable):

denis@host:~/jGnash$ java -jar jgnash2.jar

Seleccionar del menú Archivo, la opción Nuevo. Y en los siguientes pasos es necesario indicar la ruta y el nombre del archivo a crear, moneda por defecto, otras monedas a ser soportadas, aunque luego se puede ajustar esta configuración, al final se selecciona el catálogo de cuentas inicial que es posible también personalizar.

Ruta y nombre del archivo:


Moneda por defecto de las cuentas:



Seleccionar otras monedas a soportar:


Los catálogos de cuentas disponibles por defecto están en inglés, pero el usuario luego puede crear el suyo propio en español.



Al finalizar ya se tiene un archivo con el catálogo de cuentas inicial y sin ninguna transacción.

Ejercicio simple con jGnash

1. Suponer que a la fecha se tiene una cuenta de ahorro en un banco, con C$ 10,459.45 córdobas
2. En mi cartera del pantalón tengo C$ 350.00 córdobas
3. Suponer ingresos mensuales en concepto de salario de fin de mes por C$ 4,000.00 en 3 meses, estos son depositados al banco.
4. Cada 15 de mes retiro el 75% del salario y ahorro el 25%.
5.En el primer mes he gastado C$ 110.00 córdobas en recargas al celular, en el segundo mes C$ 55.00 y en el tercero C$ 20.00 los cuales pago con cash.
6. Suponer que en el primer mes fuí al cine y pagué C$ 65.00 córdobas con la tarjeta de débito de la cuenta bancaria
7. Generar los informes siguientes para el período registrado: patrimonio o capital neto, balance general, y el estado de resultados o pérdidas y ganancias.

La contabilidad por partida doble, se basa en que el dinero que entra debe haber salido de algún lugar, y el dinero que sale debe entrar en algún lugar. "No hay deudor sin acreedor, ni acreedor sin deudor", entendiendo este principio es fácil usar jGnash.

Para este ejemplo, en el punto número 1 para que en el banco (cuenta Saving en jGnash) ingresen (o se depositen) los C$ 10,459.45 córdobas iniciales de este conteo, es necesario que ese mismo monto salga de otra cuenta (contracuenta), la contracuenta para este punto es básicamente lo que los contadores llaman el balance de apertura o capital inicial (cuenta Opening Balances en jGnash).

Con el botón Registro de la izquierda de la pantalla activada, seleccionar la cuenta Opening Balances, en la parte derecha hay 4 fichas Disminución, Aumento, Transferencia y Ajuste, evidentemente estamos aumentando el capital inicial por lo que es necesario seleccionar la ficha Aumento, el siguiente paso importante es seleccionar la contra cuenta, o sea donde se va depositar el dinero, en este ejemplo en la cuanta de bancos (Savings), luego colocar una breve descripción de la transacción, completar la fecha y el monto:



Dado que se utiliza partida doble, es posible seleccionar la cuenta Savings, para verificar que en efecto el banco tiene un depósito de C$ 10,459.45 córdobas.



Vale destacar que el registro de la transacción no necesariamente tenía que realizarse desde la cuenta Opening Balances, sino que también se pudo haber realizado desde la cuenta Saving y seleccionar como contra cuenta Opening Balances sin alterar el mismo resultado.

El punto número dos del ejemplo también corresponde con un balance de apertura de la caja chica, cash, o en finanzas personales mi cartera. Se puede registrar igual que antes, usando las cuentas Opening Balances y Cash:



Punto número 3, suponer ingresos mensuales en concepto de salario de fin de mes por C$ 4,000.00 en 3 meses, estos son depositados al banco.

Para este ejemplo suponer que cada fin de mes se depositan 4000 en la cuenta Saving, este dinero debe ingresar por algún lado, es evidente que debe ingresar por la cuenta Salary del grupo Income Accounts.



Es fácil usar jGnash como registrador de transacciones contables. En otro momento comparto el ejercicio resuelto completamente.

domingo, diciembre 11, 2011

78.57% en el simulador del examen SCJP - 1.6 de CertPal


Yupi!

Me tomó un poco más de dos horas, 70 preguntas. Resultado: 15 fallas. Lo que resulta en 78.57%, y según la web de Oracle se pasa con 61% con 60 preguntas [1] lo cual significa que ya casi estoy listo, ahora a dar los últimos retoques...



Esta es la web del simulador:

http://www.certpal.com/ExamWeb/content/logon.do


[1]
http://education.oracle.com/pls/web_prod-plq-dad/db_pages.getpage?page_id=41&p_exam_id=1Z0_851

jueves, diciembre 08, 2011

Ejecutar aplicaciones X-Windows en Microsoft Windows sobre SSH hacia GNU Linux


Para cualquier administrador de servidores GNU Linux, hacer administración remota vía SSH es básico para poder controlar de manera remota un servidor. El método más común para esto es usando un servidor SSH y un cliente SSH.

SSH en modo básico permite tener una terminal de comandos remota desde la cual se puede ejecutar cualquier orden (comando, o programa) en el servidor siempre y cuando no se requiera de modo gráfico (X-Windows).

Por ejemplo (de Linux a Linux) para conectarse como el usuario denis en el computador servidor.local se puede hacer:

denis@tamagastad:~$ ssh denis@servidor.local
denis@tamagastad's password:
Welcome to Ubuntu!
Last login: Sat Oct 29 19:30:32 2011
denis@servidor.local:~$

Pero si se requiere lanzar una aplicación en modo gráfico, por ejemplo gedit, se obtendrá un error como este:

denis@servidor.local:~$ gedit

(gedit:25468): Gtk-WARNING **: cannot open display:

Pero si del lado de nuestro cliente SSH ya tenemos un servidor X.Windows corriendo en nuestro Linux (nota: si ya tenemos Gnome o KDE, significa que ya tenemos un servidor X-Windows funcionando) al momento de realizar la conexión SSH con el servidor se puede habilitar X11 forwarding mediante el parámetro -X.

denis@tamagastad:~$ ssh -X denis@servidor.local

Y esto permitirá que se ejecute cualquier aplicación gráfica en el servidor, usando nuestro entorno gráfico local, se puede agregar al final de la invocación del programa un & para que la consola no quede capturada:

denis@servidor.local:~$ gedit &

Ok, todo esto muy bien, pero funciona de Linux a Linux, ¿qué hacer cuando queremos que un usuario con Microsoft Windows ejecute una aplicación con entorno gráfico en el servidor linux? Un cliente SSH no basta, ya que sólo permite acceso a aplicaciones de consola o terminal.

Para esto es necesario instalar un servidor X-Windows en Microsoft Windows y establecer una conexión SSH con X11 forwarding. De esta manera se puede usar MS Windows como una terminal tonta que sólo se encarga de la presentación de las aplicaciones que se ejecutan en un servidor Linux.

Xming es un Servidor X para Microsoft XP/2008/Windows7, yo bajé "Xming-6-9-0-31-setup.exe" gratis de la web oficial de Xming en:

http://www.straightrunning.com/XmingNotes/

PuTTY es un conjunto de programas que permiten entre otras cosas acceder por SSH desde Microsoft Windows a un servidor SSH, he bajado "putty.zip" de la web oficial de PuTTY en:

http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html


Proceder a instalar Xming:


Lanzar la aplicación:

O usar el menú Inicio > Todos los Programas > Xming > Xming y se observará en la barra de tareas un icono que dice Xming Server:0.0

Luego descomprimir putty.zip y ejecutar PUTTY.EXE, antes de realizar la conexión SSH con el servidor, asegurarse de habilitar en putty el redireccionamiento del X11, en el árbol de configuración de la parte izquierda Connection > SSH > X11:



Seleccionar la opción Enable X11 forwarding, y en el cuadro de texto X display location escribir localhost:0 el cual corresponde con la dirección del servidor X Windows XMing recién instalado en MS Windows.

Luego en el árbol de configuración, en la opciones Session es posible establecer una conexión SSH especificando el IP o el nombre de dominio del servidor junto a su puerto.



Putty pregunta el usuario y contraseña:



Si nos conectamos bien, desde la consola de putty es posible ejecutar programas como:

nautilus &
gedit &
evice &

O cualquier programa con interfaz gráfica y el X Server de Windows mostrará esa interfaz usando como Windows Manager el entorno de MS Windows.

martes, noviembre 29, 2011

PHP y Microsoft Access


No soy un fan de la base de datos MS Access, pero cuando en una oficina pequeña hay alguna aplicación legacy hecha en MS Access y se desea que esta sea consultada en una pequeña aplicación Web interna, es fácil usar PHP y ODBC para tal fin.

PHP no soporta de manera nativa el acceso a MS Access, pero si soporta ODBC.

ODBC (Open DataBase Connectivity) es un estándar de acceso a bases de datos que tiene como objetivo permitir acceder a cualquier base de datos desde cualquier aplicación, sin importar qué sistema de gestión de bases de datos está implementada.

Entonces desde PHP se puede acceder a cualquier base de datos soportada por ODBC sin importar que exista un driver nativo para PHP. Aunque OJO: es importante aclarar que si ya existe un driver nativo de PHP para alguna base de datos es mejor usarlo en lugar de usar ODBC.

Para acceder a la base de datos por ODBC desde PHP es posible utilizar un conjunto de funciones como odbc_connect que se puede ver en más detalle en la documentación de PHP:

http://www.php.net/manual/en/function.odbc-connect.php

En este ejemplo, se ha instalado en el equipo MS Windows que contiene la base de datos MS Access, un servidor AppServ (http://www.appservnetwork.com) el cual en un sólo instalador y con un par de clics instala Apache, MySQL y PHP sobre MS Windows.

Luego para acceder a la base de datos de MS Access, primero se creará un Origen de Datos (aka DSN) llamado bd1 desde el Panel de Control de MS Windows, a como se muestra a continuación:


Agregar nuevo DSN de sistema.


Seleccionar el driver MS Access.


Pulsar el botón Seleccionar Base de datos y especificar la ruta a la base de datos.


Finalmente se pueden usar las funciones odbc_connect, odbc_exec, odbc_fetch_array, odbc_close para tener acceso a la base de datos, a continuación un ejemplo simple:

echo "Ejemplo sencillo conexión con acess";


$enlace = odbc_connect('bd1', '', '');

if (!$enlace) {

print "Error al intentar conectar con BD.";

exit();

}


$sql = "SELECT * FROM nombre";

$resultado = odbc_exec($enlace,$sql);


while($fila = odbc_fetch_array($resultado)){

echo "Id: {$fila['id']}";

echo "Nombre: {$fila['nombre']}";

}


odbc_close($enlace);


Al ejecutarlo, si todo sale bien se podrá ver algo similar a esto:


El código de ejemplo y la base de datos se puede descargar de aquí.

viernes, octubre 28, 2011

En honor a John McCarthy creador de LISP


Este es el único archivo que poseeo de la clase en la que estudiamos un poco de LISP en la universidad, el archivo data de: vie 19 oct 2001 15:56:10 CST


> (DEFUN MAYOR (A B C) (PRINT "EL MAYOR ES")

1> ( IF (> A B) (IF (> A C) (PRINT A)

3> (PRINT C)

3> )

2> (IF (> B C) (PRINT B)

3> (PRINT C)

3> )

2> )

1> )


Que descanse en paz!