23 marzo 2008

Mandriva, compartir archivos con Windows


Algo que suele suceder es que a uno le gusta un sistema determinado pero a otra persona no, y en su maquina tiene Windows (solo por el messenger y el iTunes), y en mi caso tengo Mandriva.
Y hay veces que se necesita o se quiere compartir archivos o directorios(carpetas) desde Mandriva a otros sistemas por medio de la red. Para ello esta Samba, éste es un servidor de archivos que permite compartir los mismos con sistemas basados en Unix(que tengan samba instalado) y Windows.
En Mandriva nunca me puse en la tarea de ver como se hacia para compartir archivos, hasta hoy, y me ha resultado un poco pesado al principio(como siempre por no leer la documentación), pero ahora que me ha salido perfecto, veo hacia atras y es un juego de niños...
Teniendo como referencia Mandriva 2008, en el Centro de Control Mandriva se tiene la opción Recursos compartidos de red, allí tienen varias opciones, se dirigen a Administrar la configuración de Samba.
Existen tres solapas: Compartir archivos, Impresoras, y Usuarios Samba.
Lo primero que se debe hacer es definir que usuarios van a acceder a nuestros archivos, para ello se dirigen a Usuarios Samba, dentro de esta solapa a la derecha tienen las opciones Agregar, Modificar, Quitar y Userdrake, ahora vamos a agregar un usuario. Cuando hacen click en Agregar aparece una pantallita, si hacen click en la lista de nombre de usuario podran ver dos: nobody y sunombredeusuario, vamos a elegir nobody y en contraseña le dejamos vacio.
Lo segundo, dentro de la primer solapa, Compartir archivos, es posible que ya les aparesca una "comparticion" llamada homes. No le presten atención, hacen click en Agregar, les va a aparecer una pantallita, en la misma puden poner el nombre del recurso que van a compartir, una descripción, y finalmente el directorio (carpeta) que van a compartir. Al lado de Directorio les aparece "abrir" si hacen click van a poder navegar hasta la carpeta que decean compartir, una ves que han llegado hasta el directorio a compartir le dan click en Aceptar. Hecho eso, vuelven a pantallita de agregar recurso, le dan a aceptar, y en la pantalla original les va a aparecer el nuevo recurso compartido.
Finalmente hay que otorgar que permisos se van a dar a ese recurso.
hacen un click sobre el recurso compartido, y le dan click a Modificar, les aparece una pantallita de configuración:
- en Navegable eligen yes(si)
- en Público eligen yes(si)
- Hacen click en User options, y a: Lista de Lectura, Usuarios Administradores, y a Usuarios Validos le llenan con "nobody".

Dan a aceptar y listo, eso es todo, si desde una computadora con windows prueban acceder a su computadora con Mandriva a traves de la red verán el nuevo recurso compartido, y podran navegar por el direcotrio, copiar, e inclusive reproducir videos o mp3 en caso de tenerlos...

¿Que se consigue con todo esto?(en el orden que se ha descripto):
- Dan de alta a un usuario "nobody", que permite que cualquier computadora con Windows pueda acceder sin necesidad de login a sus recursos compartidos (eso es bastante inseguro, pero es muy común dentro de una red de dos ordenadores en una casa).
- Comparten un recurso a traves de una interfaz sencilla de usar, contralizada y modificable (luego de que lo han hecho pueden ver que es muy sencillo compartir un directorio, si necesitan ver que esta compartido y que no se dirigen al mismo lugar, y siempre tienen la opción de Agregar, Modificar y Quitar los recursos que quieran compartir).
- Dan permisos a distintos usuarios (primero deben estar Agregados en Usuarios Samba), para que puedan acceder de una u otra forma a sus archivos (esto es lo mejor, con una interfáz grafica, y fácil de entender pueden administrar sus recursos compartidos de distintas formas para distintos usuarios).
Recuerden que siempre pueden hacer lo mismo desde una consola, entrando a ciertos archivos de configuración y modificando los mismos, pero la idea era mostrarles una forma gráfica y fácil de usar.

Eso es todo, espero les sea de utilidad (a mi me ha servido... y de mucho) y lo aprovechen.

Saludos, que estén bien.

Johny.

Tip: Si por ejemplo compartieron el directorio /home/nombredeusuario/Videos si van su carpeta HOME verán que el ícono de la carpetita de "Videos" ahora aparece con un pequeño gráfico de un enchufe, eso implica que es un recurso compartido.

22 marzo 2008

Mozilla Firefox y openSUSE


