lunes, 10 de marzo de 2014

Posted by Unknown On 14:46
Esta entrada tiene por objeto explicar como podemos vincular una base de datos MySQL a un proyecto con .NET.

Paso 1:
Necesitamos el conector MySQL. Y lo encontramos en la página web de MySQL. Actualmente, se encuentra el conector NET 6.8.3 y se puede descargar aquí.

No vamos a meternos en más detalles, simplemente se ejecuta el instalador.

Paso 2:
Necesitamos incorporar las liberarías dll a nuestro proyecto. Y esto se realiza a través de las referencias del proyecto. Esto se realiza seleccionando las opciones Project -> Add Reference



Paso 3:
En mi caso, la aplicación es para escritorio, pero la base de datos se localiza en un servidor remoto, así que vamos a utilizar la misma metodología que un sitio web. Agregamos a nuestro proyecto un app.config, que permitirá al administrador del servidor, adecuar las propiedades de conexión a la base de datos.



Lo importante de esta imagen, son las siguientes líneas:

  <appSettings>
    <add key ="rutadb" value ="Database=sinafi; server=localhost; user id=root; password=k71l6nCHpqY1"/>
  </appSettings>

<appSettings> es la declaración para el entorno y configuración de nuestra aplicación. Aquí utilizamos variables que pasan como parámetros: key y value

key es el identificador que vía programación vamos a utilizar.
value es el valor del identificador.

Los valores, son los mismos que debe identificar nuestra base de datos MySQL:
database: Nombre de la base de datos
server: Ubicación del servidor (dirección ip)
userid: Usuario de la base de datos
password: Constraseña de acceso a la base de datos


Paso 4:
Realizamos la conexión a la base de datos

Dim MySQLConnString As String = Configuration.ConfigurationSettings.AppSettings("rutadb").ToString

Public MySQLConn As MySqlConnection = New MySqlConnection(MySQLConnString)

MySQLConnString es la cadena de texto para la conexión a la base de datos, identificamos a través de la clase Configuration, los parámetros de configuración con la variable "rutadb"

Ejemplo:


