Páginas

martes, 7 de diciembre de 2010

Guardado de Clases Serializables

En algunos casos deseamos guardar información de una aplicación y no necesariamente lo queremos hacer en una base de datos, ni tampoco en un archivo de texto delimitado, ya sea porque nuestra estructura de datos sea compleja o por cierta seguridad, para esto podemos utilizar la Serializacion, esto se lo hace de esta manera.
Creamos la estructura que sera guardada en una clase serializable en este caso Alumnos
[Serializable]
public class Alumnos
{
   public string cedula;
   public string nombres;
}
Los resultados Obtenidos en un  form lo guardamos en una clase parecida a la que está arriba de la siguiente forma:
Alumnos al = new Alumnos();
al.cedula=Textbox1.Text;
al.nombres=Textbox2.Text;
Luego para guardarlos en un archivo utilizamos el SaveFileDialog para obtener el nombre y lo guardas serializado así:
FileStream stream = new FileStream(NewFileName, FileMode.Create, FileAccess.Write);
BinaryFormatter b = new BinaryFormatter();
b.Serialize(stream, al);
stream.Close();

Tomando en cuenta que "al" es la instancia de alumno, y "NewFileName" contiene el nombre completo del archivo. De esa manera tienes guardamos el contenido de al.
para recuperarlo utilizas el OpenFileDialog para pbtener el Nombre y  haces esto:
FileStream s = new FileStream(cFileName, FileMode.Open, FileAccess.Read);
BinaryFormatter b = new BinaryFormatter();
al = (Alumnos)b.Deserialize(s);
s.Close();

jueves, 25 de noviembre de 2010

Obtener elementos de un enumerador en C#

A veces necesitamos extraer los elementos de un enumerador, y no sabemos como.. bueno es realmente sencillo, aquí les va el código:
   1:   foreach (string nombre in Enum.GetNames(typeof(MyEnumerador)))


   2:  {


   3:      this.cmbElementos.Items.Add(nombre);


   4:   }





En este ejemplo estamos llenando un combo con los elementos del Enumerador.

miércoles, 24 de noviembre de 2010

MyPhone Muy buena utilidad para Windows Mobile

Buscando nuevas utilidades para mi teléfono Windows Mobile encontré MyPhone, un servicio de Microsoft para teléfonos basados en Windows, donde tenemos un servicio interesante, pero en sí lo que hacemos es respaldar la información de nuestro teléfono en el internet, de forma ordenada, Contactos, mensajes, photos, videos, etc. podemos archivar todos estos datos, programar las Sincronización con el teléfono, guardar la ubicación de la ultima sincronización, entre otras cosas.

Si tenemos una cuenta pagada, de este servicio podemos incluso hacer sonar nuestro teléfono o saber la ubicación  si está perdido.

Para las personas que tienen teléfonos basados en Windows les recomiendo esta herramienta. les va a encantar.

jueves, 11 de noviembre de 2010

Levantar un Servidor NTP en RedHat Enterprise

Aunque existe un archivo /etc/ntp.conf, que podemos configurar  personalizando nuestro servidor, en realidad el archivo está apto para trabajar, es recomendable que si deseamos modificar este archivo saquemos copia al mismo para tenerlo de respaldo.
El servicio que debemos levantar es el ntpd, de esta manera:
service ntpd start
para configurar el servidor para que se levante automáticamente lo podemos hacer de la siguiente manera:
chkconfig  ntpd --levels 345 on
Ahora hay que abrir el puerto UDP 123 tanto en datos de entrada como en datos de salida, la forma de hacerlo dependerá del Firewall que tengan, en el caso de IPTABLES lo hacemos de esta manera:
# iptables -I INPUT -p udp --dport 123 -j ACCEPT
# iptables -I OUTPUT -p udp --dport 123 -j ACCEPT
Ahora haciendo de cuenta que nuestro servidor tiene la ip: 192.168.1.1 vamos a otra maquina linux y le decimos que se actualice desde este servidor con el siguiente comando:
ntpdate -s 192.168.1.1

viernes, 22 de octubre de 2010

Dar permisos a Todos los usuarios a la Carpeta Oracle

Para tener acceso desde todos los usuarios al cliente de Oracle debemos darle acceso a la Carpeta de Oracle de la siguiente manera.
  1. Abrir las propiedades de la carpeta ORACLE
  2. En la ficha Seguridad Presionar el Boton “Avanzado”
  3. En la ventana de Configuracion de seguridad avanzada hacemos click en Editar
  4. En esta ventana agregamos los usuarios o grupos con la configuración de permisos necesarios.