Hace poco estuve probando una distribución bastante famosa, openSUSE 10.3, derivada de la Novell SLED, conforma un equilibrio bastante bueno entre software propietario y lo libre.
Navegando un poco, con Firefox, me dí con que no podia intalar DownThemAll(una extensión para bajar archivos rapidamente) si no tenia la versión 2.0.0.8 en adelante de este navegador...
En Mandriva me resultaba fácil, cada ves que le daba a actualizar el sistema, el firefox también se actualizaba sin ninguna intervención de mi parte. En SUSE no es asi, y el problema venia de los repositorios.
En openSUSE se posee una especial organización en el tema de los repositorios, si se dirigen a Yast (vendria a ser como Centro de Control Mandriva), en "Software" encontrarán una opción llamada Community Repositories, la misma les permite elegir que repositorios desean activar y utilizar para instalar y/o actualizar su sistema. Entre esas está openSUSE BuildService - Mozilla, tildandole y dando a finalizar les agregará los repositorios para instalar y tener las ultimas versiones del software Mozilla como Firefox, Thunderbird o SeaMonkey.
Una vez hecho esto, pueden ir a "Instalar/Desinstalar Software" y tipear "firefox" hecho ello les aparecerá los paquetes de firefox y en que versión le tienen, seguramente la letra del mismo estará en azul, esto implica que hay una nueva versión, click derecho en los que estén en azul(son dos), le dan a actualizar, y "finalizar", si abren firefox nuevamente verán que estará en su ultima versión.

Saludos, que estén bien.

Johny.

14 marzo 2008

Hola Mono! con iPhone

El conocidicimo mobile phone de Apple, empresa creadora de las Mac, iTunes, MacOSX, entre otras cosas, es capas de correr aplicaciones creadas en linux con Mono.
Para los que no conscan Mono es la plataforma libre desarrollada por Miguel de Icaza que es el equivalente del framework .NET, tan famoso y criticado en las plataformas Windows. Con este se pueden ejecutar los fuentes desarrollados bajo C# (C sharp) que es uno de los lenguajes compatibles con .NET.
C# tiene total compatibilidad bajo Mono, Visual Basic .Net tambien tiene una gran compatibilidad aunque no llega al 100%.
En el video que les dejo se puede ver la ejecución de programas en C# con el framework Mono corriendo en el iPhone.
Un interesante video que muestra que se puede desarrollar en Linux incluso bajo la plataforma .NET.


Fuente: ElCodigoK

Espero les resulte interesante, hasta pronto, que estén bien.

Johny.

07 marzo 2008

Ubuntu... te habla


En el blog de una amiga ha aparecido una nota muy interesante, o al menos entretenida.
Mediante un programa, el sistema Ubuntu adquiere la capacidad de hablarte.
Con más detalle pueden leer la nota en el siguiente enlaze... que lo disfruten!

Ubuntu... te habla...!

Hasta pronto, que estén bien.


Johny.

06 marzo 2008

Gambas - Leer un XML


Bue, lo prometido es deuda, aqui le dejo una pequeñisima reseña con un pequeñisimo y sencillo ejemplo de como pueden leer el archivo xml que se generó en la nota anterior, sobre escritura de XML con Gambas.
Un par de tips que olvidé comentar sobre este tema son los siguientes:
- Gambas utiliza una "libreria" de nombre libxml, adaptada a Gambas por el Sr. Daniel Campos Fernandez (puedo equivocarme si es asi dejen un comentario y corrigo esta entrada) para poder procesar los archivos XML.
- La implementación por medio de esta libreria (y de Gambas) puede parecer un poco larga, pero es muy sencilla de entender. Además recuerden que Gambas es un leguaje Orientado a Objetos, por lo que se puede implementar en "clases" y por medio de "métodos" y haciendo uso de "polimorfismo" se pueden crear aplicaciones bastante robustas para luego solo mandar "mensajes" a las mismas para que hagan todo el trabajo ellas solas. Esto implica que en un principio tengan que escribir (copiar, pegar y modificar) un poco mas de código que en otros lenguajes, pero son solo las bases, luego podran re-utilizar todo para distintos propositos haciendo uso de características de Orientado a Objetos.
- Tanto este, como el anterior ejemplo estan escritos para Gambas2, no le he probado en versiones anteriores.
- Este ejemplo hace uso del archivo "envio.xml" generado en el ejemplo anterior y que se encuentra en el directorio (carpeta) HOME de su usuario ("/home/SUNOMBREDEUSUARIO/envio.xml").