Imports MySql.Data.MySqlClient Imports System.Data Public Class ClassConection Dim MySQLConnString As String = Configuration.ConfigurationSettings.AppSettings("rutadb").ToString Public MySQLConn As MySqlConnection = New MySqlConnection(MySQLConnString) Private Function Probarconexion() As Boolean Dim value As Boolean = False Try MySQLConn.Open() MySQLConn.Close() value = True Catch ex As Exception value = False MessageBox.Show("Error de conexión a la base de datos." & vbCrLf & "Este error impide continuar con las operaciones del sistema." & vbCrLf & "La aplicación se cerrará!!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error) End End Try Probarconexion = value End Function Public Sub DataSQLSentence(ByVal sSQL As String) Try If (Probarconexion()) Then 'Declaración de variables de conexión propias de SQL Dim myCommand As New MySqlCommand(sSQL, MySQLConn) MySQLConn.Open() myCommand.ExecuteReader() End If Catch ex As Exception MessageBox.Show(ex.Message, "DataSQLSentence", MessageBoxButtons.OK) Finally MySQLConn.Close() End Try End Sub End Class

viernes, 7 de marzo de 2014

Posted by Unknown On 13:27
Maestría en Ciencias Computacionales y Telecomunicaciones

Tópicos Avanzados de Seguridad Computacional

Códigos maliciosos, virus y otras amenazas - CC03-09-01
Mejores prácticas para el diseño de redes TCP - CC03-09-02
Tipos de control de acceso de sistemas operativos - CC03-09-03
Posted by Unknown On 12:19
Maestría en Ciencias Computacionales y Telecomunicaciones

Computación Móvil

Programación Android - CC03-10-01
Manipulando propiedades de formato - CC03-10-02
Utilizando instrucciones java - CC03-10-03
Diseño de una aplicación móvil - CC03-10-04



jueves, 6 de marzo de 2014

Posted by Unknown On 9:50
Para que tu documento en PDF repita encabezados (con imagen) y pies de página te comparto el siguiente código:

Public Class CClassPDFPage Inherits PdfPageEventHelper Public Overrides Sub OnStartPage(ByVal writer As iTextSharp.text.pdf.PdfWriter, ByVal document As iTextSharp.text.Document) Dim oImagen As iTextSharp.text.Image Dim cbPie As PdfContentByte Dim cbEncabezado As PdfContentByte '----------------------------------------------------------------------------------------- ' DEFINICIÓN DEL OBJETO PdfContentByte PARA EL ENCABEZADO '----------------------------------------------------------------------------------------- cbEncabezado = writer.DirectContent With cbEncabezado .BeginText() .SetFontAndSize(FontFactory.GetFont(FontFactory.HELVETICA_BOLD, iTextSharp.text.Font.DEFAULTSIZE, iTextSharp.text.Font.NORMAL).BaseFont, 8) .SetColorFill(iTextSharp.text.BaseColor.BLACK) .ShowTextAligned(PdfContentByte.ALIGN_CENTER, "XXXXXX", 290, 760, 0) .ShowTextAligned(PdfContentByte.ALIGN_CENTER, "XXXXXX", 290, 750, 0) .ShowTextAligned(PdfContentByte.ALIGN_CENTER, "XXXXXX", 290, 740, 0) .EndText() End With '----------------------------------------------------------------------------------------- ' DEFINICIÓN DEL OBJETO PdfContentByte PARA EL PIE DE PAGINA '----------------------------------------------------------------------------------------- cbPie = writer.DirectContent cbPie.BeginText() cbPie.SetFontAndSize(FontFactory.GetFont(FontFactory.HELVETICA, iTextSharp.text.Font.DEFAULTSIZE, iTextSharp.text.Font.NORMAL).BaseFont, 10) cbPie.SetColorFill(iTextSharp.text.BaseColor.BLACK) cbPie.ShowTextAligned(PdfContentByte.ALIGN_CENTER, "Página: " & writer.PageNumber, 540, 25, 0) cbPie.EndText() '----------------------------------------------------------------------------------------- ' LOGOS DEL DOCUMENTO '----------------------------------------------------------------------------------------- oImagen = iTextSharp.text.Image.GetInstance(Application.StartupPath & "\images\xxxxx.png") oImagen.SetAbsolutePosition(28, 737) oImagen.ScalePercent(20) 'Ajuste porcentual de la imagen document.Add(oImagen) 'Se agrega la imagen al documento oImagen = iTextSharp.text.Image.GetInstance(Application.StartupPath & "\images\xxxxx.png") oImagen.SetAbsolutePosition(480, 737) oImagen.ScalePercent(16) document.Add(oImagen) End Sub End Class

Explicación del código:
  • Hay que tener en mente que se crea una clase que deriva de un evento, el cual produce la creación o presentación de una nueva página. Este evento es onStartPage
  • Se crean los objetos que se incorporarán al documento: Image, PdfContentByte
  • Se define el encabezado del documento, este encabezado es sólo texto, por lo que se inicia con la función BeginText(), hay otra función que permite iniciar una capa que es BeginLayer().
  • Se define la fuente de ese texto, el color, su alineación y su ubicación.
  • El punto 0,0 se ubica a la izquierda y al inferior del documento. En este ejemplo, el valor 740 es el punto más alto del documento.
  • Se concluye con la introducción del texto a través de EndText().
  • Para el caso del pie de página, se realiza la misma temática.
  • Las propiedades de la imagen son:
    • Image.GetInstance, que es la ruta
    • SetAbsolutePosition, se define la ubicación de la imagen
    • ScalePercent, es la escala de la imagen (este valor es porcentual)


Producto terminado:



Posted by Unknown On 9:17
Estoy utilizando un componente denominado itextsharp de uso libre para la elaboración de archivos PDF desde un entono NET.

Si deseas conocer sobre este componente, su instalación y descarga te recomiendo que utilices la siguiente liga:  introducción a itextsharp

Para quienes aún no tienen el gusto les presento iTextSharp, una biblioteca original de Javaportada a .Net. 
¿Su función? Arrimarle el paraíso a aquellos que buscan generar archivos con formato Adobe PDF desde la plataforma .Net. No menos importante destacar que se trata de un proyecto de código abierto totalmente libre. Existen infinidad de bibliotecas similares pagas pero como practicamente siempre tenemos nuestra alternativa gratuita ;). 

Si ya conoces dicho componente y tienes dudas de como elaborar una tabla, colocar encabezados y pies de página, te comparto el siguiente código.


