17 agosto 2013

Error 500 en el servicio alwaysdata

Hace tiempo necesitaba de un servicio gratuito que me brindara un espacio para alojar un pequeño sitio web con soporte de php y con la posibilidad de tener una base de datos utilizando MySql, despues de buscar encontré alwaysdata.com quien tiene varios planes de alojamiento por un costo, pero que tambien ofrece un plan gratuito para probar, pero que resulta muy interesante ya que tiene lo necesario para alojar una pequeña página y sin incluir ninguna publicidad, entre las bases de datos que puedes utilizar esta MySql y Mongodb.

Después de explicar muy poco este servicio, a lo que va esta historia es que actualmente queria crear un cuenta en alwaysdata pero arroja un error 500, por lo que por el momento no se pueden crear cuentas, espero que se restablezca ya que a mi parecer es una buena oportunidad para practicar con sitios nuevos y sin invertirle un peso. Si se restablece ya comentare como instale un driver para poder realizar conexiones a una base de datos mongodb con php.

11 enero 2013

Inicio de Año 2013

Enero 2013, comienza el calendario a guiarnos día con día y es donde anotamos las fechas importantes de nuestras vidas, ha esta fecha ya transcurrieron 10 días de este nuevo año, por ese motivo y sin dejar pasar mas tiempo decidí escribir estas pocas líneas de texto en señal de la voluntad que tengo para atender este espacio, que en las ultimas fechas lo descuide demasiado, saludos a todos y feliz año 2013.

15 diciembre 2012

El año 2012 esta finalizando y creo que buscare las lista de las cosas que pretendía realizar en este año que esta terminando y queda claro que entre mi lista por hacer no estaba anotar algo en este blog, ya que paso todo el año y no escribí nada, pero la verdad ya no encuentro la lista o ya ni me acuerdo si anote algo, pero bueno después de esta introducción adulando la mala memoria y la falta de organización que rigen mi vida, puedo comentar a los casi 00000.0001 lectores que me leen que empezare a escribir algunas cosas interesantes relacionados a los servicios que ofrece la nube de manera gratuita, entre estas tenemos algunos sitios que ofrecen alojamiento sin restricción y sin llenarte de publicidad, por otro lado un servicio de base de datos no-sql. Bueno por el momento eso es todo y que tengan un buen fin de año en compañía de sus seres queridos.

12 noviembre 2010

Base de datos Sqlite, .Net y C# primera parte

Bueno después de varios días sin actividad de nuevo retomo este espacio para traer un nuevo proyecto que quizas tenga varios errores pero lo que se pretende es conocer el uso de bases de datos Sqlite con .Net y C#, lo que veremos sera la unión de los ejemplos pasados (el explorador de imagenes con C# e Impresión con C#), aqui tenemos una aplicación que fungira como album fotografico que contendra hojas con un diseño y a cada foto se le podra incluir fotos para imprimir o solamente para organizar un poco el reguero de fotos que acostumbramos ir guardando en nuestro equipo y luego no sabemos donde quedaron.

Para la creación de este album usaremos una base de datos de Sqlite y para ello necesitamos solamente de incluir una referencia a system.data.sqlite.dll que se puede descargar de http://sqlite.phxsoftware.com/ y con esto ya podemos empezar a trabajar con la base de datos, claro esto se vera mas adelante, advierto que si el tiempo no me lo permite no podre explicar a detalle pero el codigo lo dejare.

Empecemos, la base de datos consistira en 5 tablas (por el momento)

1.- Tabla Album (tiene muy poca información pero es necesaria)
2.- Tabla Hoja ( aqui se guardara todo lo relacionado a la hoja de diseño para imprimir)
3.- Tabla Foto (aqui estara la información de cada foto desde nombre, tamaño, pie de foto, etc)
4.- Tabla Etiqueta (aqui podremos llevar etiquetas para agrupar las fotos)
5.- Tabla Elementos (aqui se pretende llevar todos los elementos de texto de la hoja de diseño)

