La función prompt(), es una función de alerta de javascript, la cual tiene un comportamiento de mostrar un mensaje y a su vez un input text(caja de texto) en el cual el usuario puede capturar un texto. El texto capturado puede ser guardado en una variable y con esta realizar la acción deseada.
Se utiliza de la siguiente manera:
//El primer parametro es el texto a mostrar, el segundo es el texto por defecto en el input text
var texto = prompt("¿Cual es tu nombre?", "Texto por defecto");
//comparamos el texto obtenido, sea distinto a el texto por defecto
if(texto!="Texto por defecto")
alert("Tu nombre es: "+texto)
La función confirm() de javascript nos permite abrir una alerta en la cual tenemos la opción de confirmar o rechazar alguna pregunta, y dependiendo de la respuesta podemos hacer una acción u otra.
Se utiliza de la siguiente manera:
//la función confirm nos regresa true si es seleccionado si, sino nos regresa false.
if(confirm("¿Eres un pato?")){
alert("cua cua")
}else{
alert("no eres pato")
}
O podemos descargarla mediante Nuget poniendo su nombre (SpreadsheetLight).
Esta librería tiene una dependencia y es importante agregar la librería DocumentFormat.OpenXml pero tiene que ser la versión 2.0 ya que la más nueva 2.5 no me corrió. Para eso pueden dar clic en este enlace http://www.microsoft.com/en-us/download/details.aspx?id=5124y pueden descargar la versión 2.0. Ya instalado ese paquete ya solo van a la ruta donde se instaló que casi siempre es c:/Program Files/Open Xml SDK/V2.0/ y ya de ahí solo la agregan a sus referencias al proyecto.
A continuación pongo la siguiente clase como ejemplo con sus comentarios paso por paso.
using SpreadsheetLight;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace CreacionDeExcelSinOffice
{
class CreadorExcel
{
private string rutaArchivoCompleta = "";
public CreadorExcel(string nombreArchivo)
{
//obtenemos la ruta de nuestro programa y concatenamos el nombre del archivo a crear
rutaArchivoCompleta = AppDomain.CurrentDomain.BaseDirectory + "/" + nombreArchivo;
}
public void CrearExcel()
{
try
{
//creamos el objeto SLDocument el cual creara el excel
SLDocument sl = new SLDocument();
//creamos las celdas en diagonal
//utilizando la función setcellvalue pueden navegar sobre el documento
//primer parametro es la fila el segundo la columna y el tercero el dato de la celda
for (int i = 1; i <= 10; ++i) sl.SetCellValue(i, i, "patito "+i);
//Guardar como, y aqui ponemos la ruta de nuestro archivo
sl.SaveAs(rutaArchivoCompleta);
}catch(Exception ex){
Console.WriteLine("Ocurrio una Excepción: "+ex.Message);
}
}
}
}
Y de esta manera hacemos uso de la anterior clase.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace CreacionDeExcelSinOffice
{
class Program
{
static void Main(string[] args)
{
//creamos la clase enviandole el nombre del archivo que deseemos
CreadorExcel oCreadorExcel = new CreadorExcel("patito.xlsx");
//ejecutamos el metodo que crea el excel
oCreadorExcel.CrearExcel();
//Esto ultimo solo para verificar que todo fue bien.
Console.WriteLine("Se creo el archivo, presiona una tecla para terminar");
Console.ReadKey();
}
}
}
Para obtener los datos de conexión a una base de datos que tenemos guardados en nuestro archivo app.config o web.config (dependiendo el tipo de proyecto), haremos uso de la clase ConnectionStringSettingsCollection y ConfigurationManager.
En nuestro archivo de configuración (app.config o web.config), se encuentra una sección en la cual estan guardadas las cadenas de conexión, por ejemplo:
Para acceder a esos datos y saber cual es el servidor o el nombre de la base de datos, a continuación escribo una clase comentada paso por paso:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;
namespace Pato {
/// <summary>
/// Clase encargada de la capa de datos del modulo de configuracion de conexion
/// Héctor de León
/// 07/01/2013
/// </summary>
class Conexion {
//atributos
public string servidor = "";
public string usuario = "";
public string password = "";
public string baseDeDatos = "";
//nombre de la conexión a modificar
private string nombreConexion = "conexionPatito";
/// <summary>
/// obtiene los datos de la conexión para ser utilizados en el formulario
/// </summary>
/// <returns></returns>
public bool getData() {
bool exito = false;
// se obtienen las conexiones
System.Configuration.ConnectionStringSettingsCollection connections = ConfigurationManager.ConnectionStrings;
//si existe por lo menos una conexión continuamos
if (connections.Count != 0) {
//Recorremos las conexiones existentes
foreach(ConnectionStringSettings connection in connections) {
//asignamos el nombre
string name = connection.Name;
//obtenemos el proveedor, solo por demostración, no lo utilizaremos ni nada.
string provider = connection.ProviderName;
//obtenemos la cadena
string connectionString = connection.ConnectionString;
//comparamos el nombre al de nuestro atributo de la clase para verificar si es la cadena
//de conexión que modificaremos
if (name.Equals(nombreConexion)) {
//separamos la conexión en un arreglo tomando ; como separador
string[] sC = connectionString.Split(';');
foreach(String s in sC) {
//separamos por el simbolo = para obtener el campo y el valor
string[] spliter = s.Split('=');
//comparamos los valores
switch (spliter[0].ToUpper()) {
case "DATA SOURCE":
servidor = spliter[1];
break;
case "USER ID":
usuario = spliter[1];
break;
case "PASSWORD":
password = spliter[1];
break;
case "INITIAL CATALOG":
baseDeDatos = spliter[1];
break;
}
}
}
}
} else {
Console.WriteLine("No existe la conexión");
}
return exito;
}
}
Ahora de esta manera la podemos utilizar:
//creamos nuestro objeto
Conexion oConexion = new Conexion();
//ejecutamos el metodo
oConexion.getData();
//imprimimos el resultado
Console.WriteLine("servidor " + oConexion.servidor + " base de datos: " + oConexion.baseDeDatos + " usuario: " + oConexion.usuario + " password: " + oConexion.password);
En esta entrada tratare el tema de realizar una conexión por el protocolo Pop3 para poder leer nuestro correo electrónico, en este caso utilizare una cuenta de Gmail y obtendré los correos de la bandeja de entrada de la misma.
Para poder conectarnos haremos uso de una librería llamada OpenPop.Net que ya realiza la conexión de una manera rápida. La podemos descargar desde su página, o directamente de Nuget en visual studio buscándola por su nombre.
Es importante que realicemos en nuestra cuenta de Gmail los siguientes cambios, ya que Gmail cuenta con restricciones a clientes externos para leer los mails.
Primero(con sesión creada en gmail para hacer estos cambios claro) debemos activar la opción de permitir conexiones de aplicaciones externas en la siguiente liga:
La segunda configuración es opcional y es para que Gmailnos permita descargar varias veces los mensajes aunque sea ya leído o ya descargado, basta con que vallamos a la configuración de Gmail y seleccionemos la siguiente opción y demos guardar.
Una vez tengamos la librería y la configuración en Gmail podemos hacer uso de la siguiente clase que he escrito y comentado pasó por paso:
using OpenPop.Mime;
using OpenPop.Pop3;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.Remoting.Messaging;
using System.Text;
namespace Sincronizador_SMTP.Business.Connect
{
/// <summary>
/// clase que se conecta por smtp
/// </summary>
class ConnectPop3
{
//usuario/mail de gmail
private string username = "[email protected]";
//password
private string password = "tupassword";
//el puerto para pop de gmail es el 995
private int port = 995;
//el host de pop de gmail es pop.gmail.com
private string hostname = "pop.gmail.com";
//esta opción debe ir en true
private bool useSsl = true;
public List<Message> getMensajes()
{
try
{
// El cliente se desconecta al terminar el using
using (Pop3Client client = new Pop3Client())
{
// conectamos al servidor
client.Connect(hostname, port, useSsl);
// Autentificación
client.Authenticate(username, password);
// Obtenemos los Uids mensajes
List<string> uids = client.GetMessageUids();
// creamos instancia de mensajes
List<Message> lstMessages = new List<Message>();
// Recorremos para comparar
for (int i = 0; i < uids.Count; i++)
{
//obtenemos el uid actual, es él id del mensaje
string currentUidOnServer = uids[i];
//por medio del uid obtenemos el mensaje con el siguiente metodo
Message oMessage = client.GetMessage(i + 1);
//agregamos el mensaje a la lista que regresa el metodo
lstMessages.Add(oMessage);
}
// regresamos la lista
return lstMessages;
}
}
catch(Exception ex){
//si ocurre una excepción regresamos null, es importante que cachen las excepciones, yo
//lo hice general por modo de ejemplo
return null;
}
}
}
Y de esta manera utilizamos la clase y recorremos los mensajes, y a su vez mostramos el asunto para probar que si corresponde a lo que tenemos en nuestra cuenta de Gmail.
//creamos el objeto
ConnectPop3 oCP3 = new ConnectPop3();
//invocamos el metodo para obtener mensajes
List<OpenPop.Mime.Message> lstMensajes = oCP3.getMensajes();
//recorremos y mostramos el asunto
foreach(OpenPop.Mime.Message oMensaje in lstMensajes){
Console.WriteLine(oMensaje.Headers.Subject);
}
Nota: Pop3 al igual que IMAP es un protocolo para leer mails, si deseamos enviar mails debemos conectarnos con el protocolo SMTP.
Para obtener un hijo por su posición con jquery haremos uso de la pseudo-clase de css nth-child, esta pseudo-clase sirve para seleccionar un elemento hijo por su posición la cual tiene la siguiente sintaxis: grupoElementos:nth-child(posición).
$(function(){
//seleccionamos del conjunto de divs hijos de #muchosDivs el tercer div
$divTres=$("#muchosDivs div:nth-child(3)");
//mostramos el div seleccionado
alert($divTres.html())
})
Para realizar una búsqueda en una columna en específico de una tabla podemos hacer uso del filtro eq que nos sirve para seleccionar el número de la columna de elementos, de esta manera podemos realizar la búsqueda solo por una columna en particular.
En el siguiente ejemplo muestro como se puede buscar un valor en la primera columna, y después obtener la fila entera (por medio de la función parent() de jquery) para mostrar su resultado (o lo que deseen hacer ustedes con esos datos).
En seguida muestro el ejemplo en el cual pueden ver el resultado, y debajo el código que hace posible esta funcionalidad:
//función que realiza la busqueda
function jsBuscar(){
//obtenemos el valor insertado a buscar
buscar=$("#busqueda").prop("value")
//utilizamos esta variable solo de ayuda y mostrar que se encontro
encontradoResultado=false;
//realizamos el recorrido solo por las celdas que contienen el código, que es la primera
$("#miTabla tr").find('td:eq(0)').each(function () {
//obtenemos el codigo de la celda
codigo = $(this).html();
//comparamos para ver si el código es igual a la busqueda
if(codigo==buscar){
//aqui ya que tenemos el td que contiene el codigo utilizaremos parent para obtener el tr.
trDelResultado=$(this).parent();
//ya que tenemos el tr seleccionado ahora podemos navegar a las otras celdas con find
nombre=trDelResultado.find("td:eq(1)").html();
edad=trDelResultado.find("td:eq(2)").html();
//mostramos el resultado en el div
$("#mostrarResultado").html("El nombre es: "+nombre+", la edad es: "+edad)
encontradoResultado=true;
}
})
//si no se encontro resultado mostramos que no existe.
if(!encontradoResultado)
$("#mostrarResultado").html("No existe el código: "+buscar)
}
Nota: eq sirve para seleccionar un indice de los elementos seleccionados, como en un arreglo los corchetes []
Existen muchas personas que han aportado algo para conocer la ciencia de la computación como hoy en día la conocemos, pero hay quienes son pilares en el desarrollo de esta, veamos ocho de las personalidades que fueron pilares en el desarrollo de la computación.
Euclides (325-ca. 265 a. C.)
Euclides era un matemático griego, considerado el padre de la geometría, pero pocos saben que fue de los primeros en describir un algoritmo como tal (instrucciones o pasos a seguir para un fin, utilizados en computación). Su famoso algoritmo de Euclides descrito en su obra Elementos, sirve para encontrar el máximo común divisor de dos elementos (enlace para ver la descripción del algoritmo).
Abu Abdallah Muḥammad ibn Mūsā al-Jwārizmī (780 -850 ¿?)
El dueño de este nombre (mejor conocido como al-Juarismi) tan emblemático lo tiene el matemático persa del siglo IX, este matemático creo la palabra algoritmo derivada de algebra, palabra que nace en su obra de nombre “Kitab al jabr wa´l-muqabala” (de nombres bonitos, nacen cosas bonitas), esta obra se cree es la más antigua que habla sobre algebra, por lo cual se da el merito a Al-Juarismi de ser el padre de la misma. En este texto se expone por primera vez la resolución de ecuaciones de primer y segundo grado, y un conjunto de reglas que guían al lector para resolver problemas, dándole significado a lo que es un algoritmo, hoy utilizado en todas las computadoras del mundo.
Blaise Pascal (1623 – 1662)
Fue un matemático francés del siglo XVII, fue el creador de una de las calculadoras mecánicas más antiguas, la Pascalina. La maquina servía al inicio para sumar, pero más tarde Pascal agrego aditamentos para que permitiera restar.
Lo interesante de la Pascalina, es que es una maquina mecánica de engranes y ruedas, que permitían sumar o restar. La maquina tenía 8 ruedas (6 para los enteros y 2 para los decimales) cada una con el número del 0 al 9; la Pascalina al momento de sumar el 1 al 9, la rueda que contenía el 9 se convertía en un 0, y la rueda vecina a la izquierda se movía de la posición inicial 0 al 1, dando 10 nuestra suma.
Alonzo Church (1904 – 1995)
Matemático y Lógico norteamericano, esta persona es la responsable de crear el concepto de computación, ya que fue el primero que describió este concepto en su sistema de nombre “Calculo Lambda” (con ayuda de Stephen Kleene). El cálculo lambda nació para resolver el problema de Entscheidungsproblem (decimo problema de Hilbert). En el año de 1900, en el congreso Internacional de Matemáticos en Paris, el matemático David Hilbert planteo 23 problemas, en los cuales destaca el Entscheidungsproblem (o decimo problema de Hilbert). Hilbert buscaba un procedimiento algorítmico general para resolver un proceso matemático, y que este proceso nos dijera si la sentencia tenia solución o no. El sistema de cálculo lambda sirve para definir si una función es computable, es decir, si un problema por medio de pasos y reglas puede llegar a su solución. Se puede considerar el cálculo lambda como el más pequeño lenguaje de programación.
Alan Turing (1912 – 1954)
Mucho circula alrededor de este gran matemático, criptógrafo y experto en computación, que muchos lo recuerdan por su suicidio con la manzana envenenada con cianuro.
Se podrían escribir libros y libros sobre lo que aporto a la computación, pero existe algo que sobresale entre todo, es la famosa maquina de Turing.
Al igual que Church, Alan Turing (alumno del primero) creó su sistema para resolver el decimoproblema de Hilbert. Para resolver el problema concibió una maquina abstracta (objeto no físico), que tenía 3 elementos: una cinta de entrada, una cinta de salida y un procesador central (como los micros que tienes en tu computadora). La maquina funciona por medio de una tabla de reglas las cuales se aplican dependiendo el estado en que se encuentre la cinta, por ejemplo: si la cinta está en el estado 1 y hay una regla que nos dice que nos movamos al estado 3, la cinta se mueve y se vuelve a verificar la regla para ese estado, hasta llegar al estado final (lo cual nos diría que el problema fue resuelto). A partir de esta simple maquina hipotética, nació todo el manejo que realiza el CPU de las computadoras.
Jhon Von Neumann (1903 – 1957)
Matemático húngaro-estadounidense, es considerado uno de los más grandes matemáticos de la historia.
Su contribución en la computación radica en la Arquitectura de von Neumann. Esta arquitectura se basa principalmente en un la unidad aritmético-logica (ALU) que realiza los cálculos aritméticos, la unidad de control que se encarga de ir a la memoria principal por instrucciones para realizar, una memoria principal o memoria Ram que sirve para almacenar datos temporalmente, el sistemas de entrada/salida (un teclado de entrada o el monitor de salida por ejemplo) y el bus de datos que hace la comunicación de los datos en los distintos componentes. La mayoría de computadoras utilizan este modelo arquitectónico.
Ada Lovelace
Ada Lovelace fue la primera persona en crear un algoritmo en una maquina analítica. Por lo cual es considerada como la primer programadora y programador de la historia.
Utilizando la maquina analítica de Babbage pudo crear un algoritmo compatible con dicha maquina que resolviera los números de Bernoulli.
Dicho algoritmo escrito por Ada es también considerado el primer programa en la hitoria.
Dennis Ritchie (1941 – 2011)
Fue un científico de la computación, mejor conocido por crear junto a Ken Thompson el sistema operativo de nombre Unix, que hoy en día los hijos (directos o indirectos) que desencadeno este sistema operativo son utilizados por la mayoría de personas; ¿no me creen? algunos hijos directos o indirectos son Linux, Android, IOS y la lista de sistemas operativos llega a cuatro ceros o más. Pero antes de crear Unix,Dennis creo el lenguaje de programación más conocido en el mundo, el lenguaje C. Toda persona que se dedica a la informática, ha tenido un encuentro con este lenguaje, y algo que destaca mas (para mi claro) que haber creado el sistema operativo Unix, es que los lenguajes que utilizan los desarrolladores de software hoy en día, le deben mucho al lenguaje C, ya que fue gran influencia a lo que se utiliza en la época moderna para crear sistemas computacionales.
Estos fueron 8 personajes que sobresalen como pilares de la computación que conocemos hoy en día, no son los únicos claro, pero si son de los más relevantes. Después de las aportaciones estas personas (y algunas otras), ya conocemos todo lo demás, que gracias a ellos tenemos para nuestra comodidad en cuestión de computadoras.