Sub PrintCatalogWareHouse() Dim oDoc As New iTextSharp.text.Document(iTextSharp.text.PageSize.LETTER) Dim pdfw As iTextSharp.text.pdf.PdfWriter Dim pdfGrid As New iTextSharp.text.pdf.PdfPTable(7) Dim fBodyFont As iTextSharp.text.Font = FontFactory.GetFont(FontFactory.COURIER, 7, iTextSharp.text.Font.NORMAL) Dim fHeaderFont As iTextSharp.text.Font = FontFactory.GetFont("Arial", 8, iTextSharp.text.BaseColor.WHITE) Dim CCon As New ClassConection Dim sFileName As String = "sinafi_ctlg.pdf" Try '----------------------------------------------------------------------------------------- ' PROPIEDADES DEL DOCUMENTO '----------------------------------------------------------------------------------------- pdfw = PdfWriter.GetInstance(oDoc, New FileStream(sFileName, FileMode.Create, FileAccess.Write, FileShare.None)) oDoc.AddTitle("XXXXX") oDoc.AddAuthor("XXXXX") oDoc.AddCreationDate() oDoc.AddSubject("XXXXXX") oDoc.SetMargins(28.5, 28.5, 70, 35) '----------------------------------------------------------------------------------------- ' ENCABEZADO DEL DOCUMENTO '----------------------------------------------------------------------------------------- Dim ev As New CClassPDFPage pdfw.PageEvent = ev '----------------------------------------------------------------------------------------- ' APERTURA DEL DOCUMENTO Y CREACION DE HOJA '----------------------------------------------------------------------------------------- oDoc.Open() '----------------------------------------------------------------------------------------- ' GENERACION DE TABLA '----------------------------------------------------------------------------------------- Dim Titulo1 As New Phrase("Folio", fHeaderFont) Dim Titulo2 As New Phrase("Partida", fHeaderFont) Dim Titulo3 As New Phrase("Descripción", fHeaderFont) Dim Titulo4 As New Phrase("Medida", fHeaderFont) Dim Titulo5 As New Phrase("Cantidad", fHeaderFont) Dim Titulo6 As New Phrase("Precio", fHeaderFont) Dim Titulo7 As New Phrase("Existencia", fHeaderFont) Dim celda As New pdf.PdfPCell Dim dsTabla As New DataSet '----------------------------------------------------------------------------------------- ' DIMENSION DE LA TABLA Y FORMATO DE LOS ENCABEZADOS '----------------------------------------------------------------------------------------- pdfGrid.WidthPercentage = 100 Dim ancho() As Single = {20, 20, 110, 20, 20, 20, 20} pdfGrid.SetWidths(ancho) celda.Colspan = 1 celda.Padding = 5 celda.BackgroundColor = iTextSharp.text.pdf.ExtendedColor.BLACK celda.HorizontalAlignment = iTextSharp.text.Element.ALIGN_CENTER celda.Phrase = Titulo1 : pdfGrid.AddCell(celda) celda.Phrase = Titulo2 : pdfGrid.AddCell(celda) celda.Phrase = Titulo3 : pdfGrid.AddCell(celda) celda.Phrase = Titulo4 : pdfGrid.AddCell(celda) celda.Phrase = Titulo5 : pdfGrid.AddCell(celda) celda.Phrase = Titulo6 : pdfGrid.AddCell(celda) celda.Phrase = Titulo7 : pdfGrid.AddCell(celda) pdfGrid.HeaderRows = 1 ' Esta instrucción define los renglones para el encabezado '----------------------------------------------------------------------------------------- ' CONSULTA SQL, FORMATO DE CELDAS Y AGREGADO DE CELDAS A LA TABLA '----------------------------------------------------------------------------------------- Dim iCol As Integer = 1 Dim sDataCell As String = "" Dim iHorizontalAlignment = 0 CCon.SelectRows(dsTabla, "SELECT * FROM tblwarehousecatalog") For Each oFila As Data.DataRow In dsTabla.Tables(0).Rows iCol = 1 For Each oColumna As Data.DataColumn In dsTabla.Tables(0).Columns sDataCell = oFila(oColumna) Select Case iCol Case 1, 2, 4, 5, 7 iHorizontalAlignment = iTextSharp.text.Element.ALIGN_CENTER Case 3 iHorizontalAlignment = iTextSharp.text.Element.ALIGN_LEFT Case 6 sDataCell = FormatNumber(sDataCell, 2) iHorizontalAlignment = iTextSharp.text.Element.ALIGN_RIGHT End Select Dim celda2 As New pdf.PdfPCell(New Phrase(sDataCell, fBodyFont)) celda2.HorizontalAlignment = iHorizontalAlignment celda2.VerticalAlignment = iTextSharp.text.Element.ALIGN_CENTER pdfGrid.AddCell(celda2) iCol += 1 Next oColumna Next oFila '----------------------------------------------------------------------------------------- ' INCORPORACION DE LA TABLA AL DOCUMENTO '----------------------------------------------------------------------------------------- oDoc.Add(pdfGrid) '----------------------------------------------------------------------------------------- ' LIBRACION DEL DOCUMENTO Y PRESENTACION '----------------------------------------------------------------------------------------- pdfw.Flush() oDoc.Close() Process.Start(sFileName) Catch ex As Exception 'Si hubo una excepcion y el archivo existe ... If File.Exists(sFileName) Then 'Cerramos el documento si esta abierto. 'Y asi desbloqueamos el archivo para su eliminacion. If oDoc.IsOpen Then oDoc.Close() '... lo eliminamos de disco. File.Delete(sFileName) End If Throw New Exception("Error al generar archivo PDF (" & ex.Message & ")") Finally pdfw = Nothing oDoc = Nothing End Try End Sub