Estas tablas se generaran cuando se cree un nuevo album

En la proxima entrega se dejara la imagen de la ventana de la aplicación.

31 octubre 2010

Explorador de Imagenes con C# en .Net

Aquí dejo el código de un sencillo explorador de archivos de imagen que se encuentran en una carpeta. Para todo esto se utiliza un formulario con un botón para abrir el cuadro de dialogo para seleccionar una carpeta del sistema (FolderBrowserDialog) y después se realiza un recorrido en la carpeta para mostrar los archivos que tengan una extensión de imágenes (jpg, bmp, gif, jpeg, etc), los resultados se muestran en un Treeview en forma de nodos que al seleccionar alguno se mostrara en un PictureBox en tamaño pequeño la imagen y ademas se mostraran unos pocos detalles del archivo de imagen.

Para mejor explicación dejo la imagen del programa en ejecución


Lo que aquí se pretende es mostrar la utilización de FolderBrowserDialog, TreeView y PictureBox.

Código del Programa

//
// Pequeño Explorador de Imagenes con C# en .Net
// Programo: http://gsur.blogspot.com
// El uso y modificación del código es libre y no olviden mencionar el origen gsur.blogspot.com
//

using System;
using System.Drawing;
using System.Windows.Forms;
using System.IO;
using System.Linq;