Para el ejemplo que les propongo tienen que crear un nuevo proyecto, tildar el enlaze para hacer uso del complemento XML.
Una vez creado el proyecto, agregan:
- Un TreeView (Vista de Arbol) que se encuentra en "Form" (cuarta fila, tercer item), y le cambian el nombre a "arbol".
- Un Button (Botón), que le cambian el nombre a "btnAplicacionCerrar".

Hacen doble click sobre el FORMULARIO para ir a la parte de código del mismo, luego borran todo lo que haya en la pantalla de codificación. Copian y pegan el código que les dejo a continuación.

El código se encuentra comentado (todo lo que esta en una LINEA despues del ' es un comentario) y hago uso de estructuras básicas de cualquier lenguaje. Por lo cual no creo necesario explicar en detalle el proceso que realiza.
Ejemplo de Lectura de un Archivo XML:



' Gambas class file

PUBLIC SUB _new()

END

PUBLIC SUB Form_Open()

DIM rdorecorrido AS Boolean = FALSE
DIM recorrido AS Boolean = TRUE
' Apertura de archivo
DIM xml AS XmlReader ' Declaración
xml = NEW XmlReader ' Instanciación
TRY xml.Open(User.Home & "/envio.xml") ' Apertura del archivo.
IF ERROR THEN
Message.Error("No se pudo abrir el archivo xml") ' Si hay algun error mostramos un mensaje amigable al usuario
RETURN
ENDIF
' Recorrido de archivo
TRY xml.Read() ' Se lee en el archivo, cada lectura es un avance en el nodo del archivo

DO WHILE recorrido = TRUE ' Mientras la var recorrido sea V hacer:
IF xml.Node.Type = XmlReaderNodeType.Element THEN ' Si el tipo de Nodo es igual a un Element(=1) entonces:
IF xml.Node.Name = "envios" THEN ' Si el nombre del Nodo es "envio" entonces:
RellenaArbol(xml)
rdorecorrido = TRUE
ENDIF
ENDIF
' Lectura del siguiente nodo
TRY xml.Read()
IF ERROR THEN
Message.Error("Se ha producido un error en el recorrido del archivo")
RETURN
ENDIF
' Si se llega al final del archivo se debe detener el DO WHILE
IF xml.Eof THEN
recorrido = FALSE
ENDIF
LOOP

IF rdorecorrido = FALSE THEN
Message.Error("El xml no contiene datos de transaccion")
ENDIF
' Cierre de archivo
TRY xml.Close()
END

PUBLIC SUB RellenaArbol(xml AS XmlReader) ' Aqui se va a rellenar el "arbol"

DO WHILE TRUE
TRY xml.Read() ' Se lee el siguiente nodo
IF ERROR THEN RETURN

IF xml.Node.Type = XmlReaderNodeType.Element THEN
IF xml.Node.Name = "libro" THEN ' Si el nombre del nodo es "libro" entonces llamamos a "RellenaItem"
RellenaItem(xml)
ENDIF
ELSE
IF xml.Node.Name = "envios" THEN ' Si el nombre del nodo es "envios" entonces hemos terminado la etiqueta de envios
IF xml.Node.Type = XmlReaderNodeType.EndElement THEN BREAK ' Si es un "elemento final" => salimos
ENDIF
ENDIF
LOOP

END

PUBLIC SUB RellenaItem(xml AS XmlReader)

DIM Limite AS Integer
DIM sNodo AS String

TRY xml.Read()
IF ERROR THEN RETURN
DO WHILE TRUE
IF xml.Node.Type = XmlReaderNodeType.Element THEN
SELECT CASE xml.Node.Name ' Estructura "Segun" o "Case", reemplaza a un "if" anidado con ciertas particularidades
CASE "id_libro"
TRY xml.Read()
TRY Arbol.Add(sNodo & "-id_libro", "Identificación del Libro: " & xml.Node.Value, NULL, sNodo) ' Se agrega un item con el valor de id_libro
CASE "nombre_libro"
TRY xml.Read()
TRY Arbol.Add(sNodo & "-nombre_libro", "Nombre del Libro: " & xml.Node.Value, NULL, sNodo)
CASE "editorial"
TRY xml.Read()
TRY Arbol.Add(sNodo & "-editorial", "Editorial: " & xml.Node.Value, NULL, sNodo)
CASE "genero"
TRY xml.Read()
TRY Arbol.Add(sNodo & "-genero", "Género: " & xml.Node.Value, NULL, sNodo)
END SELECT
ELSE
IF xml.Node.Name = "libro" THEN BREAK ' Si llegamos al final de la etiqueta libro, entonces se rompe secuencia
ENDIF
TRY xml.Read()
IF ERROR THEN BREAK
LOOP
END

PUBLIC SUB btnAplicacionCerrar_Click()

ME.Close ' Si hacen click sobre el boton "Cerrar" entonces este comando nos cierra la pequeña aplicación.

END


Espero les sea útil y les haya ayudado en algo.
Hasta pronto, que estén bien.

Johny.

01 marzo 2008

Gambas - Escribir un XML


Los archivos XML forman hoy en dia un estandar aceptado globalmente para la transferencia de información.
Es de libre uso, cumple especificaciones, y es independiente tanto del lenguaje como de la plataforma.Esto quiere decir, que mediante este formato pueden comunicarse sistema hechos en distintos lenguajes y que corran sobre distintas plataformas.
Ya que tanto Gambas como Java me parecen lenguajes muy interesantes, poderosos y de facil aprendizaje; voy a aportar mis escasos conocimientos para que queden plasmados en este blog.

Bien, en esta oportunidad vamos a ver algo de Gambas respecto al XML.
Gambas posee distintos Componentes, entre ellos tenemos el de Programción XML. El mismo se compone de:

  • gb.xml
  • gb.xml.xslt
  • gb.xml.rpc

El primero cuenta con las siguientes clases:

  • xmldocument
  • xmlnode
  • xmlreader
  • xmlreadernodetype
  • xmlwriter

Ejemplo:

Se tiene una pequeña librería, y recientemente cuanta con internet y abrió un sucursal en un pueblo cercano. Se decea enviar por internet los datos de los nuevos libros que hayan ingresado para que la sucursal este al tanto de las novedades.
Supongamos que se tiene el siguiente esquema


Y se desea enviar a la sucursal solamente los datos correspondientes a dos libros nuevos que entraron en el dia.
En este caso el sistema que posea la librería deberia poder generar un pequeño archivo xml, y se pueda transmitir por internet para que la sucursal absorba esa información.
Definicion de Archivo
Nuestro archivo tendria la siguiente definición (sin los *, les puse porque sino no se mostraba bien):

<*?xml version=”1.0”?>
<*envios>
<*transaccion_id>115451
<*transaccion_tipo>1
<*libro>
<*id_libro>1235487
<*nombre_libro>odisea
<*editorial>anaya
<*genero>clasica
<*/libro>
<*/envios>

Hecho esto, procedemos a escribir el codigo fuente para escribir esa informacion en un archivo.
Creamos un proyecto por consola, que haga referencia a gb.xml
Dentro del main escribimos el siguiente codigo:

DIM xml AS XmlWriter
xml = NEW XmlWriter

xml.Open("", TRUE)
xml.StartElement("envios")
xml.Element("transaccion_id", "115451")
xml.Element("transaccion_tipo", "1")
xml.Element(“transaccion_fecha” , “20080228”)
xml.StartElement("libro")
xml.Element("id_libro", "1235487")
xml.Element("nombre_libro", "odisea")
xml.Element("editorial", "anaya")
xml.Element("genero", "clasica")
xml.EndElement()
xml.EndElement()
PRINT xml.EndDocument()

Primero, se declara y se instancia un XmlWriter en “xml”, luego abrimos un archivo xml, y comienza su escritura.
StartElement, seria la etiqueta de inicio
Element, seria el elemento en si, pero cuando se trata de una estructura simple como por ejemplo “1235487”, entonces se puede resumir el StartElement, Element y EndElement en una sola linea colocando primero la etiqueta, y luego el contenido de la etiqueta, entonces quedaria “xml.Element("id_libro", "1235487")”
En el final, el PRINT xml.EndDocument, nos mostrará por consola la salida del documento xml.

Esta es con propósito de ver como quedaria, sin embargo debemos cambiar un par de cositas para que el código cree un archivo xml con la estructura creada.

xml.Open(User.Home & "/envio.xml", TRUE)
...
xml.EndDocument()

En el Open, agregamos referencia a un archivo físico para que lo cree, y en el EndDocument le quitamos en PRINT.
De esta forma el EndDocument generará el archivo xml.
Eso es todo, si van a su directorio Home, verán el archivo creado.
Queda para la siguiente entrega la absorción de un documento xml.

Hasta pronto, que estén bien.


Johnyx.