Actualizador de Archivos (Administrador)

Esta es una aplicación que estoy haciendo para usarla en mi trabajo.

Una de las pegas que tengo, es actualizar todas las versiones de sistemas antiguos en TODOS los PCs de los usuarios… es una tortura la verdad…

Por eso me dio por hacer  esto ;)

La idea era subirlo a BitBucket con Mercurial… pero para variar, me tienen bloqueada la conexión ¬¬

Así que, al menos por ahora, colgaré los archivos en mi SkyDrive.

Como dice el título, esta aplicación tiene 2 partes: Administrador y Cliente.

No pretendo escribir todo, que para eso tienen los fuentes. Esto va para la parte de leer y escribir en json, y leer propiedades de archivos.

Leer JSON

Todos los parámetros de esta aplicación se encuentran en un archivo (Configuraciones.json) El mio es así:

{
	"Configuraciones": {
		"Carpeta_Dropbox": "C:\\dropbox-tmp\\Dropbox\\Public\\",
		"Archivo_json": "Versiones.json",
		"Usuario_Dropbox": "62387943"
	},
	"Sistemas": [
		"CIFIMP", "Expedientes", "Certificados", "Convenios",
		"IQFIMP", "Giro", "OFPA", "Remuneraciones", "Patententes",
		"Tesorería"
	]
}

Tiene 2 campos: Configuraciones donde guardo los datos relevantes, y Sistemas que es un arreglo con todos los sistemas que puedo actualizar.

Para leer esto, desde el load de la aplicación tengo una llamada a función para leer el archivo y traspasarlo a un objeto json:

Private Function read_json_file(archivo As String) As JObject
        Try
            Dim json_txt As IO.StreamReader
            json_txt = IO.File.OpenText(archivo)
            Dim json As New JObject
            json = JObject.Parse(json_txt.ReadToEnd)
            json_txt.Close()
            Return json
        Catch ex As Exception
            Me.salida.Text = ex.ToString
            Return Nothing
        End Try
    End Function 

Recibo la ruta (absoluta) del archivo, lo abro en un StreamReader, y luego lo parseo en un objeto JObject. Ahora, para obtener la información:

Dim json_file As JObject
json_file = Me.read_json_file("Configuraciones.json")
Me.carpeta_dropbox = json_file.Item("Configuraciones").Item("Carpeta_Dropbox")
Me.archivo_json = json_file.Item("Configuraciones").Item("Archivo_json")
Me.usuario_dropbox = json_file.Item("Configuraciones").Item("Usuario_Dropbox")
Me.addCBSistemas(json_file.Item("Sistemas")) 

Para leer el array (que de paso estoy guardando en una columna combobox en una grilla) lo hago así:

Private Sub addCBSistemas(sistemas As JArray)
    Try
        Dim cmb As New DataGridViewComboBoxColumn()
        cmb.HeaderText = "Sistemas"
        cmb.Name = "cmb"
        cmb.MaxDropDownItems = 4
        For Each item In sistemas
            cmb.Items.Add(item.ToString)
        Next
        grilla.Columns.Add(cmb)
    Catch ex As Exception
        Me.salida.Text = ex.ToString
    End Try
End Sub 

Leer propiedades archivos

Esto lo metí dentro de una clase aparte (clase Archivo … xD)

Lo importante es esto Private info As System.IO.FileInfo y ya después es cosa de jugar:

Me.info = My.Computer.FileSystem.GetFileInfo(RUTA_AL_ARCHIVO)
Me.TAMAGNO = Me.info.Length / 1024
Me.CREACION = Me.info.CreationTime
Me.MODIFICACION = Me.info.LastWriteTime
'Para calcular MD5
Public ReadOnly Property getMD5 As String
    Get
        Dim md5 As String = Nothing
        Dim cadena As System.IO.FileStream
        Dim bait As [Byte]()
        Dim md5cryto As New System.Security.Cryptography.MD5CryptoServiceProvider
        cadena = System.IO.File.Open(Me.RUTA, IO.FileMode.Open, IO.FileAccess.Read)
        bait = md5cryto.ComputeHash(cadena)
        cadena.Close()
        md5 = BitConverter.ToString(bait)
        Me.MD5 = md5.Replace("-", "")
        Return Me.MD5
    End Get
End Property

Escribir JSON

Como dije anteriormente, cada info de los archivos lo guardo en un objeto de la clase Archivo, por lo que después recorro un arreglo que tengo y rescato los valores:

For Each a As Archivo In Me.listado
    Dim j As JObject = Me.make_jobect(a)
    If Not IsNothing(j) Then
        jarray.Add(j)
    Else
        Me.salida.Text = "Error al generar JObject"
    End If
Next

'y esta función para llenarlo
Private Function make_jobect(a As Archivo) As JObject
    Try
        Dim job As New JObject()
        job.Add("Nombre", a.NOMBRE)
        job.Add("Ruta", a.RUTA)
        job.Add("Creación", a.CREACION)
        job.Add("Modificación", a.MODIFICACION)
        job.Add("Tamaño", a.TAMAGNO)
        job.Add("MD5", a.MD5)
        job.Add("Url", a.URL)
        Return job
    Catch ex As Exception
        Me.salida.Text = ex.ToString
        Return Nothing
    End Try
End Function 

Y para guardarlo en un archivo