class Formulario : Form
{
private System.ComponentModel.IContainer components = null;
private System.Windows.Forms.FolderBrowserDialog DialogoSeleccionarCarpetas;
private System.Windows.Forms.Button btnBuscarCarpeta;
private System.Windows.Forms.TreeView Arbol;
private System.Windows.Forms.PictureBox Imagen;
private System.Windows.Forms.Panel PanelSup;
private System.Windows.Forms.Label lblDetalles;
public Formulario()
{
this.DialogoSeleccionarCarpetas = new System.Windows.Forms.FolderBrowserDialog();
this.btnBuscarCarpeta = new System.Windows.Forms.Button();
this.Arbol = new System.Windows.Forms.TreeView();
this.Imagen = new System.Windows.Forms.PictureBox();
this.PanelSup = new System.Windows.Forms.Panel();
this.lblDetalles = new System.Windows.Forms.Label();
this.Size = new System.Drawing.Size(845,610);
this.Text = "Clic en el boton Seleccionar carpeta";

PanelSup.Location = new Point(0,0);
PanelSup.Size = new Size(845, 50);
PanelSup.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
PanelSup.Anchor = (AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right);
btnBuscarCarpeta.Location = new System.Drawing.Point(8, 10);
btnBuscarCarpeta.Name = "btnBuscarCarpeta";
btnBuscarCarpeta.Size = new System.Drawing.Size(180, 32);
btnBuscarCarpeta.TabIndex = 1;
btnBuscarCarpeta.Text = "Seleccionar Carpeta";
btnBuscarCarpeta.UseVisualStyleBackColor = true;
btnBuscarCarpeta.Click += new System.EventHandler(btnBuscarCarpeta_Click);
Arbol.Location = new Point(8, 64);
Arbol.Size = new Size(480, 515);
Arbol.Anchor = AnchorStyles.Top | AnchorStyles.Left;
Arbol.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(Arbol_AfterSelect);

Imagen.Location = new System.Drawing.Point(490, 64);
Imagen.Size = new System.Drawing.Size(340, 260);
Imagen.TabStop = false;
Imagen.SizeMode = PictureBoxSizeMode.StretchImage;
Imagen.BorderStyle = BorderStyle.Fixed3D;
Imagen.Anchor = AnchorStyles.Top | AnchorStyles.Left;
lblDetalles.Location = new System.Drawing.Point(500,340);
lblDetalles.Font = new Font(lblDetalles.Font.Name, 8, FontStyle.Bold, lblDetalles.Font.Unit);
Controls.Add(PanelSup);
PanelSup.Controls.Add(btnBuscarCarpeta);
Controls.Add(Arbol);
Controls.Add(Imagen);
Controls.Add(lblDetalles);
DialogoSeleccionarCarpetas.ShowNewFolderButton = false;
DialogoSeleccionarCarpetas.RootFolder = Environment.SpecialFolder.Desktop;
}
private void btnBuscarCarpeta_Click(object sender, EventArgs e)
{
System.IO.FileInfo []archivos;
DialogResult result = DialogoSeleccionarCarpetas.ShowDialog();
if( result == DialogResult.OK )
{
this.Text = DialogoSeleccionarCarpetas.SelectedPath;
var dir = new System.IO.DirectoryInfo(DialogoSeleccionarCarpetas.SelectedPath);
//Uso de LINQ to FileSystem (O LINQ to Objects)
var resultado = from arch in dir.GetFiles()
where arch.Extension.ToLower() == ".jpg" ||
arch.Extension.ToLower() == ".bmp" ||
arch.Extension.ToLower() == ".png" ||
arch.Extension.ToLower() == ".gif" ||
arch.Extension.ToLower() == ".jpeg"
select arch;
archivos=resultado.ToArray<System.IO.FileInfo>();
System.IO.FileInfo item;
Arbol.BeginUpdate();
Arbol.Nodes.Clear();
for(int i=0;i<archivos.Length;i++)
{
item = archivos[i];
if (item.Extension.ToLower() == ".jpg" ||
item.Extension.ToLower() == ".bmp" ||
item.Extension.ToLower() == ".png" ||
item.Extension.ToLower() == ".gif" ||
item.Extension.ToLower() == ".jpeg")
{
Arbol.Nodes.Add(item.FullName);
}
}
Arbol.EndUpdate();
}
}

private void Arbol_AfterSelect(System.Object sender, System.Windows.Forms.TreeViewEventArgs e)
{
System.IO.FileInfo ArchivoImagen = new System.IO.FileInfo(Arbol.SelectedNode.FullPath);
long tArchivo = ArchivoImagen.Length;
string tam_Archivo;
if(tArchivo>1024)
{
if(tArchivo / 1024 > 1024)
tam_Archivo = (tArchivo / (1024*1000)).ToString("N") + " Megabytes";
else
tam_Archivo = (tArchivo / 1024).ToString("N") + " Kilobytes";
}
else
tam_Archivo = tArchivo.ToString("N") + " Bytes";
Imagen.Image = System.Drawing.Image.FromFile(Arbol.SelectedNode.FullPath);
lblDetalles.Text = "Nombre: " + ArchivoImagen.Name;
lblDetalles.Text += "nnTamaño del Archivo: " + tam_Archivo;
lblDetalles.Text += "nnDimensiones (Ancho x Alto): ";
lblDetalles.Text += Imagen.Image.Width.ToString("#,###");
lblDetalles.Text += " x " + Imagen.Image.Height.ToString("#,###") + " Pixeles";
lblDetalles.Size = new Size (lblDetalles.PreferredWidth, lblDetalles.PreferredHeight);
}

protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
[STAThread]
public static void Main()
{
Application.Run(new Formulario());
}
}

30 octubre 2010

Impresion en .Net con C#

Aquí dejo el código en C# de un programa que muestra un formulario con un control TextBox y un Boton para mostrar en vista previa lo capturado en el TextBox.

Código del programa

//
// Programa que muestra como mostrar una vista previa e imprimir
// http://gsur.blogspot.com
//

using System;
using System.Drawing;
using System.Windows.Forms;