Explicación del código:


Si sabes desarrollar aplicaciones en .Net, creo que está de más explicar cada línea, así que me enfocaré en el componente itextsharp.

  • oDOC, es nuestro objeto PDF. De tamaño carta y posición vertical.
  • pdfw, es nuestra instancia al objeto oDOC
  • pdfGrid, es nuestra tabla de datos
  • fBodyFont, es la definición de nuestra fuente para el cuerpo de la tabla
  • fHeaderFont, es la definición de nuestra fuente para el encabezado de la tabla
  • CCon, es una clase que me permite conectarme a mi base de datos (MySQL)
  • oDoc.SetMargins(28.5, 28.5, 70, 35), me permite crear el área de trabajo de nuestro documento (definición de margenes). Izquierdo, Derecho, Arriba y Abajo
Para que nuestro documento repita encabezados y pies de pagina se utiliza la siuiente definición (se explicará en otra entrada):

Dim ev As New CClassPDFPage pdfw.PageEvent = ev
Continuamos con el resto del código:

  • Imagina que utilizas un textbox, new Phrase es su equivalente. En él vas a definir las propiedades del texto.
  • pdf.PdfPCell es la propiedad de la celda, pero no puedes editar el texto que va dentro de la celda, para eso utilizas Phrase (si me equivoco, no dudes en hacer comentarios).
  • pdfGrid.HeaderRows, sirve para definir cuantos renglones se repetirán como encabezado.
  • pdfGrid.AddCell, agregamos cada celda a la tabla
  • oDoc.Add(pdfGrid), agregamos la tabla al documento

Producto terminado:





Posted by Unknown On 8:34
En la entrada anterior, comenté sobre mi experiencia y primer contacto con los equipos de cómputo y como fue que me involucre en la rama de la informática.

Esta entrada tiene por objeto hablar sobre mis antecedentes y la especialidad que tengo hacia el Desarrollo de Software.

Antes de concluir la escuela busqué trabajo, mi primer trabajo fue con un contador que requería un desarrollo para una arrendadora. No recuerdo el tiempo que estuve trabajando, pero lo que si recuerdo es que este proyecto no se pudo concluir. ¿Por qué?. Por una mala planeación del mismo. Aunque no tenía experiencia, sabía que debía conocer los alcances del mismo, hasta donde se quería llegar y que debía hacer la herramienta. La verdad es que nunca me explicaron eso.

Bueno, pero eso no es lo importante, lo importante es que comencé a desarrollar con Visual Basic 4. Ya que se requería una aplicación para trabajar en Windows.

Posteriormente, en mi primer trabajo como empleado formal (2002) me solicitaron desarrollar un sistema de nómina, el cual se implementó en 8 meses y se utilizó Visual Basic 6.

Posteriormente. en el año 2005, ingresé al Diplomado MCTS: Windows Applications Development with Microsoft .NET. y fue entonces cuando me involucré en todo el entorno de Visual Studio, desarrollando aplicaciones en Visual Basic y C#.


Actualmente desarrollo utilizando Visual Studio 2010. 
Tengo experiencia en los entorno de Visual Studio 2005, 2008, 2010, 2012 y poco en 2013.



Posted by Unknown On 8:09
Queridos lectores de este Blog.