Private Function save_file_versiones(json_string As String) As Boolean
    Try
        Dim archivo As New String(Me.carpeta_dropbox & "\\" & Me.archivo_json)
        If Not Exists(archivo) Then
            Dim file As System.IO.FileStream
            file = System.IO.File.Create(archivo)
            file.Close()
        End If
        My.Computer.FileSystem.WriteAllText(archivo, json_string, False)
        Return True
    Catch ex As Exception
        Me.salida.Text = ex.ToString
        Return False
    End Try
End Function 

Y eso es todo. Obviamente, sl JObject debe pasarse a a texto. La conversión es tan simple como un jobject.toString

La aplicación aquí (lamento no poder subirla a BitBucket … pero bue… tendré que hacerlo desde mi casa ;) )

Publicado en Escritorio, Tutoriales, VB, Windows | Deja un comentario

Mini Entrada ! MongoDB en la nubecilla

Como bien saben, soy un fan de MongoDB, y aunque aún no lo manejo del todo, siempre estoy tratando de conocerlo mejor :D

Estoy haciendo una aplicación de control de versiones para ejecutables de los sistemas de la empresa en la que trabajo.

Y me dió por manejar los datos con Mongo. Me puse a buscar a ver si encontraba un hosting solo para la BD, y encontré 2 (vamos… no busqué mucho ajaja)

El primero es MongoHQ. Tenemos un máximo de  16MB con el plan de juego (para nada serio, solo pruebas)

El otro es MongoLab. Aquí tenemos hasta 240 MB. La creación de la cuenta es super rápido, y en menos de 2 minutos ya tienes tu BD :D

Mi BD

Publicado en MongoDB, Tips | Deja un comentario

Meta: Scala, BlueEyes y MongoDB

En mi colación, leí un artículo que me dejó con cara de WTF ! 8O (what the frak!) y dije: QUIERO HACER ESTO !

Pero solamente entendí menos de la mitad de todo lo que se dice en ese coso. Así que vamos a empezar por parte, ya que este tutorial lo hago para aprender yo mismo :)

Instalar y hacer algo en Scala, BlueEyes, Heroku y lo de Mongo Sobra :) Sigue leyendo

Publicado en Scala, Tutoriales | Etiquetado | Deja un comentario

Conexión Ultra Lenta a Internet en Ubuntu 11.10

Ya no avergüenza decirlo… soy un usuario de Ubuntu :)

Como la mayoría sabe, la última gran Distro Linux que me “cautivó” (por decirlo de alguna forma) fue Pardus Linux. Estuve cerca de 2 años usándola y eso para mi es muuucho tiempo. Fue una de las pocas que me daba todo lo que necesitaba, era segura, estable, rápida, y amiga de KDE como pocas :)

Pero hace unos días atrás se supo que quedaba descontinuada… No es gracia para nadie usar una distro virtualmente muerta. Si bien seguiría funcionando sin problemas, ya no tendría actualizaciones :(

Por eso empecé a buscar nuevas distros. Empecé por Arch… aún no la puedo instalar correctamente… Seguí con ArchBang, que es lo mismo pero con ventanas :D Se instaló bien… pero Pacman 4 me leseaba con los gpg (o pgp ?).

Descargué Opensuse y ni siquiera lo pude bootear… me daba un error así que no pude instalarlo. Al último ya todo rendido instalé Ubuntu para salir del paso.

A lo que iba (xD) la Internet era demasiada lenta… mucho y buscando por google encontré la solución :) con 2 sencillos comandos:

sudo rmmod iwlagn

Con esto se desconecta las redes.

sudo rmmod modprobe iwlagn 11n_disable=1

Con esto desconecta todo, y luego se reinicia.

Debo reconocer que no entiendo del todo qué hace cada comando, pero la cosa es que funcionó :)

Para no hacer esto cada vez que iniciamos, lo agregamos (el segundo comando) en el archivo /etc/modprobe.d/options.conf (que no existe) y yasta :D

Publicado en Tips, Ubuntu | 2 comentarios

The Lion King Rises

No puedo dejar pasar esto…

Y es que me da un escalofrío cada vez que lo veo… incluso mayor que cuando veo el original.

Publicado en Uncategorized | Etiquetado | Deja un comentario

Eliminar credenciales Windows

Un pc aquí en la pega funciona como servidor. Me dio por poner el servidor de MongoDB adentro, cosa que todos entráramos aquí.

Como usuario, tenía “Administrador” y me fijé que NO tenía contraseña. Tonces entré y le puse guardar credenciales porque, se suponía, no necesitaba nada más.

Resulta que SI necesitaba una contraseña… aunque no se por qué… y cuando entraba

Sin acceso a la red

Sigue leyendo

Publicado en Tips, Windows | Deja un comentario

Pequeña aplicación sapea IPs en VB.NET y MongoDB

Resulta que en el trabajo me pidieron hacer un listado con todas las IPs de los PCs para usar el VNC Viewer. No eran muchos, unos 10 (en mi lugar de trabajo), y fue cosa de hacer un excel y listo.

Peeeero, resulta que aquí la red es wi-fi con un dhcp malvado… vez que reinician el router queda la escoba con el listado…

Por eso me dio por hacer una pequeñita aplicación que tomara la IP y el nombre de la máquina de la persona y la guardara en una colección :D así de fácil.

Salto y a picar código :)

Sigue leyendo

Publicado en Aplicación, MongoDB, VB, Windows | Deja un comentario