namespace Impresion
{
class Formulario : Form
{
private System.ComponentModel.IContainer components = null;
private System.Drawing.Printing.PrintDocument ImprimeDocumento;
private System.Windows.Forms.PrintPreviewDialog DialogoVistaPrevia;
private System.Windows.Forms.Button btnImprime;
private System.Windows.Forms.TextBox txtNombre;
private System.Windows.Forms.Label lblNombre;
public Formulario()
{
ImprimeDocumento = new System.Drawing.Printing.PrintDocument();
DialogoVistaPrevia = new System.Windows.Forms.PrintPreviewDialog();
btnImprime = new System.Windows.Forms.Button();
txtNombre = new System.Windows.Forms.TextBox();
lblNombre = new System.Windows.Forms.Label();
ImprimeDocumento.PrintPage += new System.Drawing.Printing.PrintPageEventHandler(ImprimeDocumento_ImprimePagina);
DialogoVistaPrevia.AutoScrollMargin = new System.Drawing.Size(0, 0);
DialogoVistaPrevia.AutoScrollMinSize = new System.Drawing.Size(0, 0);
DialogoVistaPrevia.ClientSize = new System.Drawing.Size(400, 300);
DialogoVistaPrevia.Document = ImprimeDocumento;
DialogoVistaPrevia.Enabled = true;
DialogoVistaPrevia.Name = "printPreviewDialog1";
DialogoVistaPrevia.Visible = false;
btnImprime.Location = new System.Drawing.Point(80, 64);
btnImprime.Name = "btnImprime";
btnImprime.Size = new System.Drawing.Size(80, 22);
btnImprime.TabIndex = 1;
btnImprime.Text = "Vista Previa";
btnImprime.UseVisualStyleBackColor = true;
btnImprime.Click += new System.EventHandler(btnImprime_Click);

txtNombre.Location = new System.Drawing.Point(80, 32);
txtNombre.Name = "txtNombre";
txtNombre.Size = new System.Drawing.Size(200, 22);
txtNombre.TabIndex = 0;
txtNombre.Text = "Escribir su nombre";
lblNombre.Location = new System.Drawing.Point(32, 32);
lblNombre.Name = "lblNombre";
lblNombre.Text = "Nombre: ";
AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
ClientSize = new System.Drawing.Size(322, 287);
Controls.Add(btnImprime);
Controls.Add(txtNombre);
Controls.Add(lblNombre);
Name = "frmImprime";
Text = "Impresion con C#";
}
private void ImprimeDocumento_ImprimePagina(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
e.Graphics.DrawString("Nombre: " + txtNombre.Text, new Font("Arial", 16), System.Drawing.Brushes.Blue, new PointF(20,20));
Pen LineaNegra = new Pen(Color.FromArgb(255, 0, 0, 255), 5);
e.Graphics.DrawRectangle(LineaNegra, 120, 50, 450, 1);
}

private void btnImprime_Click(object sender, EventArgs e)
{
DialogoVistaPrevia.ShowDialog();
}
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
}

static class Programa
{
public static void Main()
{
Application.Run(new Formulario());
}
}
}

Imagen de la compilación del programa


Imagen del programa en ejecución

28 octubre 2010

Eventos del Mouse en C# (MouseEventHandler)

Programa de Ejemplo que mostrara las coordenadas de la posición donde se pulse el boton Izquierdo del ratón dentro de un formulario.

Codigo

using System;
using System.Windows.Forms;

class Recibe_Evento
{
public Recibe_Evento(Formulario frm)
{
frm.MouseDown += new MouseEventHandler(AlHacerClicRaton);
}

public void AlHacerClicRaton(object origen, MouseEventArgs e)
{
if(e.Button == MouseButtons.Left)
((Form)origen).Text = "Posicion: (" + e.X + ", " + e.Y + ")";
else
if((e.Button == MouseButtons.Right) || (e.Button == MouseButtons.Middle))
MessageBox.Show("Debe pulsar el boton izquierdo");
}
}

class Formulario : Form
{
public Formulario()
{
this.Size = new System.Drawing.Size(400,250);
this.Text = "Clic con el raton sobre el formulario";
Recibe_Evento r = new Recibe_Evento(this);
}

protected override void Dispose (bool disposing)
{
try
{
//Para demostrar que dispose es invocado
MessageBox.Show("Liberado");
}
catch(Exception)
{}
base. Dispose(disposing);
}
public static void Main()
{
Application.Run(new Formulario());
}
}

Ventanas donde se muestra la compilación y la ejecución.


Ventana que muestra el mensaje liberado al cerrar la ventana