codigo fuente

Conexion CSharp [C#] a MySQL

En nuestra estimada carrera que llevamos en la UPAO tenemos el curso de Programación de Aplicaciones de Gestión, más conocido como P.A.G en el cual se realizan proyectos muy interesante con Visual Studio.net [algunos VB, otros C#] donde al final dichos proyectos, deben estar implementados con conexión a base de datos y manipulación de éstos, en aquella ocasión nos enseñaron a utilizar SQL Server 2008. En la carrera, comenzamos a programar con Java, lenguaje que nos acompaña durante los 3 primeros ciclos, en 4to ciclo aprendemos Base de datos con Oracle. Me gustaría hacer un paréntesis, y mostrar que también es posible utilizar MySQL vinculado con el poder de C# en Visual Studio.net, así que sin dar más vueltas veamos como hay que hacer!

Seguir leyendo …

Crear Hash MD5, SHA en C Sharp


Los Hash son utilizados para aumentar el nivel de seguridad en los proyectos informáticos que se tenga, si antes no habías programado empleando algoritmos de encriptación hoy aprenderás! MD5, SHA1, SHA256, SHA384, SHA512.
Cabe mencionar que éstos algoritmos de encriptación “sólo son de ida” pues al obtener un Hash, no puedes conocer de dónde salió, motivo por el cual se aplican a los campos de contraseñas en las bases de datos. En el siguiente código, podemos ver cómo poco a poco se puede optimizar la forma de obtener el HASH deseado.
Seguir leyendo …

Programando en C Sharp – VI

Para concluir con el bloque de programación básica en C#, les he compartido un “mini proyecto” hecho en Visual Studio 2010; se emplea un objeto Persona con 3 atributos: dni, nombre y edad, los cuales están validados respectivamente, se emplea una lista “List personas = new List ();” para almacenar los datos, se cuenta con un menú de presentación de opciones para que el usuario seleccione, métodos Set y Get, y los métodos de agregar, modificar, buscar, eliminar, reportar [los clásicos de toda la vida]; traté en lo posible comentar el código, espero puedan entenderlo, y sin más rodeos, veamos el código:
Seguir leyendo …

Algoritmo en C Sharp

Tiempo atrás llevé el curso de Sistemas Operativos, donde aprendí a codificar scripts ubunteros en aquellas clases la profesora nos enseñaba programación básica en bash, de todos los ejercicios que dejó, uno de ellos no pude resolver a tiempo, sin embargo encontré la solución al día siguiente mientras estaba conversando con una de mis amigas, pues gracias a las palabras que ella me dijo: “Piensa en qué necesitas, luego ves cómo haces“, las ideas llegaron a mi mente de una manera alucinante, recordé la clase de simulación de algoritmos del curso de matemática discreta, con cuaderno abierto y lapicero en mano, jugué con algunas variables, pensé cómo resolver el ejercicio desde otro punto de vista y listo!!!  Veamos el resultado del análisis del enunciado…
Seguir leyendo …

Programando en C Sharp – 05


Un array [arreglos/matrices] es una estructura de datos que contiene diversas variables del mismo tipo que comparten un nombre en común, a los cuales se puede acceder por la posición [en referencia a un índice] que ocupa cada uno de ellos en la matriz, ésta puede ser de una ó múltiples dimensiones, tal y como se ve en la imagen: a la izquierda tenemos una matriz 4×4 [recordemos un poco de matemática básica] lo que nos da 16 elementos contando desde el 0 hasta el 15, y  la derecha la representación en memoria de la computadora; para declarar un arreglo en C# se tiene la siguiente sintaxis:


//Declaración de un array
string[] nombres;
//Instanciación del arreglo
nombres = new string[3];

// Declaración de un arreglo simple
int[] array1 = new int[5];

// Declaración y definición de elementos del arreglo
int[] array2 = new int[] { 1, 3, 5, 7, 9 };

// Sintaxis alternativa
int[] array3 = { 1, 2, 3, 4, 5, 6 };

// Arreglo de 2 dimensiones
int[,] multiDimensionalArray1 = new int[2, 3];

// Declaramos y definimos los elementos
int[,] multiDimensionalArray2 = { { 1, 2, 3 }, { 4, 5, 6 } };

En esta ocasión veremos arreglos unidimensionales, nos acompaña un ejemplo donde se visualiza los métodos de agregar, modificar, listar, buscar y eliminar elementos de un arreglo, vamos!
Seguir leyendo …

Programando en C Sharp – 04

Saludos lectores, hoy vamos aprendiendo un poco más de programación nivel básico; revisaremos las estructura repetitiva “while” y “do while“; ¿Cuál es la diferencia? -El do while se ejecuta por lo menos una vez el bucle y luego se comprueba la condición, mientras que el while, primero se comprueba la condición y luego si es verdadera se ejecuta el bucle.
Veamos un ejemplo usando la cadena matemática “Fibonacci :Seguir leyendo …

Windows Script Host + Active Directory – Parte 2

Y continuando con los Scripts para administrar el Active Directory en Windows Server 2008; recordemos un poco de programación: Para ejecutar un Query a una base de datos, primero necesitamos conectarnos a dicha base mediante algún driver, en este caso va del siguiente modo:
Seguir leyendo …

Windows Script Host + Active Directory

A ver, este es el plan: vamos aprendiendo algo simple y muy útil sobre Windows Server 2008: Creación de VBScripts para administrar nuestro Active Directory,veamos:

Set objDomain=GetObject("LDAP://dc=ifxperu, dc=com")

Con el Set estamos declarando la variable, en este caso se denominada objDomain a la cual le estamos asignando la ubicación principal de nuestro dominio.

mensaje = Inputbox("Ingrese un mensaje para mostrar")

Un Inputbox es realmente útil, especialmente para indicar alguna decisión de un Select Case, ahora para mostrar lo escrito en el mensaje, se necesita de un messagebox:

msgbox(“mensaje”)

Para concatenar variables/mensajes se requiere un [&] en algunos casos solo es necesario uno, en otros casos se requieren 2 [&] que estén “encerrando” a la variable, en el siguiente se resaltan los bloques que deben estar entre comillas.

nombre =Inputbox("Ingrese su nombre:")
edad = Inputbox("Su edad:")
msgbox("Hola " &nombre& ",tienes " &edad& "años")
msgbox("Hasta luego " &nombre)

En el Active Directory, una de las estructuras que más se utilizan son las Unidades Organizacionales, conocidas como “OUs”, para crearlas de manera manual, vamos viendo la siguiente línea:

Set objOU = objDomain.Create(“organitazionalUnit”,”ou=Editores”)

Pero! Al momento de crear el script, primero debemos especificar su ubicación [LDAP], es decir emplear la primera línea mencionada al inicio y para que la variable sea almacenada, se requiere un SetInfo:
objOU.SetInfo
Ahora bien, si vamos a diseñar un Script que permita mediante un Inputbox registrar el nombre de una OU, tendremos lo siguiente:

Set objDomain = GetObject("LDAP://dc=ifxperu, dc=com")
nombreOU= Inputbox("Ingrese nombre de la OU: ")
Set objOU = objDomain.Create("organizationalUnit","ou="&nombreOU)
objOU.SetInfo
msgbox("Unidad Organizacional " &nombreOU& “ : creada!”)

Continuando con los scripts, el FOR tiene 3 secciones, la primera donde se declara, desde dónde comienza hasta su fin, seguido de lo que se vaya a ejecutar, en este caso te saludará 5 veces [LOL] para que finalice la secuencia actual y continue con la siguiente, se emplea un NEXT.

For i=1 to 5
msgbox("hola " &i)
Next

El Do Loop while, va de la siguiente forma:

Do
res = Inputbox("Desea repetir la operación? [S/N]")
Loop while res="s"

Revisando al Select Case, le asignamos un menú de navegación empleando un simple inputbox con todas las opciones:

Do
opcion=Inputbox("Menu IFXPERU" & vbcrlf &  _
	vbcrlf & "[1] Opción 01 " & vbcrlf & _
	vbcrlf & "[2] Opción 02 " & vbcrlf  & _
	vbcrlf & "[6] Salir del programa " & vbcrlf)
Select Case opcion
	Case”1”
		msgbox(“Opcion 01”)
	Case “2”
		msgbox(“Opcion 02”)
End Select
Loop while opcion <>6

Para Crear usuarios, se tiene que tener en cuenta los diversos campos con lo que se trabajará, utilizaremos lo mencionado al inicio para determinar en qué OU crearemos al usuario, asignándole nombre completo, login, password y de paso habilitando su cuenta:

nom = Inputbox("Especificar OU: ")
Set objDomain=GetObject("LDAP://ou="&nom&", dc=ifxperu, dc=com")
userFullName = Inputbox("Nombre completo de usuario:")
Set oUSR= objDomain.Create("user", "cn="&userFullName)
userLoginName= Inputbox("Nombre de login")
oUSR.Put "samAccountName", userLoginName
oUSR.SetInfo
userPassword=Inputbox("Asignar contraseña:")
oUSR.SetPassword "&userPassword"
oUSR.AccountDisabled=false
oUSR.SetInfo
msgbox(“Usuario ” &userLoginName& “ : creado!”)

Hasta el primer oUSR.SetInfo tenemos la información básica, luego “actualizamos” nuevamente con otro SetInfo.

Referencias: Microsoft Technet Script Center

Saludos!

Algunas curiosidades -o tips- en el lenguaje PHP

No sé si definirlas como curiosidades, en realidad vendría a ser algo así como datos interesantes o por el estilo, pero bueno, así los encontré en internet y hoy los comparto aquí por si a alguien le sirva. La mayoría de ‘curiosidades’ se evocan a cómo es que haciendo tal o cual cosa se mejora el rendimiento del servidor, que es más rápido en ejecutarse, y algunos que otros en que se puede aprovechar un poco más este muy buen lenguaje.

Nota: Aparte del post en donde saque estas curiosidades, estoy linkeando algunas funciones al manual PHP online para despejar cualquier duda.

1.- Muchas veces cuando queremos pasar variables de un formulario a otro para procesar información ingresada por el cliente, usamos las variables $_POST y $_GET, la diferencia de ambas es que en $_GET se ven en el link las variables que se envían, mientras que en $_POST no. Por lo que en PHP tendríamos que recibir una variable así:

//Suponiendo que enviamos desde un formulario HTML a un control PHP
$MiVariableRecibida = $_POST["txtParaEnviar"]; //Asumiendo que'txtParaEnviar' es un control de formulario.
$MiVariableRecibida = $_GET["txtParaenviar"]; 

Dependiendo claro como se define en el formulario con el atributo method (ejm. method=”GET”). La curiosidad aquí es que si no sabemos cómo recibirla, o nos da lo mismo cualquiera de las dos formas, podríamos recibirla como  $_REQUEST. Asi:

$MiVariableRecibida = $_REQUEST["txtParaEnviar"]; 

Nota del tip: Sirve también para $_COOKIE.

Seguir leyendo …

Palíndromos en Java

Un palíndromo es una palabra, número o frase que se lee igual de izquierda a derecha o de derecha a izquierda. Un ejemplo clásico es “Dábale arroz a la zorra el abad”, o como dijeron en los Simpson “Anita lava la tina”. También palabras como “ala” o números como “2002″.

Lo que este código hace es leer una línea y ver si ordenándola de alguna manera se puede generar un palíndromo, por ejemplo “Yoga hoy yo hago” NO es un palíndromo, pero si lo ordenamos de esta forma “Yo hago yoga hoy” obtenemos una frase que SI es un palíndromo. Para hacer esto me resultó útil parte del código que publiqué en el post “Anagramas en Java” ya que lo que hago es probar todas las conjugaciones que se pueden hacer con las palabras de la frase ingresada y luego ver si alguna(s) de ellas es un palíndromo.

Es una solución que usa fuerza bruta y se puede mejorar fácilmente, por ejemplo detectando si para la primera palabra de una conjugación hay otra palabra que acabe con la misma letra (“Sx xxxx xx xx xx xxs”) y no hacer conjugaciones en vano, pero esa es otra historia.

Este código lee un número n de casos y luego imprime los parónimos que se pueden obtener ordenando las palabras de alguna manera. Para evitar palíndromos repetidos (por ejemplo si ponemos “a a b” podríamos tener 2 veces “a b a” – “a b a”) seguí la recomendación de Pedro en “Anagramas en Java” y almacené todos los palídromos en un Set y así evitamos los repetidos =D. Si no hay ningún palíndromo posible se muestra el mensaje “imposible”.

PD: El código no funciona con tildes (bienvenido el que quiera agregar los replace() ).

import java.io.*;
import java.util.HashSet;

public class Palindromos {
    public static void main(String[] args) throws IOException {
        BufferedReader br=new BufferedReader(new
        InputStreamReader(System.in));
        System.out.println("Ingrese el numero de lineas:");
        int nro= Integer.parseInt(br.readLine());
        for (int i=0;i<nro;i++){
            String cadena=br.readLine();
            //Pasamos todas las letras a mayuscula para no hacer distincion
            cadena=cadena.toUpperCase();
            //Un arreglo con cada palabra
            String[] palabras=cadena.split(" ");
            //Una variable de control para el método recursivo
            //que se va a usar
            int veces=0;
            //Un arreglo de cadenas que se usará para
            //hacer conjugaciones
            String[] conjugacion= new String[palabras.length];
            //Un Set donde se almacenarán las conjugaciones
            //y permitirá identificar repetidos
            HashSet<String> palindromos=new HashSet<String>();
            //El méttodo recursivo
            conjugar(palabras, veces,conjugacion,palindromos);
            //Output
            if (palindromos.isEmpty()){
                System.out.println("imposible");
            }else{
                System.out.println("Palindromos encontrados: ");
                for(String pal:palindromos){
                    System.out.println("- "+pal);
                }
            }
        }
    }

    public static void conjugar(String[] palabras, int veces,
            String[] conjugacion, HashSet<String> palindromos){
        //Si la conjugacion está completa, probamos si es palíndromo
        if (veces==palabras.length){
            probarPalindromo(conjugacion,palindromos);
            return;
        }
        //Desde aquí es casi idéntico que el código del anagrama
        veces++;
        for (int i=0; i<=palabras.length-1;i++){
            if (palabras[i].compareTo("@")==0){
                continue;
            }else{
                String palabraAuxiliar=palabras[i];
                conjugacion[veces-1]=palabraAuxiliar;
                palabras[i]="@";
                conjugar(palabras,veces,conjugacion,palindromos);
                palabras[i]=palabraAuxiliar;
            }
        }
    }

    public static void probarPalindromo(String[] conjugacion,
            HashSet<String> palindromos){
        //Armamos una cadena en base al arreglo de Strings
        //La cadena no tendrá espacios entre letras,
        //ya que para ser palíndromo
        //estas no se toman en cuenta
        String cadena1="";
        for (String s:conjugacion){
            cadena1=cadena1+s;
        }
        int veces;
        //Luego lo pasamos a un arreglo de caracteres
        //para hacer las comparaciones
        //Esto se puede hacer de varias maneras
        char[] carac=cadena1.toCharArray();
        int longitud=carac.length;
        if (longitud % 2==0){
            veces=longitud/2;
        }else{
            veces=(longitud-1)/2;
        }
        //Una bandera que indica que no es palindromo
        boolean flagNoPalindromo=false;
        for(int i=0;i<=veces;i++){
            //La idea es comparar el primer caracter con el último
            //Luego el segundo con el penúltimo, etc etc
            if (carac[i]==carac[longitud-i-1]){
            }else{
                flagNoPalindromo=true;
            }
        }
        if (flagNoPalindromo==true){
            return;
        }
        //Armamos otra cadena, ahora los espacios entre letras
        String cadenaSalida="";
        for (String s:conjugacion){
            cadenaSalida=cadenaSalida+s+" ";
        }
        //Finalmente le damos un poco de formato y lo agregamos al Set
        String cadenaFormateada=cadenaSalida.substring(0,1)+
                cadenaSalida.substring(1,
                cadenaSalida.length()-1).toLowerCase();
        cadenaFormateada="\""+ cadenaFormateada+"\"";
        palindromos.add(cadenaFormateada);
    }
}