image
al hacer click en agregar saldrá esa ventana.
image 
y Luego se editan los permisos
image

martes, 12 de octubre de 2010

Ordenamiento de Items en ListView al dar click en columnas [C#]

A veces necesitamos ordenar datos en un listview dependiendo la columna donde le demos clic, esto es fácil aplicando los algoritmos de ordenamiento conocidos, en el siguiente código cree una clase heredada de listview y le di luego esa característica, me evitará tener que escribir el código en cada una de los forms donde los use.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace SPControls
{
    public partial class JPListView : ListView
    {
        public JPListView()
        {
            InitializeComponent();
            this.ColumnClick += new ColumnClickEventHandler(JPListView_ColumnClick);
        }
        /// <summary>
        /// Metodo de Ordenamiento Automatico al hacer clic en las cabeceras de las columnas
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void JPListView_ColumnClick(object sender, ColumnClickEventArgs e)
        {
            if (ColumnIndexOrder != e.Column)
                OrderAsc(e.Column);
            else
            {
                if (OrderTypeSel == SPControls.JPListView.OrderType.Asc)
                    OrderDes(e.Column);
                else
                    OrderAsc(e.Column);
            }
        }
        public enum OrderType
        {
            Asc=1,
            Des=2
        }
        private int mColumnIndexOrder = 0;
        private OrderType mOrderTypeSel;
        public int ColumnIndexOrder
        {
            get { return mColumnIndexOrder; }
        }
        public OrderType OrderTypeSel
        {
            get { return mOrderTypeSel; }
        }
        /// <summary>
        /// Ordena la lista dependiendo del Índice Seleccionado
        /// Autor: Jackson Patricio Rosado Cedeño
         /// </summary>
        /// <param name="ColumnIndex"></param>
        public void OrderAsc(int ColumnIndex)
        {
            //Metodo de Inserción Directa
            ListViewItem Intercambio;
            int i, j;
            for (i = 1; i < Items.Count; i++)
            {
                Intercambio=Items[i];
                j = i - 1;
                while (string.Compare(Intercambio.SubItems[ColumnIndex].Text,Items[j].SubItems[ColumnIndex].Text)<0 && j >= 0)
                {
                    Items[j + 1] =(ListViewItem) Items[j].Clone();
                    j--;
                    if (j < 0)
                        break;
                }
                Items[j + 1] = Intercambio;
                mColumnIndexOrder = ColumnIndex;
                mOrderTypeSel = OrderType.Asc;
            }    
        }
        /// <summary>
        /// Ordena de Forma descendente dependiendo el indice seleccionado
        /// Autor: Jackson Patricio Rosado Cedeño
        /// </summary>
        /// <param name="ColumnIndex"></param>
        public void OrderDes(int ColumnIndex)
        {
            //Metodo de Inserción Directa
            ListViewItem Intercambio;
            int i, j;
            for (i = 1; i < Items.Count; i++)
            {
                Intercambio = Items[i];
                j = i - 1;
                while (string.Compare(Intercambio.SubItems[ColumnIndex].Text, Items[j].SubItems[ColumnIndex].Text) > 0 && j >= 0)
                {
                    Items[j + 1] = (ListViewItem)Items[j].Clone();
                    j--;
                    if (j < 0)
                        break;
                }
                Items[j + 1] = Intercambio;
            }
            mColumnIndexOrder = ColumnIndex;
            mOrderTypeSel = OrderType.Des;
        }
    }
}

viernes, 10 de septiembre de 2010

Sistemas Operativos Desconocidos para la mayoría.

Esta vez, vamos a dedicarle algunos post a los sistemas operativos que son completamente desconocidos para la gran mayoría de personas que utilizan un computador. pues en el mercado actual tenemos varias opciones para escoger:

1.- Windows (El Sistema Operativo Mas Utilizado en Microcomputadoras por usuarios comunes y profesionales)

2.- MacOS X (Exclusivo de Apple, en la ultima década a ganado terreno nuevamente gracias al regreso de  Steve Jobs)

3.- Linux (Mas Utilizado en maquinas que trabajan como servidores, muy estable y confiable, aunque para muchos difícil a nivel de usuario final) de Linux existen algunas distribuciones como son (Fedora, RedHat, Debian, Ubuntu, FreeBSD,Suse, etc.)

4. Luego tenemos otros Sistemas Operativos que trabajan en servidores especializados como  UNIX y sus diferentes variaciones como Solaris de Sun Microsystem (Ahora de ORACLE), muy utilizado en el ámbito empresarial,  BSD, Xenix etc. Cabe recalcar que el Sistema Operativo UNIX ha servido de inspiración para otros como Linux, Minix, y MacOS X. que están basados en UNIX. y que hicieron posible trabajar “Como en UNIX” en un PC.

5.- Sistemas operativos especializados que vienen con las Mainframes.

6.- y Por ultimo los sistemas operativos de antaño, que ya dejaron de ser usados como el MS-DOS, FreeDOS, Basic (Considerado S.O. en los 70’s) entre otros.

Pero bueno ya con esto incluso estamos nombrando algunos Sistemas Operativos que para muchos son desconocidos, pero existen otros sistemas operativos algunos incluso creados por hobbie y que son desconocidos para muchos. Comenzaremos por “KolibriOS” un Sistema Operativo Basado en “MenuetOS” otro sistema operativo escrito completamente “FASM” un compilador de ASM o Ensamblador. Tiene una interface interesante y el código fuente está disponible para su estudio, ideal para los estudiantes de ASM. aquí les facilito unas capturas de pantalla.

 image

image

image

pueden bajar el soft de 3MB aproximadamente y probarlo en una maquina virtual en www.kolibri.org

Saludos a Todos.

martes, 7 de septiembre de 2010

Pequeño ejemplo de como enviar un mail desde C#

Este código es muy sencillo gracias a las clases dentro del espacio de nombre  “System.Net.Mail”, un código bastante simple.
System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient(“smtp.tuservidor.com”, 25); //se conecta atu servidor al puerto 25. esto debes cambiarlo con los datos propios de tu servidor SMTP
/// preparacion del mensaje.
System.Net.Mail.MailMessage mensaje = new System.Net.Mail.MailMessage();
mensaje.From = new System.Net.Mail.MailAddress(“remitente@miservidor.com”);
mensaje.To.Add(“destinatario1@tuservidor.com”);
mensaje.BodyEncoding = System.Text.Encoding.GetEncoding(1252);
mensaje.Subject = "Hola Mundo";
mensaje.Body = “Este es el Cuerpo del mensaje”
smtp.Send(mensaje); // se envia el mensaje
mensaje.Dispose(); // se destruye el mensaje
Ojalá les Ayude. Hasta luego.

viernes, 27 de agosto de 2010

Filtrar Spam en Sendmail por medio de PROCMAIL

Esta es una pequeña receta de procmail que me a ayudado mucho para el filtro de correos no deseados, estos filtros son el resultado de revisar los SUBJECT (Asunto) mas comunes en el Spam como lo son viagra lover exotic, nude, etc.
En si, este pequeño script lo que hace es hacer que procmail revise el Subject de los correos y si una de las palabras definidas en este se encuentra lo envíe a un buzón especifico en este caso “spam” para su posterior revisión. Para que procmail pueda hacer esta reasignación necesitaremos que el buzon “spam” permita el acceso a todos los usuarios, para esto podemos copiar cualquier otro buzón, vaciarlo y luego darle los accesos. lo podemos hacer de esta forma.
cd /var/mail/
cp jrosado spam  ///Copiamos el buzón de jrosado a el archivo spam
mutt –f spam /// Revisamos el buzon spam y lo vaciamos
chmod 777 spam /// damos acceso a Lectura, ejecución y lectura para el dueño, grupo y todos los usuarios.

Una vez ya creado el buzón spam, editamos el archivo /etc/procmailrc y escribimos el siguiente código:
LOGFILE=$HOME/procmail.log
:0
* ^Subject:(.*Acai|.*Treat|.*Viagr|.*manhood|.*Viagra|.*Setup|.*Twitter|.*lover|

.*nude|.*exotic|.*energy|.*libido|.*bikini|.*male|.*prescription|
.*pills|*.Enhancing|.*virility|.*luxury|.*orgasm|.*Astounding|
.*Enlarging|.*sale|.*Penis|.*Free|.*Obama|.*answer|
.*health|.*spears|.*jolie|.*discount|.*empower|
.*Pharmacy|.*dollars|.*trials|.*sexual|.*transaction|.*sales)

/var/spool/mail/spam
lo que está escrito con color azulado va en la misma línea por espacio se ven en diferentes lineas.
Espero que les sirva para su administración de correos electrónicos y ayude a dar el mejor servicio a sus usuarios.
Nota: la Distribución de Linux utilizada en este ejemplo es Oracle Linux Enterprise 4. (Basado en Redhat).

lunes, 23 de agosto de 2010

Un poco de código en C# [Llenado de TreeView]

Muchas veces necesitamos crear una estructura de árbol sin saber cual es el nivel de recurrencia de nodos hijos, en programación es posible gracias a la característica de recurrencia un pequeño ejemplo en C# de como invocar a una función desde la misma función haciendo posible la estructuración de un Treeview con una sola función.
void ReadStruct()
     {
         TreeNode node;
         treeView1.Nodes.Clear();
         node = treeView1.Nodes.Add(“Nodo padre");
         node.Tag = contenedordenodos;
         foreach (Nodo oNodo in contenedordenodos.Nodos)
         {
             AgregaNodo(oNodo,node);
         }
     }
   void AgregaNodo(Nodo oNodo,TreeNode NodeContainer)
    {
         TreeNode node;
         node = NodeContainer.Nodes.Add(oNodo.descripcion);
         node.Tag = oNodo;
        node.ImageIndex = 0;
        node.SelectedImageIndex = 1;
        foreach (Nodo oNodoX in oNodo.Nodos)
        {
             AgregaNodo(oNodoX,node);
         }
    }
Para hacer posible este tipo de estructuración creamos anteriormente una clase Serializable [Osea que permita guardar su estructura y contenido en archivos.] que contenga en forma jerargica la información de los nodos. en este caso el código con el que está  creada la clase para este ejemplo es el siguiente:
[Serializable]   //// Objetivo que se pueda guardar en un archivo esto
public class Nodo
{
    public Collection<Nodo> Nodos = new Collection<Nodo>();
    public Nodo()
    {
        descripcion = "Nuevo Nodo";
    }
}
una de las propiedades es “Nodos” que es una colección de objetos de la misma clase, lo que permite crear la estructura jerargica.
[Serializable] Permite guardar el contenido de esta clase en tiempo de ejecución teniendo la posibilidad de recuperarla y llenar el Tree tal como lo dejamos.

miércoles, 14 de julio de 2010

Compartiendo Código Fuente

Hace unos años  atrás hice un sitio para probar el servicio Site de Google, sinceramente me había olvidado de que lo había hecho, pero me di cuenta que había subido unos códigos fuentes de fragmentos de programas que pueden servir en algún momento para las aplicaciones que estén desarrollando, espero les guste y sea de su utilidad

pueden ir a la url: http://sites.google.com/site/panthersoftware/descargas

viernes, 9 de julio de 2010

Receta de Procmail para bloquear archivos adjuntos.

Esta receta les permitirá bloquear archivos adjuntos que tengan extensiones que no deseen que ingresen, ya sea por restricciones a los usuarios o para evitar que ingresen virus a nuestra red. esta receta puede ponerse en el archivo /etc/procmailrc si de desea aplicar para todos los usuarios. o en el /home/$usuario/.procmailrc para un usuario especifico.
En este Ejemplo se están bloqueando archivos con extensiones {exe,bat,pif,lnk,scr,vbs,ppt,pps,mp3} en otras palabras, programas, links, scripts, PowerPoint y música mp3.
Los correos rechazados se irán a un buzón llamado cuarentena. sin embargo podemos eliminarlos cambiando la línea   /var/mail/cuarentena por /dev/null
SUBJ=`formail -zxSubject:`
TO=`formail -zxTo:`
# Busco el remitente para el envio de auto-respuesta
:0 H
* ^From[      ]*:[    ]+\/.+
{
  FROM=`echo $MATCH|cut -d'<' -f2|cut -d'>' -f1`
}
#------------------------------------------------------------
## Se Evalua el contenido del mail
:0 H
* ^Content-Type: multipart
{
   :0 B
   * (name="\=\?iso.*\.(exe|bat|pif|lnk|scr|vbs|pps|mp3)\?\="|name=.*\.(exe|bat|pif|lnk|scr|vbs|ppt|pps|mp3)")
   {
      :0 Whc: vacation.lock
        | ( \
          echo -e "To: ${FROM}, ${TO}, sistemas@tudominio.com"; \
          echo "From: Administrador de Correos <administrador_correos@tudominio.com>" ; \
          echo "Subject: Archivo Prohibido" ; \
          echo "" ; \
          echo "El correo de la cuenta ${FROM}" ; \
          echo "" ; \
          echo "Para ${TO}" ; \
          echo "" ; \
          echo "Con el asunto: ${SUBJ}" ; \
          echo "" ; \
          echo "Fue rechazado debido a que viola la política interna de la Empresa, ya que es prohibido el envio de archivos de este tipo," ; \
          echo " por  que representan peligro de virus y spam entre otros." ; \
          echo "Si es urgente el envio y la recepcion de este correo, comuniquese con el  EL DURO DE SISTEMAS :)" ; \
          echo "" ; \
          echo "Correo: " `grep ${LOGNAME} /etc/aliases|grep -v "#"|cut -d: -f1|awk '{print $1 "@tudominio.com"}'` ; \
          echo "" ; \
          ) | $SENDMAIL -oi -t
      :0
      /var/mail/cuarentena
   }
}

jueves, 8 de julio de 2010

Oracle Real Application Testing

Esta es otra increíble herramienta de Oracle Corp. permite probar cambios de todo tipo en los sistemas en la base de datos Oracle, corrigiendo problemas que originen estos cambios sin arriesgar la Base de datos de producción.

Hasta ahora cuando queríamos hacer pruebas teníamos que tener además de una base de datos igual a la de producción un conjunto de usuarios que prueben los cambios de los sistemas para revisar que el rendimiento de la base de datos sea el mas optimo. algo que no nos daba 100% la veracidad de que la base de datos iba a funcionar bien con los nuevos cambios, ya que en las pruebas no se trabaja con la misma intensidad de los ambientes de producción, y después de una prueba supuestamente exitosa, nos causaba graves problemas en los ambientes de producción en lo que a rendimiento de base de datos se refiere.

Ahora gracias a esta herramienta podemos capturar aquellas tareas que hace la base de datos en ambientes de producción y reproducirlas en otra base de datos con la misma intensidad simulando un trabajo diario normal. y claro luego de esto la misma herramienta dice que instrucciones han mejorado el rendimiento y cuales necesitan un nuevo plan de ejecución.

Es una excelente herramienta que no le debe faltar al DBA. lamentablemente esta herramienta solo puede adquirirse para trabajar con la versión Enterprise Edition, los que tenemos Standar Edition, o Standar Edition One, tendremos que seguir con nuestras practicas manuales y esperar que Oracle o un tercero saque una herramienta similar que trabaje con estas ediciones.

Procedimiento para enviar correo desde Oracle DataBase

Este procedimiento les ayudará a enviar correo de manera sencilla desde Oracle, solo deben tener un servidor SMTP disponible. pueden realizar tareas mas avanzadas estudiando el paquete utl_smtp. espero les ayude..
CREATE OR REPLACE PROCEDURE EnviarCorreo(ENVIA IN VARCHAR2,
    RECIBE IN VARCHAR2,
    ASUNTO IN VARCHAR2,
    MENSAJE IN VARCHAR2)
    IS
    mailhost VARCHAR2(30) := ltrim(rtrim('tuhost_o_ip.com'));
    mail_conn utl_smtp.connection;
    crlf VARCHAR2( 2 ):= CHR( 13 ) || CHR( 10 );
    mesg VARCHAR2( 32767 );
BEGIN
    mail_conn := utl_smtp.open_connection(mailhost, 25);
    mesg:=-- 'Date: ' || TO_CHAR( SYSDATE, 'yyyy mm  dd  hh24:mi:ss' ) || crlf ||
    'From: <'||ENVIA||'>' || crlf ||
    'Subject: '||ASUNTO || crlf ||
    'To: '||RECIBE || crlf ||
    '' || crlf || MENSAJE;
    utl_smtp.helo(mail_conn, mailhost);
    utl_smtp.mail(mail_conn, ENVIA);
    utl_smtp.rcpt(mail_conn, RECIBE);
    utl_smtp.data(mail_conn, mesg);
    utl_smtp.quit(mail_conn);

END;
/

jueves, 1 de julio de 2010

Una pequeña Confusión en el concepto de Software Libre

Cuando hablamos de Software libre lo primero que se  nos viene a la mente es “Gratis”, es apenas comprensible tomando en cuenta la traducción de la palabra inglesa Free. que puede ser Gratis, como puede ser Libre.

Sin embargo al decir Software Libre no precisamente estamos diciendo Software Gratis. es mas, el mismo hecho de decir que el Software es gratis tampoco podemos decir de que es Libre.

El Software Libre como tal es un software que puede ser usado, estudiado, copiado y modificado sin restricciones e incluso redistribuirlo libremente. una vez que este sea adquirido. sin embargo la empresa que lo desarrolla puede cobrar lo que crea conveniente por su trabajo, Incluso Algunas empresas no cobran tampoco por el desarrollo sino por el soporte. como es el caso de RedHat. El Software Libre puede ser adoptado por las empresas, mejorarlo, y vender sus mejoras tal como hacen con Linux algunas compañías de TI. Otras empresas que desarrollan este tipo de software incluso cobran por el Software, y por el soporte, pero además proveen de código fuente para su mejora, tal es el caso de la Suite de Inteligencia de Negocios  PENTAHO.

El Software Gratis también conocido como freeware es diferente, no contamos con libertad de modificarlo y redistribuirlo como en el caso de software libre. Este tipo de software tiene Patente que no debe  ser violada, tampoco incluye el código fuente para ser modificado. Ejemplos de estos programas son MSN Messenger, SQL Server Express, Oracle XE, estas dos ultimas son ediciones gratis de las bases de datos SQL Server, y Oracle DB respectivamente cuyo costo suele ser elevado.

También es común encontrar Software Libre que también es Gratuito, como es el Caso de PHP, Apache, MySQL, TURBO CASH, Fedora Linux,  etc.

martes, 15 de junio de 2010

Kinect, nos hace jugar sin controles.

Algo que hasta hace unos años podría verse solamente en películas de ciencia ficción. ahora es posible gracias a la nueva consola de juegos de Microsoft el Kinect, este nos permite jugar sin controles, y reconoce el movimiento de nuestro cuerpo para controlar el protagonista del juego, podemos ser Lord Vader con so sable de luz o un tenista entre otras de nuestras fantasías infantiles, será presentado Los Ángeles en la convención de video juegos. y estará en las tiendas a finales de año.

Microsoft espera superar a sus competencias directas con este juego, ahora nos toca ver cuanto cuesta esta nueva maravilla tecnológica para ver si me apunto en la compra.

Fuente BBC Mundo.

http://www.bbc.co.uk/mundo/ciencia_tecnologia/2010/06/100614_1320_microsoft_natal_kinect_e3_dc.shtml

jueves, 10 de junio de 2010

Los Piratas de Sillicon Valley

En 1999 Salió esta película, film que lamentablemente no sabía que existía hasta que un día buscando una motivación para una idea, se me ocurrió buscar en internet películas sobre programadores y computación en general, y entre las paginas que visité encontré Los Piratas de Sillicon Valley, una película muy buena que cuenta la historia de como se crearon las 2 empresas mas influyentes en el mundo de la Computación tal como hoy la conocemos, Apple y Microsoft, se sentra bastante en Steve Jobs, y Bill Gates, aunque cuenta cosas mas interesantes sobre el primero.

Es una buena opción aunque para las personas que les gusta la tecnología y la historia de las computadoras, claro tuve que bajarla de internet por que no la encontré en las tiendas de video

 

Saludos.

martes, 25 de mayo de 2010

“C” Sigue siendo el más Popular

El lenguaje C sigue siendo el lenguaje mas popular a pesar de los años, seguido de cerca por Java y C++,  lenguajes que utilizan  sintaxis parecidas.

La popularidad de C posiblemente se basa a que trabaja en todas las plataformas, y arquitecturas podemos encontrar programas escritos en C desde Celulares hasta Mainframes.

En esta lista podemos ver el incremento de uso de c#, perl, Objective-C entre otros. además de ver como se mantiene el uso de Visual Basic a pesar de los años y de que ya está popularizado Visual Basic.NET. esta popularidad se basa a la facilidad de aprendizaje de Visual Basic.

la lista la pueden encontrar en el siguiente link.

http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html

viernes, 14 de mayo de 2010

Impresión con Terminal Server en Windows 2008 & Easy Print

En mi tarea de configurar el Servidor Windows 2008, para conexiones de Terminal Server me topé con una nueva característica es el Easy Print, recordemos que en el Windows 2003 Teníamos que instalar los drivers de las impresoras clientes para que el servidor pueda re direccionar las mismas a sus equipos clientes. ahora Windows 2008 trae el Easy Print, el cual nos ahorra ese trabajo haciendo un re direccionamiento mucho mas inteligente de las impresiones.
Sin embargo también me topé con otro problema, a pesar de que existe el re direccionamiento, hay una restricción en la seguridad. por lo que posiblemente cuando estemos tratando de imprimir desde sus maquinas clientes, no le salga ningún error  pero tampoco imprima. Este problema fue resuelto dando los permisos respectivos a la carpeta c:\Windows\System32\Spool\PRINTERS
Suerte.

jueves, 13 de mayo de 2010

Problemas de inicio de sesión a Terminal Server en Windows 2008

Parece ya común según lo que vi en varios foros este tipo de problemas, tenemos todo listo para conectarnos por Terminal Server, creamos un usuario en el Active Directory, lo hacemos miembro del grupo Usuarios de Escritorio Remoto pero sin embargo cuando intentamos conectarnos no podemos hacerlo.. nos sale un mensaje en el que nos dice que debemos hacerlo miembro del grupo antes mencionado.
Después de varias investigaciones en la RED y buscar en algunas ayudas se le dio solución al problema de una forma muy simple.
en la Opción:
Inicio-> Herramientas Administrativas –> Directiva de Seguridad Local
En esta consola nos vamos a la opción
Directivas locales –> Asignación de Derechos a Usuarios
Entre la lista de opciones buscar la opción “Permitir inicio de sesión a través de Terminal Server”, dar doble clic y agregar el grupo Usuarios de Escritorio Remoto.
Estas acciones deben ser suficiente para solucionar el problema.

jueves, 6 de mayo de 2010

NetworkTest

Hoy les dejo el link de un programita que hice para que me ayude a saber que todo estaba bien con mis enlaces dedicados, internet  y VPN’s.

Es un pequeño programa creado en C# 2008, en el que se agregan los dispositivos de RED y este hace test y avisa cuando uno de los puntos se queda sin conexión. los avisos se hacen por medio de sonido y por medio de mail. Requiere Microsoft .NET Framework 3.5

Aparte tienen  disponibles los fuentes del programa para que puedan mejorar o personalizar su funcionalidad.

Ojalá les sea de utilidad.

http://sourceforge.net/projects/jpnetworktest/files/

miércoles, 5 de mayo de 2010

IE Pierde terreno pero sigue liderando…

Fuente BBC Mundo

EL Internet Explorer de Microsoft pierde terreno ahora cuenta con menos del 60% de usuarios cuando hasta en el 2003 tenía el 95% según NetApplications. esta noticia fue publicada en BBC Mundo. aquí mas información…

http://www.bbc.co.uk/mundo/ciencia_tecnologia/2010/05/100504_0337_internet_navegadores_explorer_jaw.shtml

 

Saludos

jueves, 29 de abril de 2010

Compilar Objetos inválidos en Oracle

Este código le ayudará a compilar los objetos que estén con estado inválido
CREATE OR REPLACE PROCEDURE COMPILAR IS
--- Se Obtiene la Lista de Objetos Inválidos
CURSOR compila IS
SELECT 'alter '||DECODE(object_type,'PACKAGE BODY','PACKAGE',object_type)||' '||owner||'.'||object_name||' compile'||
       DECODE(object_type,'PACKAGE BODY',' BODY','') sentencia, owner, object_type, object_name
FROM ALL_OBJECTS
WHERE status<>'VALID'
ORDER BY DECODE(object_type,'PACKAGE BODY',1,0),1;
BEGIN
FOR C IN compila
    LOOP
EXECUTE IMMEDIATE C.sentencia;
END LOOP;
END;

Obteniendo información de la PC por medio de API’s desde VFP

Origen del Código news2news

CLEAR
#DEFINE MEMORYSTATUS_SIZE  32
DECLARE GlobalMemoryStatus IN kernel32;
    STRING @lpBuffer

PRIVATE cBuffer
cBuffer = REPLI(Chr(0), MEMORYSTATUS_SIZE)
= GlobalMemoryStatus(@cBuffer)
= Writeln("Memoria en USO, % ...................",  5)
= Writeln("Memoria Fisica en bytes ..........",  9)
= Writeln("Memoria Física disponible, bytes ...", 13)

PROCEDURE Writeln(cCaption, nOffs)
    LOCAL nSize
    nSize = buf2dword(SUBSTR(cBuffer,nOffs,4))
    ? cCaption + " " + ALLTRIM(TRANS(nSize, "999,999,999,999,999,999"))

FUNCTION buf2dword(cBuffer)
RETURN Asc(SUBSTR(cBuffer, 1,1)) + ;
    BitLShift(Asc(SUBSTR(cBuffer, 2,1)),  8) +;
    BitLShift(Asc(SUBSTR(cBuffer, 3,1)), 16) +;
    BitLShift(Asc(SUBSTR(cBuffer, 4,1)), 24)

Nuevo Windows Live Messenger

 

Ya está desarrollado el nuevo Windows Live Messenger, se ve interesante, juzguen por ustedes  mismos.

http://video.latam.msn.com/watch/video/nuevo-windows-live-messenger/k630364c

Imágenes sobre el Nuevo Windows Live Messenger

http://www.microsoft.com/presspass/presskits/windowslive/imageGallery.aspx

sábado, 24 de abril de 2010

Que será

Saliendo un poco de la tecnología no se si han escuchado la canción “Que Será” de José Feliciano a muchos les gusta, sin embargo en mi caso esta canción es muy especial ya que me recuerda a mi pueblo natal. Tosagua, un cantón olvidado de Manabí Ecuador… aquí les va la letra.

Pueblo mio, que estas en la colina tendido como un viejo que se muere la pena, el abandono, son tu triste compañia pueblo mio te dejo sin alegria.

Que sera, que sera, que sera que sera de mi vida, que sera si se mucho o no se nada ya mañana se vera, y sera sera, sera lo que sera.

Ya mis amigos, se fueron casi todos y los otros partiran despues que yo. Lo siento porque amaba su agradable compañia mas es mi vida tengo que marchar.

Que sera, que sera, que sera que sera, de mi vida que sera en las noches mi guitarra dulcemente sonara y una niña de mi pueblo llorara.

Amor mio me llevo tu sonrisa que fue la fuente de mi amor primero amor te lo prometo, como y cuando no lo se mas se tan solo que regresare.

 

Ojalá que la Nueva alcalde Elva Gonzales. Saque a mi pueblo adelante.

miércoles, 21 de abril de 2010

Calculadoras Básicas hecha en VFP

Pueden utilizar este pequeño ejemplo para agregarlos a las aplicaciones.

calc

Codigo en Metodo AgregarNumero

LPARAMETERS lcNumero
SET FIXED OFF
IF lcNumero#'.' THEN
    thisform.valortexto = thisform.valortexto + lcNumero
    thisform.Refresh
    nDecimal=LEN(ALLTRIM(thisform.valortexto))-IIF(RAT('.',thisform.valortexto,1)=0,LEN(ALLTRIM(thisform.valortexto)),RAT('.',thisform.valortexto,1)-1)
    thisform.txtpantalla.value=ROUND(VAL(thisform.valortexto)*thisform.factor,nDecimal)
ELSE
    IF NOT ('.'$thisform.valortexto)
        thisform.valortexto = thisform.valortexto + '.'
    ENDIF
ENDIF

 

Còdigo en cada boton de numeros

thisform.agreganumero(ALLTRIM(this.Tag)) && en cada boton la propiedad TAG debe contener el numero

Boton Suma

thisform.procigual
thisform.operacion='+'  && en el metodo procigual se usa macrosustitucion para establecer la operacion

Codigo de metodo PROCIGUAL

IF !EMPTY(thisform.operacion) THEN
    lcSigno=thisform.operacion
    thisform.ultimonumero=thisform.txtpantalla.Value
    thisform.acumulado = thisform.acumulado &lcSigno thisform.ultimonumero
    thisform.txtpantalla.Value=thisform.acumulado
    thisform.valortexto=''
ENDIF

Espero que les haya servido de mucho el ejemplo.

Enmascaramiento por IPTABLES

Esto es necesario para poder leer desde el Outlook Cuentas de gmail.com, pasando por un proxy Linux

iptables -t nat -A POSTROUTING -s 192.168.1.120 -j MASQUERADE

Solo reemplazamos la IP por la que necesitamos, y seguimos los pasos que está en la página de gmail para configurar el outlook.

Envío de Mail desde PL/SQL

CREATE OR REPLACE PROCEDURE EnviarCorreo(ENVIA IN VARCHAR2,
RECIBE IN VARCHAR2,
ASUNTO IN VARCHAR2,
MENSAJE IN VARCHAR2)
IS
mailhost VARCHAR2(30) := ‘SERVIDORSMTP’;
mail_conn utl_smtp.connection;
crlf VARCHAR2( 2 ):= CHR( 13 ) || CHR( 10 );
mesg VARCHAR2( 32767 );
BEGIN
mail_conn := utl_smtp.open_connection(mailhost, 25);
mesg:=-- 'Date: ' || TO_CHAR( SYSDATE, 'yyyy mm  dd  hh24:mi:ss' ) || crlf ||
'From: <'||ENVIA||'>' || crlf ||
'Subject: '||ASUNTO || crlf ||
'To: '||RECIBE || crlf ||
'' || crlf || MENSAJE;
utl_smtp.helo(mail_conn, mailhost);
utl_smtp.mail(mail_conn, ENVIA);
utl_smtp.rcpt(mail_conn, RECIBE);
utl_smtp.data(mail_conn, mesg);
utl_smtp.quit(mail_conn);
END;