En esta primera entrada sobre el Desarrollo de Software, hablaremos sobre los antecedentes académicos y profesionales que me llevaron a estudiar sobre esta especialidad.

Soy egresado del Instituto Tecnológico de Toluca, de la carrera de Ingeniería en Sistemas Computacionales (1993-1999). Al momento de escribir estas líneas, estoy a 18 días de mi acto protocolario para titulación a través de la opción IX que es titulación por posgrado.

No estoy orgulloso por dejar pasar tanto tiempo para titularme, sin embargo estoy tranquilo porque estoy cumpliendo una meta que había dejado pendiente durante mucho tiempo. Y es algo que quiero compartir contigo, en caso que todavía no cuentes con un título; disciplinate y has el esfuerzo, es algo que no se lo debes a tus padres, amigos, esposa(o) o hijos, en realidad es algo que se lo debes a ti mismo.

Muchas veces argumentaba que no tenía tiempo, no era el momento adecuado, no era urgente o simplemente porque en el trabajo no me solicitaban el título. 

Hoy, puedo hablar que me arrepiento de haber dejado pasar mucho años. Me arrepiento de haber puesto miles de pretextos. Me arrepiento que siempre pensaba que era un trámite complicado o difícil. Pero no lo es.

Así que anímate, "cierra la ventana de los pretextos" y ponte a estudiar. Ya que será una satisfacción que te marcará por el resto de tu vida.

Imagen: Milenio. http://www.milenio.com/region/Tecnologico-Toluca_MILIMA20140210_0471_8.jpg
¿Qué me llevó a estudiar Ingeniería en Sistemas Computacionales?

Bueno, esto se lo debo a los video-juegos y a mi padre. 

Primero, porque cuando estudiaba en la secundaria a la hora del receso o después de clases, mi amigo Yuri (Yuri Garciarivas Gómez) nos invitaba a jugar a su casa (junto con otro amigo: Rogelio Arzate Tapia).

Ahí tuve mi primer acercamiento con una Commodore 64. Aunque ya conocía el Atari y el Nintendo, la conceptualización de ver un equipo electrónico al que pudieras introducirle comandos para que hiciera lo que tu querías, es lo que me fascinaba y me daba mucha curiosidad.

El hecho de que un teléfono funcionara para la comunicación, me quedaba claro. Que una videocasetera te mostrara películas, también me quedaba claro. Que la televisión mostrara canales o programas televisivos, también me quedaba claro. Pero que una computadora te permitiera hacer varias tareas como los aparatos que describí con anterioridad, eso me interesaba mucho más.

Veía una potencialidad en un aparato electrónico más allá de lo que veían mis amigos o mis propios padres. Recuerdo que mientras mis amigos jugaban (especialmente un video juego de olimpiadas de verano), yo me ponía a leer los manuales de la Commodore 64.




Cerca de la casa de mis papas, en un verano (no recuerdo el año), colocaron pancartas o colgantes que se ofrecían cursos de verano para niños para aprender computación. Mi papá conocía al dueño de ese negocio y me inscribió (creo que no me cobraban). Esto ocurrió cuando yo estudiaba la primaria.

Durante dos meses, conocí las partes de una computadora, como utilizar programas de ofimática y aprendí nuevos juegos.

Afortunadamente, era uno de los mejores de la clase. Así que los profesores me confiaban sus programas, me dejaban utilizar las computadoras por media hora más. Inclusive, los sábados me esperaban para que los acompañara.

Aún conservo mi reconocimiento por la asistencia a dichos cursos (posteriormente lo subiré a esta página).

No recuerdo bien que edad tenía. Pero estoy seguro que me involucré a la informática cuando tenía 8 años. 


lunes, 3 de marzo de 2014

Posted by Unknown On 10:25
Hola, queridos amigos.

Iniciamos esta aventura con la firme convicción que podemos lograr y acercar conocimientos a través de .

Este blog está dedicado a nuestro querido "San Google" y a sus respectivos autores, ya que me he encontrado en situaciones que no he podido resolver y al realizar una búsqueda me encuentro con grandes aportaciones de personas que comparten sus conocimientos (sin lucro y sin restricciones), por lo que me veo obligado a contribuir de la misma manera.

Por el momento, me enfocaré a temas de desarrollo de software y de música.

No sé hasta donde me lleve este proyecto de vida, pero de lo que si estoy seguro es que más adelante habrá temas que incluiré y que complementarán al momento de compartir mis conocimientos y mi experiencia.