Corriendo Wordpress ¿En SQL Server?

Creo que la posibilidad de correr Wordpress con SQL Server será del agrado de muchos, ya que por fin existe una solución tanto de forma local como en la nube mediante el uso de Windows Azure SQL Azure.


Existen dos formas de realizar la instalación:




  • Distribución: esta es la forma más fácil de empezar. Incluye la última versión de Wordpress con el parche de SQL Server ya aplicado.

  • Parche: son únicamente los archivos modificados, mismos que pueden ser aplicados a la versión de Wordpress que descargues.


El propósito de este parche es proporcionar una abstracción en la estructura de la base de datos dentro de Wordpress, causando un mínimo de errores en el core de Wordpress y sin perdidas en las características del CMS.


El tutorial completo de instalación consta tan sólo de 8 pasos.


Enlace: Download WordPress on SQL Server Distro & PatchWordpress on MicrosoftGetting Started

Microsoft Visual Studio 2010 En Castellano

Visual Studio 2010 es la nueva versión del entorno de desarrollo integrado para sistemas Windows que incorpora nuevas características mejoradas que hacen que todo el proceso de desarrollo, desde el diseño a la implementación, sea más sencillo.

Con este lanzamiento Visual Studio 2010 cuenta con versiones en inglés, francés, alemán, japones y español.

Visual Studio 2010 dispone de las soluciones, 2010 Profesional, 2010 Premium, 2010 Ultimate y Test Profesional 2010 que podrás compararse desde www.microsoft.com.

Interesados pueden encontrar más información acerca de Visual Studio 2010 así como acceder a la compra o descarga de una versión de prueba desde www.microsoft.com.

¿Que diablos es foobar?

Hola que tal SQLeros, me da mucho gusto que me estén leyendo en este post. Ahora hablaremos un poco de  los terminos  foobarfoobar, and baz,  esta palabra, ¿cosa?, ¿termino?, o lo que sea que se usa en la jerga informatica desde ya hace tiempo.


Pero apoco nunca se han preguntado (que chingaos) ¿cual es su significado?


Buscando un poco por la Internet, me he encontrado muchas cosas muy interesantes (y que realmente me han sorprendido) como:


la definición de la Wikipedia nos dice:



Foo es un término genérico ampliamente usado para aludir a cualquier entidad informática cuyo nombre se ignora o no se quiere expresar. Por sí misma la palabra foo no tiene un significado preciso, solamente es una representación lógica en el sentido en que las letras xy se usan en álgebra para representar un número desconocido.

La palabra foo aparece en el idioma inglés como un neologismo dada su popularidad en describir conceptos en las ciencias informáticas y muchas personas la consideran un ejemplo canónico de una variable metasintáctica. Se usa de forma amplia en la literatura informática anglosajona, generalmente en los ejemplos de programaciónpseudocódigo. La Real Academia Española no reconoce esta palabra como parte del idioma español.

El origen de tal palabra no está muy claro porque tiene antecedentes muy complicados, incluyendo una larga historia en los guiones decómicscaricaturas. Sintácticamente podría ser una abreviación de File Or Object.

Tal como se pueden nombrar a personas desconocidas como fulanomenganoperenganocitranozutano, en la informática también existe una familia de palabras como foobarfoobarbaz.

foobar en Facebook


¡Un RFC sobre la etimología del Foo!


Tambien como lo explica la wikipedia y demas definiciones es usada para describir, objetos, elementos o alguna cosa que es muy trivial o no tiene ninguna relevancia en el contexto.


Para dar ejemplos de código, configuraciones y demás aplicaciones en las que se muestra el comportamiento mas no el valor del elemento, objeto, cosa.


[sourcecode lang="php"]
< ?php
if($foo>$bar):
echo $foo;
endif;
?>
[/sourcecode]

Un Saludo!

El móvil de Hansel y Gretel

Anoche le contaba a la Nina un cuento infantil muy famoso, el Hansel y Gretel de los hermanos Grimm. En el momento más tenebroso de la aventura los niños descubren que unos pájaros se han comido las estratégicas bolitas de pan, un sistema muy simple que los hermanitos habían ideado para regresar a casa.Hansel y Gretel se descubren solos en el bosque, perdidos, y comienza a anochecer. Mi hija me dice, justo en ese punto de clímax narrativo: “No importa. Que lo llamen al papá por el móvil”.


Yo entonces pensé, por primera vez, que mi hija no tiene una noción de la vida ajena a la telefonía inalámbrica. Y al mismo tiempo descubrí qué espantosa resultaría la literatura —toda ella, en general— si el teléfono móvilhubiera existido siempre, como cree mi hija de cuatro años. Cuántos clásicos habrían perdido su nudo dramático, cuántas tramas hubieran muerto antes de nacer, y sobre todo qué fácil se habrían solucionado los intríngulis más célebres de las grandes historias de ficción.
Piense el lector, ahora mismo, en una historia clásica, en cualquiera que se le ocurra. Desde la Odisea hasta Pinocho, pasando por El viejo y el mar, Macbeth, El hombre de la esquina rosada o La familia de Pascual Duarte. No importa si el argumento es elevado o popular, no importa la época ni la geografía.


Piense el lector, ahora mismo, en una historia clásica que conozca al dedillo, con introducción, con nudo y con desenlace.


¿Ya está?
Muy bien. Ahora ponga un teléfono móvil en el bolsillo del protagonista. No un viejo aparato negro empotrado en una pared, sino un teléfono como los que existen hoy: con cobertura, con conexión a correo electrónico y chat, con saldo para enviar mensajes de texto y con la posibilidad de realizar llamadas internacionales cuatribanda.


¿Qué pasa con la historia elegida? ¿Funciona la trama como una seda, ahora que los personajes pueden llamarse desde cualquier sitio, ahora que tienen la opción de chatear, generar videoconferencias y enviarse mensajes de texto? ¿Verdad que no funciona un carajo?


La Nina, sin darse cuenta, me abrió anoche la puerta a una teoría espeluznante: la telefonía inalámbrica va a hacer añicos las nuevas historias que narremos, las convertirá en anécdotas tecnológicas de calidad menor.


Con un teléfono en las manos, por ejemplo, Penélope ya no espera con incertidumbre a que el guerrero Ulises regrese del combate.


Con un móvil en la canasta, Caperucita alerta a la abuela a tiempo y la llegada del leñador no es necesaria.


Con telefonito, el Coronel sí tiene quién le escriba algún mensaje, aunque fuese spam.


Y Tom Sawyer no se pierde en el Mississippi, gracias al servicio de localización de personas de Telefónica.


Y el chanchito de la casa de madera le avisa a su hermano que el lobo está yendo para allí.


Y Gepetto recibe una alerta de la escuela, avisando que Pinocho no llegó por la mañana.


Un enorme porcentaje de las historias escritas (o cantadas, o representadas) en los veinte siglos que anteceden al actual, han tenido como principal fuente de conflicto la distancia, el desencuentro y la incomunicación. Han podido existir gracias a la ausencia de telefonía móvil.


Ninguna historia de amor, por ejemplo, habría sido trágica o complicada, si los amantes esquivos hubieran tenido un teléfono en el bolsillo de la camisa. La historia romántica por excelencia (Romeo y Julieta, de Shakespeare) basa toda su tensión dramática final en una incomunicación fortuita: la amante finge un suicidio, el enamorado la cree muerta y se mata, y entonces ella, al despertar, se suicida de verdad. (Perdón por el espoiler.)


Si Julieta hubiese tenido teléfono móvil, le habría escrito un mensajito de texto a Romeo en el capítulo seis:


M HGO LA MUERTA,PERO NO STOY MUERTA.NO T PRCUPES NIHGAS IDIOTCES. BSO.


Y todo el grandísimo problemón dramático de los capítulos siguientes se habría evaporado. Las últimas cuarenta páginas de la obra no tendrían gollete, no se hubieran escrito nunca, si en la Verona del siglo catorce hubiera existido la promoción “Banda ancha móvil” de Movistar.


Muchas obras importantes, además, habrían tenido que cambiar su nombre por otros más adecuados. La tecnología, por ejemplo, habría desterrado por completo la soledad en Aracataca y entonces la novela de García Márquez se llamaría ’Cien años sin conexión’: narraría las aventuras de una familia en donde todos tienen el mismo nick (buendia23, a.buendia, aureliano_goodmornig) pero a nadie le funciona el messenger.


La famosa novela de James M. Cain —’El cartero llama dos veces’— escrita en 1934 y llevada más tarde al cine, se llamaría ’El gmail me duplica los correos entrantes’ y versaría sobre un marido cornudo que descubre (leyendo el historial de chat de su esposa) el romance de la joven adúltera con un forastero de malvivir.


Samuel Beckett habría tenido que cambiar el nombre de su famosa tragicomedia en dos actos por un título más acorde a los avances técnicos. Por ejemplo, ’Godot tiene el teléfono apagado o está fuera del área de cobertura’, la historia de dos hombres que esperan, en un páramo, la llegada de un tercero que no aparece nunca o que se quedó sin saldo.


En la obra ’El jotapegé de Dorian Grey’, Oscar Wilde contaría la historia de un joven que se mantiene siempre lozano y sin arrugas, en virtud a un pacto con Adobe Photoshop, mientras que en la carpeta Images de su teléfono una foto de su rostro se pixela sin remedio, paulatinamente, hasta perder definición.


La bruja del clásico ’Blancanieves’ no consultaría todas las noches al espejo sobre “quién es la mujer más bella del mundo”, porque el coste por llamada del oráculo sería de 1,90€ la conexión y 0,60€ el minuto; se contentaría con preguntarlo una o dos veces al mes. Y al final se cansaría.


También nosotros nos cansaríamos, nos aburriríamos, con estas historias de solución automática. Todas las intrigas, los secretos y los destiempos de la literatura (los grandes obstáculos que siempre generaron las grandes tramas) fracasarían en la era de la telefonía móvil y del wifi.


Todo ese maravilloso cine romántico en el que, al final, el muchacho corre como loco por la ciudad, a contra reloj, porque su amada está a punto de tomar un avión, se soluciona hoy con un SMS de cuatro líneas.


Ya no hay ese apuro cursi, ese remordimiento, aquella explicación que nunca llega; no hay que detener a los aviones ni cruzar los mares. No hay que dejar bolitas de pan en el bosque para recordar el camino de regreso a casa.


La telefonía inalámbrica —vino a decirme anoche la Nina, sin querer— nos va a entorpecer las historias que contemos de ahora en adelante. Las hará más tristes, menos sosegadas, mucho más predecibles.


Y me pregunto, ¿no estará acaso ocurriendo lo mismo con la vida real, no estaremos privándonos de aventuras novelescas por culpa de la conexión permanente? ¿Alguno de nosotros, alguna vez, correrá desesperado al aeropuerto para decirle a la mujer que ama que no suba a ese avión, que la vida es aquí y ahora?


No. Le enviaremos un mensaje de texto lastimoso, un mensaje breve desde el sofá. Cuatro líneas con mayúsculas. Quizá le haremos una llamada perdida, y cruzaremos los dedos para que ella, la mujer amada, no tenga su telefonito en modo vibrador. ¿Para qué hacer el esfuerzo de vivir al borde de la aventura, si algo siempre nos va a interrumpir la incertidumbre? Una llamada a tiempo, un mensaje binario, una alarma.


Nuestro cielo ya está infectado de señales y secretos: cuidado que el duque está yendo allí para matarte, ojo que la manzana está envenenada, no vuelvo esta noche a casa porque he bebido, si le das un beso a la muchacha se despierta y te ama. Papá, ven a buscarnos que unos pájaros se han comido lasmigas de pan.


Nuestras tramas están perdiendo el brillo —las escritas, las vividas, incluso las imaginadas— porque nos hemos convertido en héroes perezosos.


por Hernán Casciari

El Kamasutra y La Criptografia

Esta visión general de varios algoritmos criptográficos es una historia cronológica de la criptografía, cuyos orígenes se remontan a la antigüedad y que con el tiempo ha sido objeto de constante evolución.

Ten en cuenta que este cuadro no es completo.

El primer texto escrito data de hace más de 6000 años. El arte del cifrado ha existido desde hace cerca de 3000 años.







































































































































































































































































































c. 1900 ACEn el antiguo Egipto se usaron símbolos que no eran los normales.
c. 1500 ACLos fenicios diseñaron un alfabeto.
c. 1000 ACSe usaron otros símbolos distintos a los normales en la antigua Mesopotamia.
c. 600 ACEn Palestina se cifran textos usando un algoritmo simple de sustitución monoalfabética Atbash.
c. 500 ACLos espartanos cifran mensajes utilizando Scytale.
c. 400 ACEl Kamasutra describe un algoritmo de cifrado por sustitución monoalfabética.
c. 200 ACEl historiador griego Polybius describe el cifrado de Polybius por primera vez.
c. 100-44 ACJulio César inventa un código para cifrar sus mensajes (el Código César). Éste es el algoritmo de sustitución monoalfabética más conocido.
c.500-1400DCLa "edad oscura de la criptografía" empieza en Europa: Durante este periodo la criptografía es considerada como magia negra y se pierde gran parte del conocimiento que se tenía hasta la época. Por otro lado, la criptografía florece en Persia.
855 DCAparece el primer libro sobre criptografía en Arabia. Entre otras cosas, Abu 'Abd al-Raham al-Khahil ibn Ahmad ibn'Amr ibn Tammam al Farahidi al-Zadi al Yahamadi (Abu-Yusuf Ya’qub ibn Ishaq al-Kindi, conocido como Al-Kindi) describe orgulloso en su libro un mensaje griego descifrado que es deseado por el emperador bizantino. Su criptoanálisis se ha basado en un análisis de frecuencia ayudado con el conocimiento de una pequeña porción del comienzo del texto original -- este mismo criptoanálisis es el que se empleará en la Segunda Guerra Mundial contra Enigma.
1379El papa Clemente VII ha escapado a Avignion y ha ordenado a su secretario, Gabrieli di Lavinde (Parma), diseñar un nuevo código para cifrar sus mensajes. Este código consiste en una combinación de sustituciones de letras individuales y palabras codificadas. Gabrieli ha creado una lista de las palabras más comunes que son sustituidas por combinaciones de dos letras y el resto de palabras que no están en la lista son cifradas utilizando sustitución monoalfabética.
Debido a la sencillez de este código, será utilizado durante los próximos 450 años, sobre todo en los círculos diplomáticos.
1412En Arabia se escribe una enciclopedia con 14 tomos en donde se explican conceptos de criptografía. En ella, además de las técnicas de sustitucióntransposición, se explica un método consistente enrepetidas sustituciones de cada carácter del texto claro. Es la primera vez en la historia que habla de un método como éste.
Siglo XVEn Italia se produce un boom de la criptografía debido un alto desarrollo de la vida diplomática.
1466Leon Battista Alberti, uno de las figuras líderes del Renacimiento Italiano, publica su libro "Modus scribendi in ziferas", en donde habla por primera vez del disco de Alberti, el primer sistema polialfabético que se conoce. Alberti es el secretario de un cuerpo oficial perteneciente a la corte papal que se encarga únicamente de labores relacionadas con la criptografía. Por todo esto, Alberti será conocido como el "padre de la criptografía".
1518Se imprime el primer libro sobre criptografía cuyo título es "Polygraphia libri sex", escrito por el abad Johannes Trithemius en lengua alemana. En este libro también se describen cifrados polialfabéticos con las nuevas tablas de sustitución rectangulares.
1563Giovanni Battista Porta publica "De Furtivis Literarum Notis", un libro en el que describe distintos métodos de cifrado y criptoanálisis. En él se menciona el primer cifrado por sustitución digráfica.
Finales del s.XVIFrancia toma la delantera en criptoanálisis.
1577El brillante criptoanalista flamenco Van Marnix cambia el rumbo de la historia europea al descifrar una carta española en donde se explicaban los planes para conquistar Inglaterra enviando tropas desde los Países Bajos.
1585El diplomático francés Blaise de Vigenère publica su libro "Tractié de Chiffre" en donde presenta el primer sistema polialfabético con autoclave, conocido como "Le chiffre indéchiffrable" aunque más adelante se le cambiará el nombre por el de el cifrado de Vigenère.
La idea de la autoclave perdurará en el tiempo y se aplicará en los algoritmos futuros como el DES en los modos CBC y CFB.
1586Se intenta llevar a cabo el complot Babington por el cual se asesinaría a la reina Elisabeth I de Inglaterra y se colocaría en el trono a Mary Stuart, Reina de Escocia. El "Servicio Secreto Británico" pone fin a esta trama y consigue los nombres de los conspiradores, condenando a Mary Stuart.
Mary se comunicaba a través de cartas con sus conspiradores. Pero el mensajero, que era un espía de Elisabeth realizaba copias exactas de cada carta y las enviaba a Francis Walsingham, secretario del estado de Elisabeth, que a través de Thomas Phelippes consiguió descifrarlas revelando el complot.
Pero la cosa no quedó ahí, Walsingham quería saber la identidad de los conspiradores por lo que hizo que Phelippes añadiera una posdata a una carta, de manera que en la respuesta a la carta, Mary incluyó el nombre de los implicados.
Siglo XVIIComienza la era de las cámaras negras. La mayoría de los gobiernos disponen de departamentos en donde profesionales se encargan de romper los cifrados a los que tienen acceso.
1623Sir Francis Bacon describe un método de esteganografía: cada letra del texto claro es reemplazada por un grupo de cinco letras formado por una combinación de las letras 'A' y 'B' que se intercalan en un texto normal con una fuente diferente. Este método es el precursor del que luego será conocido como codificación birania de 5 bits.
1628Antoine Rissignol se convierte en el primer criptoanalista contratado a tiempo completo tras descifrar un mensaje del enemigo gracias al cual se puso fin al sitio que los hugonotes ejercían sobre Realmont. Desde entonces, el papel del criptoanalista ha sido fundamental en toda organización militar.
1700El zar de Rusia utiliza una gran tabla de códigos de 2000-3000 sílabas y palabras para cifrar sus mensajes.
1795Thomas Jefferson diseña el primer dispositivo de cifrado cilíndrico, conocido como la "rueda de Jefferson". Sin embargo, no lo utilizará nunca, por lo que caerá en el olvido o, más bien, no se llegará a hacer público.
1854El matemático inglés Charles Babbage inventa un dispositivo de cifrado cilíndrico similar al de Jefferson. Además, descubre un método de criptoanálisis para romper el, hasta ahora conocido, "cifrado irrompible" que diseñó Vigenère. Es por ello que a partir de este momento se conocerá como el cifrado de Vigenère, aunque en realidad esto no se hará público hasta su muerte ya en el siglo XX.
Siglo XIXLa criptología encuentra un lugar en la literatura: Arthur Conan Doyle, Julio Verne, Edgar Allan Poe...
1854El físico inglés Charles Wheatstone inventa un cifrado que utiliza una matríz de 5x5 como clave. Su amigo, Lord Lyon Playfair, barón de Saint Andrews lo hace público en círculos militares y diplomáticos y, por ello, se conocerá como el cifrado de Playfair.
1863Friedrich Kasiski (1805-1881), un importante prusiano, desarrolla métodos estadísticos de criptoanálisis que fueron capaces de romper el cifrado de Vigenère.
1883Se publica "La Cryptographie militaire" de Auguste Kerckhoff von Nieuwendhoff. Esto supondrá un hito en la criptografía telegráfica de la época. Contiene el "principio de Kerckhoff", que exige basar la seguridad de un método de cifrado únicamente en la privacidad de la clave y no en el algoritmo.
1891El francés Etienne Bazeries inventa un dispositivo cilíndrico conocido como el cilindro Bazeries que, en principio, es similar a la rueda de Jefferson. Se publicará su diseño en el año 1901, después de que el Ejército francés lo rechace.
1917El descifrado de los telegramas de Zimmermann por el Servicio Secreto Inglés provocó la crítica entrada de los EEUU en la Primera Guerra Mundial
1917El americano Gilbert S. Vernam, empleado de AT&T, desarrolla la cinta aleatoria de un sólo uso, el único sistema criptográfico seguro.
1918El criptoanalista francés, Lieutenant Georges Painvin rompe el cifrado ADFGVX, que es el que usaba el ejército alemán desde un poco antes del fin de la Primera Guerra Mundial. Este algoritmo consistía en un cifrado en dos pasos; primero se realizaba una sustitución (cada letra era sustituida por un bi-grama a través de una matriz que hacía de clave) y después, los bi-gramas se dividían en columnas que se reorganizaban.
1918Arthur Scherbius y Richard Ritter inventan la primera Enigma. Al mismo tiempo, la máquina de rotores es inventada y patentada por Alexander Koch (Países Bajos) y Arvid Damm (Suecia).
1920William F. Friedman (1891-1969), tras ser galardonado como el padre de la criptografía estadounidense, diseña (sin relación con Kasiski) métodos estadísticos para criptoanalizar el cifrado de Vigenère.
1921El californiano Edward Hebern construye la primera máquina de cifrado basada en el principio de losrotores
1922La rueda de Jefferson es redescubierta en los EEUU, cuyo cuerpo de marines la rediseña y la utiliza durante la Segunda Guerra Mundial.
1923La máquina de rotores Enigma, diseñada por el alemán Arthur Scherbius, se revela en el International Post Congress. Además, Scherbius funda la compañía "Chiffriermaschinen AG" para comercializar Enigma en todo el mundo.
1929Lester S. Hill publica el artículo "Cryptography in an Algebraic Alphabet". El cifrado de Hill aplica álgebra (multiplicación de matrices) para cifrar.
1940Los espías alemanes utilizan micropuntos.
1940Alan Turing rompe Enigma con la idea de la Bomba de Turing que concibió basándose en el trabajo deMarian Rejewski.
1941Se descifran los mensajes con los que se comunicaban los japoneses en donde se hablaba del inminente ataque a Pearl Harbor. Esto es debido a la labor de un equipo dirigido por William Frederick Friedman, que rompió la máquina japonesa Purple.
Muchos historiadores creen que el criptoanálisis acortó en una año la Segunda Guerra Mundial.
1948/1949Claude Shannon establece la bases matemáticas de la teoría de la información y publica "Communication Theory of Secrecy Systems", en donde expone un algoritmo de cifrado teóricamente irrompible que debe satisfacer los requisitos de la cinta aleatoria de un sólo uso.
1973David Elliott Bell y Len LaPadula desarrollan el modelo Bell-LaPadula que formaliza las normas de acceso a la información clasificada, con la intención de lograr la confidencialidad de los datos.
1973-1975Ellis, Cocks y Williamson desarrollan un algoritmo de cifrado de clave pública para el gobierno británico (GCHQ). Este descubrimiento no será conocido públicamente hasta 1997.
Debido a esto, los métodos de cifrado asimétrico serán nuevamente reconstruidos de forma independiente y, esta vez sí, públicamente por Diffie, Hellman, Rivest, Shamir y Adleman, que serán considerados los descubridores de la criptografía de clave pública.
1975Diffie y Hellman describen que los procedimientos de clave pública son teóricamente posibles, a pesar de que se ha intentado demostrar lo contrario.
1976Whitfield Diffie y Martin Hellman publican "New Directions in Cryptography". Que introduce un nuevo método de distribución de claves criptográficas, lo que era hasta la fecha uno de los problemas fundamentales de la criptografía. Este mecanismo será conocido como el protocolo Diffie-Hellman de intercambio de claves.
1977El algoritmo inventado por IBM en 1975, DES (Data Encryption Standard), es elegido por el NIST (FIPS PUB-46) como el algoritmo de cifrado estándar de los EEUU.
1977El algoritmo RSA, llamado así por sus desarrolladores, Ronald Rivest, Adi Shamir y Leonard Adleman, es publicado. RSA supone el primer procedimiento de clave pública utilizado en la práctica y ocupa el puesto de ser la contribución criptológica más innovadora del siglo XX.
1979Los primeros cajeros automáticos (Automatic Teller Machines) utilizan DES para cifrar los códigos PIN.
1982El físico Richard Feynman diseña el modelo teórico de una computadora cuántica.
1984Charles H. Bennett y Gilles Brassard describen la criptografía cuántica (BB84 protocol).
1985Goldwasser, Micali y Racoff descubren el procedimiento de conocimiento cero.
1986De forma independiente, Neal Koblitz y Victor Miller proponen usar curvas elípticas como modelo de criptografía de clave pública.
1991Xueija Lai y James Massey desarrollan el algoritmo IDEA en Suiza, que será usado en el software criptográfico PGP.
1991DSA es elegido por el NIST como algoritmo estándar de firma digital.
1991PGP (Pretty Good Privacy) es diseñado por Phil Zimmermann como un software gratuito y de código libre, con el fin de cifrar e intercambiar archivos con una gran seguridad. Esta es la primera vez que el cifrado híbrido (combinación de criptografía simétrica y asimétrica) es aplicada a un programa popular para usuarios finales. El objetivo principal era el de cifrar los archivos adjuntos del correo electrónico (que más tarde también fue cubierto por el estándar S/MIME).
1994Peter Shor concibe un algoritmo para ordenadores cuánticos que permite la factorización de enteros largos. Este es el primer problema interesante para el que los ordenadores cuánticos han prometido una importante aceleración, y que, por lo tanto, genera un gran interés en este tipo de ordenadores.
Agosto 1994El protocolo de cifrado SSL 1.0 es publicado por Netscape Communications y es soportado por todos los navegadores web. No obstante, el protocolo de transporte de SSL (TLS) no se limita a la aplicación de HTTPS.
Octubre 1995S/MIME, un mecanismo estándar para la seguridad del correo electrónico, es publicado como RFC 1847 y cuenta con el apoyo de todos los clientes de correo electrónico. S/MIME (Secure/Multipurpose Internet Mail Extensions) describe una manera consistente para enviar y recibir mensajes de correo electrónico seguros (firmados y/o cifrados). Se basa en el estándar de Internet MIME. Sin embargo, S/MIME no sólo se limita al correo.
S/MIME y SSL son los protocolos criptográficos que se utilizan con mayor frecuencia en Internet.
17 de Julio de 1998El ingenio de la EFF conocido como Deep Crack, rompe una clave DES con un ataque de texto claro conocido en 56 horas (Los RSA Laboratories lanzan el desafío DES II).
19 de Enero de 1999Deep Crack y distributed.net rompen una clave DES con un ataque basado en texto claro conocido en 22 horas y 15 minutos (Los RSA Laboratories lanzan el desafío DES III)
Octubre 2000Tras la competición pública que ha durado 5 años, el algoritmo Rijndael es elegido por el NIST como el sucesor de DES y pasa de denominarse AES (Advanced Encryption Standard).
Desde el 2000Weil Pairing es utilizada para los nuevos esquemas de compromiso como IBE (Identity Based Encryption, que resultó ser más interesante desde un punto de vista teórico que desde un punto de vista práctico).
Agosto 2004En la conferencia Crypto 2004, los investigadores chinos muestran debilidades estructurales en común de las funciones de hash (MD5, SHA), lo que las hace vulnerables a ataques de colisión. Estas funciones de hash todavía se usan en casi todos los protocolos criptográficos. Los investigadores chinos no publicaron todos los detalles.
Mayo 2005Jens Franke y otros factorizan un número RSA-200 de 663 bits de longitud.
Abril 2007El protocolo WEP de codificación en LAN inalámbrica fue roto por tres investigadores del TU Darmstadt. Asumiendo suficiente tráfico de datos en la red, sólo se tarda unos dos minutos en obtener el 95% de todas las claves de codificación utilizadas.
Agosto 2007En la conferencia Crypto 2007 se mostró un algoritmo para romper el sistema inmovilizador utilizado en millones de coches. Durante la presentación, Eli Biham, Orr Dunkelman,entre otros,  pudieron mostrar un ejemplo donde una correspondiente llave de coche se copió en 48 horas con la potencia de computación de 50 PCs.
Agosto 2007David Hulton y Joshua Laykey rompieron el algoritmo de codificación A5, de marca registrada, usado por muchos operadores de GSM. Esto implica que en redes móviles afectadas, incluso las más cortas llamadas de voz o los mensajes SMS pueden descifrarse fácilmente por un PC normal, mostrando así que "seguridad por oscuridad" no es un buen enfoque.
Diciembre 2007Se descifró el algoritmo de autenticación de las tarjetas de chip Mifare, el cual  se usa en miles de aplicaciones por un billon de tarjetas expedidas. Sin embargo, la última generación (Mifare DESFire), que utiliza DES/3-DES, no se ve afectada.
Diciembre 2009Chris Paget y Karsten Nohl dieron a conocer, que su Proyecto de crackeo A5/1 construyó las tablas de compromiso espacio-tiempo de 2 Terabyte. A5/1 fue ahora definitivamente quebrado.
Diciembre 2009Jens Franke et al. factorizaron el número RSA-768 de 768 bits de longitud.

Algo muy interesante es que en el Kamasutra, exista una de las descripciones más antiguas de encriptación por sustitución, este texto fue escrito el siglo IV d.C. por el sabio hindú Vatsyayana (Cuyo nombre es muy parecido al de esta página. ñ_ñ), sin embargo basado en manuscritos datados de más de 800 años (séc. IV a.C..).

El Kama-Sutra recomienda que las mujeres estudien 64 artes, incluyendo la culinaria, la forma de vestir, masaje y la preparación de perfumes. La lista también incluye algunos artes menos obvios como prestidigitación, ajedrez, encuadernación de libros y carpintería.

En la lista, la de número 45 es la mlecchita-vikalpa, el arte de la escritura secreta, indicada para ayudar las mujeres a esconder los detalles de sus relaciones. Una de las técnicas recomendadas es la de formar pares aleatorios de letras del alfabeto y después sustituir cada letra del texto original por la correspondiente en el par.

Ahora un ejemplo en PHP. ñ_ñ
[sourcecode language="php"]
< ?php

//Cifrado KamaSutra: SQleros.Com.Ar
$letras=array( array('A','D','H','I','K','M','O','R','S','U','W','Y','Z'),
array('V','X','B','G','J','C','Q','L','N','E','F','P','T')
);

function kamasutra($texto,$letras)
{ $ArregloAuxiliar=array();
for($i=0; $i{ $ArregloAuxiliar[$letras[0][$i]]=$letras[1][$i];
$ArregloAuxiliar[$letras[1][$i]]=$letras[0][$i];
}
$result = "";
for($i=0; $ireturn $result;
}

$blog="SQLeros.Com.Ar";
echo "

Cifrado KamaSutra: $blog";
echo "Letras:";
for($i=0; $i".$letras[0][$i].""; echo '';
for($i=0; $i".$letras[1][$i].""; echo '

';
echo 'Texto sin cifrar: '.$blog.'
';
echo 'Texto cifrado: '.kamasutra($blog,$letras).'
';
?>
[/sourcecode]

El resultado: Aquí, Un Saludo. Y Claro comenten!

Android corriendo en un iPhone


Que opinará Steve Jobs de este vídeo que muestra como Android OS de Google, corre en su aclamado iPhone, después de haber dicho que Android es para ver porno.

¿Qué es MVC?

Modelo Vista Controlador es un patrón de arquitectura de software que se utiliza mucho en aplicaciones web, separandola en tres capas (modelo, controlador y vista)

El Modelo se encarga de interactuar con la base de datos y también se ejecuta las reglas de negocio.
El Controlador procesa las peticiones de la pagina web (vista), y envía estos datos a la capa modelo, para que esta le devuelva la información adecuada para mostrarla en la capa vista.
La vista es el código HTML que se muestra al usuario, con la información proveniente del controlador.



¿Porqué útilizar MVC?

El fácil mantenimiento de código en un futuro, ya que al estar separadas los distintos procesos según su tipo.
Si quisieramos por ejemplo cambiar de tipo de base de datos, solo tendremos que cambiar la capa modelo.

Para una mejor percepción de esta arquitectura, muestro la transformación de una lista de artículos de un blog.

Este código es lo necesario para cumplir con el proposito de listar los artículos

< ?
// conexion a la base de datos
$cn = mysql_connect('localhost', 'usuario', 'clave');
mysql_select_db('db', $cn);

// consulta SQL para traer los artículos
$resultado=mysql_query('SELECT fecha, titulo FROM articulo', $cn);
?>

Listado de Artículos




< ?php

// recorre el resultado pintando la fecha y titulo
while ($fila = mysql_fetch_array($resultado, MYSQL_ASSOC))
{
echo "";
echo "";
echo "";
echo "";
}
?>
Fecha Titulo
".$fila['fecha']." ".$fila['titulo']."


< ?php
//cerramos la conexion
mysql_close($cn);
?>

Observaciones

En la misma pagina nos conectamos al servidor ( solo funcionara si es MySQL ) y seleccionamos una base de datos.
Realizamos una consulta (no hay manejo de errores y/o excepciones).
Pintamos el código HTML (combinamos código HTML dentro del código PHP, dejando los tags (, ) ilegibles para la persona que implemente los estilos).


Utilizando el Controlador y la Vista

El ejemplo anterior los separaremos en dos archivos, uno se llamara controlador y el otro vista.

controlador.php

view plaincopy to clipboardprint
< ?
$cn = mysql_connect('localhost', 'usuario', 'clave');
mysql_select_db('db', $cn);

$resultado = mysql_query('SELECT fecha, titulo FROM articulo', $cn);
$articulos = array();

while($articulo = mysql_fetch_assoc($resultado))
{
$articulos[] = $articulo;
}

mysql_close();

require('vista.php');
?>
vista.php

view plaincopy to clipboardprint

Listado de Articulos




< ?php foreach($articulos as $articulo): ?>




< ?php endforeach;?>
Fecha Titulo
< ?php echo $articulo['fecha']?> < ?php echo $articulo['titulo']?>

De esta manera tenemos separada en el controlador.php casi todo el código php con la lógica de negocios, mientras que en vista.php solo recorremos un array con datos.
Lo recomendable en la vista seria utilizar instrucciones PHP mas conocidad, como: if, endif, foreach, endforeach. Y no utilizarlas con llaves “{”, ya que dificulta reconocer donde empieza y termina.

Otro problema seria si queremos utilizar nuevamente el listar articulo en otra pagina, tendríamos que reescribir el controlador.php de nuevo.
Para esto separaremos el controlador(controlador.php) en modelo.php y controlador.php.

Utilizando el Modelo

modelo.php

view plaincopy to clipboardprint
< ?php

function getArticulos()
{
$cn = mysql_connect('localhost', 'usuario', 'clave');
mysql_select_db('db', $cn);

$resultado = mysql_query('SELECT fecha, titulo FROM articulo', $cn);
$articulos = array();

while($articulo = mysql_fetch_assoc($resultado))
{
$articulos[] = $articulo;
}

mysql_close();
}
?>
controlador.php

view plaincopy to clipboardprint
require('modelo.php');

$articulos = getArticulos();

require('vista.php');
Despues de esta separación el controlador quedaría tan solo como un agente para pasar datos del modelo hacia la vista, pero en aplicaciones mas complejas el controlador es quien realiza las tareas de autenticación de usuarios, manejo de sesiones, filtrar y validar entradas de datos por GET o POST.



Cambiando el gestor de Base de Datos

La respuesta seria, cambiar todas las funciones del modelo (mysql_connect, mysql_query, …) por las correspondientes, y eso nos tomaría mucho tiempo.
Para hacer un mejor uso de MVC o mejor dicho cambiando el patrón un poco, se podría separar el modelo en dos capas:

La capa de Acceso a Datos
La capa de Abstracción de la Base de Datos
Si se diera el caso de cambiar de gestor de base de datos, solo tendríamos que actualizar la capa de abstracción de la base de datos

Ejemplo de las dos capas

Abstracción de datos

view plaincopy to clipboardprint
function crearConexion($servidor, $usuario, $clave)
{
return mysql_connect($servidor, $usuario, $clave);
}

function cerrarConexion($cn)
{
mysql_close($cn);
}

function consulta($consulta, $base_datos, $cn)
{
mysql_select_db($base_datos, $cn);

return mysql_query($consulta, $cn);
}

function getResultado($resultado, $tipo = MYSQL_ASSOC)
{
return mysql_fetch_array($resultado, $tipo);
}
Acceso a Datos

view plaincopy to clipboardprint
function getTodosLosArticulos()
{
$cn = crearConexion('localhost', 'usuario', 'clave');

$resultado=consulta('SELECT fecha, titulo FROM articulo', 'db', $cn);

$articulos = array();
while ($articulo = getResultado($resultado))
{
$articulos[] = $articulo;
}

cerrarConexion($cn);

return $articulos;
}
Ahora tenemos la capa de Acceso a Datos sin ninguna dependencia de funciones de alguna gestor de base de datos, y podremos reutilizar las funciones de la capa de abstracción de base de datos en otras funciones de acceso a datos de nuestro modelo.
SharpDevelop es un entorno de desarrollo diseñado para crear aplicaciones en .NET. Resulta ideal sobre todo para los programadores en C#, aunque es capaz de generar código en Visual Basic.NET, de esta forma los desarrolladores con menos necesidades verán como les permite crear sus formularios de forma visual.

Soporta los Framework .NET 2.0, 3.0 y 3.5, aportando compatibilidad con Visual Studio Express y Visual Studio 2008. Gracias a que este paquete es de código abierto los desarrolladores pueden crear sus propios añadidos (http://wiki.sharpdevelop.net/3rdPartyAddins.ashx ) para mejorar las cualidades y automatizar tareas a la hora de generar nuestro código fuente.
Integra diferentes herramientas orientadas a la calidad de nuestro código como un potente Debugger que nos permitirá localizar cómodamente los errores, un sistema de análisis de código automático, una unidad de comprobación y lo mejor, un sistema de control de versiones (TortoiseSVN) con el que mantener y compartir el código sin temor a perder nuestros avances.
Te lo puedes descargar en: http://www.icsharpcode.net/OpenSource/SD/
Pagina web: http://www.icsharpcode.net/OpenSource/SD/

Los diez errores más comunes en el diseño de una base de datos

Hola SQLeros,Louis Davidson es un experto en el diseño de Base de Datosy es autor del libro SQL Server 2005 Database Design and Optimization en el artículo aquí enlazado presenta los diez errores más comunes en el diseño de una BD que el ha detectado a lo largo de su experiencia:




  • Mala planeación del diseño

  • Ignorar la normalización

  • Estándares de nomenclatura deficientes

  • Falta de documentación

  • Una sola tabla para guardar todos los valores del dominio

  • Usar columnas GUID como la única llave de una tabla

  • No usar las funcionalidades SQL para preservar la integridad de los datos

  • No usar Stored Procedures para acceder a los datos

  • Intentar construir objetos genéricos en los stored procedures

  • Falta de pruebas


En mi experiencia la mayoría de los desarrollos donde he trabajado presentan algunas de estas deficiencias en su base de datos. Creo yo que en muchos de los casos es porque se deja a un programador diseñar la base cuando debe ser haber un DBA involucrado en el proceso. Se que muchos proyectos no pueden pagar el sueldo de un DBA en exclusivo pero creo que al menos debe haber un DBA por organización que supervise el diseño elaborado por los programadores, lo mejore y le de su visto bueno.
Con las bases de datos pasa como con el diseño web, cuando se deja en manos de un programador elresultado puede ser un desastre e imagino que la mayoría de ustedes ha tenido que lidiar con chapuzas como una tabla totalmente desnormalizada (digo a veces está bien desnormarlizar para ganar en desempeño pero hay límites) y que necesita de 5 o más campos para tener una llave compuesta (y dile adios a tu idea de usar un ORM para la capa de datos), o una tabla con 20 campos que se llaman campo1, campo2, .. campoN y que nadie en la organización sabe que diablos es el campo7 o quién era el encargado de actualizarlo pero sin él tu aplicación no funciona, en fin no seguiré descargando mi frustración aquí :P . En mi opinión una forma de evitarle frustraciones a los otros programadores es que, dado que las empresas no van a querer pagar un DBA para auxiliarte en el 70% de los casos,nosotros nos documentemos con artículos como el de Louis para realizar un mejor trabajo que programar no es solo usar Spring o el último patrón de diseño.

Snaptü: Facebook, Twitter y Más En La Palma de Tú Mano!

Facebook tiene una muy bien conocida versión móvil de su web que en la mayoría de los casos sirve para realizar las actividades más comunes dentro de nuestra red social favorita desde cualquier dispositivo móvil que pueda navegar al menos sitios wap, y de hecho es la forma en la que lo utilizan miles de personas que tienen más a mano su celular que una computadora en muchas ocasiones. Pero como toda versión móvil de un sitio web, sus características y uso resultan muy limitados en experiencia y funcionalidad, y mientras que en Windows Mobile ya existe una aplicación oficial de Facebook creada por Microsoft al mismo tiempo que casi todo sistema operativo para smartphones tiene al menos una similar en calidad, en un celular común es más difícil conseguir algo por el estilo para despegarse de la muchas veces incómoda versión móvil de su sitio web.


imageUna buena opción que se puede usar si se atraviesa por este dilema es Snaptu, una aplicación compatible con cualquier celular que admita aplicaciones Java J2ME, y que consiste es una plataforma de widgets con diversas funciones y servicios. Aunque está orientado mayormente al mercado británico, este servicio permite utilizar a Facebook desde su aplicación móvil como un widget más, permitiéndonos una forma de ingresar mucho más dinámica y con más practicidad que desde su web móvil. Con Snaptu Facebook se pueden ver y enviar mensajes a nuestros contactos fácilmente, ver imágenes de los mismos en pantalla completa, y también tendremos la opción de enviarles una invitación para que descubran Snaptu. En el video a continuación puede verse la fluidez de su interface.




Para descargar la aplicación de Snaptu sólo hace falta ingresar con el celular a m.snaptu.com, cabe señalar que en el video esta en ingles, pero se puede cambiar el lenguaje de la aplicación. Existiendo también un video disponible que muestra como hacerlo paso a paso desde uno, aunque también se puede ingresar desde una PC y luego transferir la aplicación al teléfono vía el cable de datos. Como sucede en todos los casos en los que se usa una aplicación que realiza consumo intensivo de transferencia de datos por Internet, hay que tener en cuenta si utilizamos Snaptu muy asiduamente que a menos que tengamos algún plan de datos contratado con nuestro operador de telefonía celular ó activada la opción de banda ancha ramms y también debemos ser conscientes de las posibles implicancias con respecto a la privacidad cada ves que habilitamos el acceso a una cuenta nuestra, en este caso de Facebook, a un tercero. Si tenemos estos dos temas cubiertos, Snaptu Facebook es una alternativa ideal para evitar la limitada web móvil de Facebook y utilizarlo de una forma más placentera y práctica.


Un Saludo!

VSTS 2010. Herramientas de Diseño y Arquitectura






Get Microsoft Silverlight


Plataforma de Microsoft Ibérica, nos habla sobre las novedades que incorpora el nuevo Visual Studio 2010 para los arquitectos de software.

César presenta de forma práctica algunas de estas novedades, desde el soporte integrado para UML 2.1, pasando por la arquitectura por capas y terminando con el nuevo Architecture Explorer.

Agencia Espacial Mexicana

AEM

Tuvieron que pasar cuatro años para que laAgencia Espacial Mexicana fuera realidad. Con 280 votos a favor en la Cámara de Diputados, los legisladores aprobaron este martes la creación de este nuevo organismo que coordinará la política espacial de México. La iniciativa fue presentada en abril de 2006, y después de numerosas modificaciones y discusiones, al fin ha sido aprobada su creación.

José Hernández, astronauta mexico-americano, ha mostrado su alegría porque el país cuente con un proyecto espacial. Hernández ha aceptado la propuesta de los legisladores para fungir como asesor de la agencia. El presupuesto inicial del organismo será de 10 millones de pesos, y se empleará en esta primera etapa para el diseño institucional. Aún no se define la sede, aunque el estado que cuenta con más posibilidades para albergarlo es Hidalgo, seguido de Campeche yYucatán. El objetivo es que la Agencia Espacial Mexicana no sólo sea un organismo descentralizado, sino también autosuficiente.

La Agencia Espacial Mexicana estará conformada por un consejo de quince integrantes, y será encabezada por el Secretario de Comunicaciones. Entre los integrantes estarán subsecretarios de Gobernación, Relaciones Exteriores, Educación Pública, Hacienda, Defensa Nacional y Marina; así como los rectores de la Universidad Autónoma de México (UNAM), del Instituto Politécnico Nacional (IPN), entre otros miembros del ámbito académico.

La creación de la Agencia Espacial Mexicana ha desatado un debate encarnecido en diferentes sectores de la población (basta darle un vistazo a los comentario del periódico El Universal). Mientras unos lo ven como un gran impulso para el desarrollo científico y tecnológico del país, otros lo ven como un despilfarro presupuestal y un gasto en un rubro innecesario. ¿Inversión o capricho? La mejor opinión, como siempre, es la de ustedes. ¿Qué opinan del nacimiento de esta nueva agencia?

Crear Servicio Web En PHP Con NüSoap

1.- Para que funcione el ejemplo descárgate las clases de NüSOAP desde la pagina del proyecto http://sourceforge.net/projects/nusoap/.

2.- Después descomprimes ese archivo y lo copias a tu sitio web (para este ejemplo el sitio se llama miwebservice y los archivos de NuSOAP los puse en un directorio llamado lib-nusoap.

3.- Luego ejecutas en tu Servidor MySQL el script de la Base de Datos db_productos.sql que lo puedes descargar desde esta pagina.

4.- Luego crea una pagina PHP (en este ejemplo la pagina se llama servicioweb.php) y codificas lo siguiente:
[sourcecode language="php"]
< ?php
require_once('lib-nusoap/nusoap.php');

$server = new soap_server;

$ns="http://localhost/aplicativo"; // espacio de nombres; Sitio donde estará alojado el web service
$server->configurewsdl('MiWebService'); //nombre del web service
$server->wsdl->schematargetnamespace=$ns;

/************ REGISTRANDO EL ARRAY A DEVOLVER(array de productos) **************/
$server->wsdl->addComplexType(
'ArregloProductos', // Nombre
'complexType', // Tipo de Clase
'array', // Tipo de PHP
'', // definición del tipo secuencia(all|sequence|choice)
'SOAP-ENC:Array', // Restricted Base
array(),
array(
array('ref' => 'SOAP-ENC:arrayType', 'wsdl:arrayType' => 'tns:Productos[]') // Atributos
),
'tns:Productos'
);

/************ REGISTRANDO LA ESTRUCTURA DE DATOS PRODUCTOS **************/
$server->wsdl->addComplexType('Productos', 'complexType', 'struct', 'all', '',
array(
'ProductoID'=> array('name' => 'ProductoID','type' => 'xsd:int'),
'Nombre' => array('name' => 'Nombre', 'type' => 'xsd:string'),
'Precio' => array('name' => 'Precio', 'type' => 'xsd:string')
)
);

/*METODO DEL WEB SERVICE*/
function ListarProductos($estado){
if($estado!=''){
$db = new mysqli(); //mysqli exclusivo para usar procedimientos almacenados
$db_result = $db->connect ("localhost", "root", "","db_productos");
$sql=sprintf("call usp_ListarProductos('%s');",$estado); //intentando filtrar el SQL Injection
$result = $db->query($sql);
if (mysqli_errno($db)) printf("mySQL error %s\n", $db->error); //si es que hubo error se muestra
$db->close();
$i=0;
if($result->num_rows>0){
while($row = mysqli_fetch_assoc($result)){
$toc[$i]['ProductoID'] = $row["producto_id"];
$toc[$i]['Nombre'] = $row["nombre"];
$toc[$i]['Precio'] = $row["precio"];
$i++;
}
$result->free; //liberando memoria
return $toc;
}
}
return '';
}

/************ REGISTRANDO EL METODO **************/
$server->register(
'ListarProductos', // Nombre del Método
array('estado' => 'xsd:string' ), // Parámetros de Entrada
array('return' => 'tns:ArregloProductos') //Datos de Salida
);

/******PROCESA LA SOLICITUD Y DEVUELVE LA RESPUESTA*******/
$input = (isset($HTTP_RAW_POST_DATA)) ? $HTTP_RAW_POST_DATA : implode("\r\n", file('php://input'));
$server->service($input);
exit;
?>
[/sourcecode]



Si deseas puedes descargar el ejemplo completo desde aquí. Varios usuarios me han hecho la observación en la cual no funciona el código, esto es por el nombre de la carpeta comprimida que llame SQLeros-NüSoapEjemplo.zip, para que funcione bien solo cambienle el nombre por: SQLeros-NuSoapEjemplo.zip

También veremos como consumir el servicio desde C#,VB.Net y Java. Saludos

Ctrl Alt Supr

Enero de 2004. La prensa especializada deja caer entre sus artículos uno dedicado a un ingeniero de IBM que despues de muchos años abandona la empresa. ¿Qué puede tener de especial una persona para merecer ese titular? El protagonista de esta historia se llama David J. Bradley. Tiene 55 años. Formó parte del equipo que creó el primer ordenador personal. Debe sus quince minutos de fama a haber sido quien ideó la combinación de teclas "Control+Alt+Supr" para reiniciar un ordenador.


Por esta razón Bradley entra en el Club de los Históricos de ARRAI.


¿Cuantas veces hemos usado esta combinación de teclas para reiniciar nuestros equipos? El "Control+Alt+Supr" (en inglés "Control+Alt+Delete") es uno de los pequeños iconos culturales del mundillo de la informática.


Corría el año 1981. 12 ingenieros, "los 12 del patíbulo", creaban en los laboratorios de IBM situados en Boca Ratón, Florida, el primer ordenador personal, el IBM-PC. Entre ellos estaba David J. Bradley. Fue el encargado de diseñar la BIOS de aquel primer equipo de uso doméstico. El resto de su trabajo para el "gigante azul" queda empañado por la anécdota: la creación del código de reinicio del PC.



El ingeniero David Bradley


Entró en IBM en 1975, y formó parte a partir de 1980 del equipo que desarrolló el primer ordenador personal. Entre otras cosas, es responsable del código de la ROM BIOS que llevaban los primeros PCs. Despues de 28 años y medio en IBM, Bradley la abandonó en enero de 2004. En la actualidad continúa impartiendo clase en la Universidad Estatal de Carolina del Norte. Para este ingeniero en electricidad e informática, cuantos más estudiantes vayan a carreras de ciencia y tecnología, mayor será la fuerza económica del país (en su caso, de los Estados Unidos).


David J. Bradley



Control Alt Delete


¿Por qué se desarrolló esta función? Bradley explica que a principios de los 80 en IBM se estaban haciendo pruebas de forma intensa con nuevo hardware y nuevo software. Esto provocaba que los ordenadores se quedasen colgados con facilidad. Para volver a arrancar un equipo era necesario apagarlo, esperar unos segundos a que reposara para no provocar daños al hardware, volver a arrancarlo y esperar por las rutinas de autocomprobación que ejecutaba el PC. Se tardaba más de un minuto en volver a tener el equipo operativo.


La idea de Bradley era crear un mecanismo que permitiese el reinicio "en caliente", sin tener que seguir todo ese proceso. El ahorro de tiempo era considerable, y por eso esta funcionalidad, que en un principio estaba destinada únicamente a ser conocida por los desarrolladores de IBM, se difundió paulatinamente entre el público.


¿Porqué esas tres teclas?


¿Por qué estas tres teclas? Se trataba de encontrar una combinación que no se pudiese teclear por accidente. Se eligieron dos teclas de uso poco común (Control y Alt) y la tercera se buscó justo al otro lado del teclado. Al principio Bradley pensó en la tecla "+", pero creyó que DELETE tendría más sentido. Una vez definida la solución, Bradley afirma que programarla no le llevó más de cinco minutos.



La actualidad de "Control Alt Delete"


Ya no es lo que era, ahora es más. Las versiones de Windows 2000 y XP capturan esta combinación y ofrecen un panel de opciones: el administrador de tareas, cerrar sesión o apagar de forma civilizada. En los casos extremos en que esto ya no funciona, no hay más remedio que volver al fatídico botón de reset.


Tambien se incorpora en Windows 2000 para arranque de sesión, con lo que "Control+Alt+Supr", tambien conocido como "La llave de Vulcano", o "El saludo de los tres dedos", ha dejado definitivamente de ser un truco no escrito a ser una combinación de teclas de obligado conocimiento, mucho más usada si cabe.



Hacerlo famoso


Cuando se celebraba el vigésimo aniversario de la creación del Pc, compartían escenario en una mesa redonda Bill Gates y David Bradley, entre otros. Durante una parte del evento, el tema de conversación era el mecanismo de reinicio. En el vídeo cuyo enlace ofrecemos se puede oir a Bradley bromeando con Gates, aunque este último no pone cara de estar divirtiéndose. Bradley dice: "Hacerlo llevó cinco minutos, no sabía que iba a crear un icono cultural. Pero tengo que compartir el mérito, puede que yo lo haya inventado, pero ha sido Bill el que lo ha hecho famoso."


Seguramente, Bradley fue el primer sorprendido por la fama alcanzada por su código. Algo que en principio era simple, que no llevó más de cinco minutos, se acaba convirtiendo en un icono cultural. Quizá esto nos puede enseñar a apreciar los detalles y los trabajos pequeños. Si están bien hechos y son útiles, pueden convertirse en algo con un gran significado.


La idea de Bill Gates es distinta. Adoptó el código de Bradley, le era útil y lo utilizó como un complemento para construir algo mayor. Es tambien una forma de ver como lo que hacemos, si lo compartimos, puede servirle a otra gente. Aunque podemos adivinar que Gates hubiese preferido que el "Ctrl+Alt+Supr" no fuese tan conocido por sus usuarios.


Ahora una rola del reno renardo al respecto.


Ctrl Alt Supr - Reno Renardo

Hola que tal el día de hoy les traigo una página web que en lo particular me gusta mucho.  Por que esta actualizando día a día y tiene buenas publicaciones les hablo de WowEbook.Com.Get your ebook right now!

Wow Ebook.Com

Una página en la cual podremos ver una gran gama de manuales, tutoriales,libros de referencia,etc.

Ampliamente recomendable proporciona material muy bueno y sobre todo …

Bueno ya se darán cuenta.

Un Saludo SQLeros.

Exporta Datos Fácilmente desde PHP a Excel

Hola, bienvenidos de nuevo al blog, en posts anteriores de SQLeros, habíamos visto como hacer CRUD, gracias al post de Luda, y ahora les traigo una forma fácil y muy rápida de hacer reportes de los datos hacia Excel.


Basicamente se trata de tomar el

Soporte Mono Touch para Ipad

A tan solo 24 hrs de la salida del SDK para Ipad, se ha completado el soporte para Mono Touch, Segun Miguel de Icaza en su blog. Otro de los colosales avances en la era de programación con Mono. Usando el esperanto de los lenguajes de programación.
Problema

Microsoft SQL Server es superior a la de MySQL o no? ¿Cuáles son los pros y los contras de utilizar de SQL Server a través de MySQL? MySQL es lo suficientemente maduros como para competir con un gran jugador como Microsoft y Oracle? ¿Podemos comparar ambos productos bastante?


Solución

En mi modesta opinión, no hay una respuesta sencilla a esta pregunta, porque no estamos comparando manzanas con manzanas.Microsoft SQL Server es una base de datos ricos de la característica en comparación con MySQL sin embargo, el objetivo de MySQL no es mantener con MSSQL u Oracle lugar, las prioridades de MySQL son la fiabilidad, rendimiento y facilidad de uso.


Así pues, en mi opinión, la respuesta a la pregunta "¿superior de SQL Server a MySQL o no" es: depende. Depende del tipo de aplicación, el medio ambiente y el presupuesto que tenemos que trabajar.


En el nivel básico, MySQL y SQL Server tienen mucho en común. La siguiente tabla resalta las principales.

  • De alta disponibilidad de base de datos en clúster

    • SQL Server se basa en tecnología de clustering de Microsoft

    • MySQL tiene su propia parte clúster de motor nada de almacenamiento (NDB)



  • ANSI SQL, subconsultas, se une, cursores, sentencias preparadas

  • Procedimientos almacenados, disparadores, SQL y funciones definidas por

  • Vistas actualizables

  • Transacciones ACID con Commit, Rollback

  • Transacciones distribuidas

  • Bloqueo a nivel de

  • Snapshot / Consistente lecturas repetibles (los lectores no bloquean los escritores y viceversa)

  • Server cumplir la integridad referencial

  • Fuerte apoyo de datos de tipo (numérico, VARCHAR, BLOB, etc)

  • De alta precisión tipos de datos numéricos

  • Indexación (agrupado, B-tree, hash, de texto completo)

  • Cachés de memoria dinámica de

  • Optimizador basado en costos

  • Unicode, UTF-8

  • XML, XPath

  • Apoyo Geoespacial

  • Replicación

  • Y el índice de la tabla de particiones

  • VLDB (terabytes) capaz

  • De alta velocidad, datos de utilidad de carga de

  • Online Backup con el punto en el tiempo de recuperación

  • Reinicio automático / Crash Recovery

  • Automatic Storage Management (auto-expansión, administración rollback)

  • Comprimido y Archivo de la mesa

  • Esquema de información / del diccionario de datos

  • De Seguridad (GRANT / REVOKE, SSL, los privilegios de objetos de grano fino)

  • Construido en el cifrado y descifrado de datos

  • Construido en el Programador de tareas

  • Drivers (ODBC, JDBC,. NET, PHP, etc)

  • GUI de gestión y desarrollo de herramientas de


En mi opinión, con el lanzamiento de SQL Server 2008, Microsoft ha introducido características sólidas y valiosas como el apoyo paralelo para los objetos con particiones, cifrado de datos transparente, que regulan los recursos, el rendimiento de recogida automatizada de datos, captura de datos modificados (CDC), y mucho de lo que es no está disponible en cualquier versión de MySQL.


Si nos fijamos como algunas funcionalidades, podemos observar que tanto MySQL y SQL Server admiten SIG Sin embargo, SQL Server es más robusto que MySQL. Planificador de tareas de Microsoft es mejor y más fácil de usar luego de MySQL.


Por otra parte, creo que MySQL proporciona más opciones para diversos tipos de particiones: MySQL ofrece la gama, hash, clave, lista, y la partición compuesto mientras que SQL Server sólo ofrece la gama. Por otra parte, me parece partición MySQL es mucho más fácil de usar ya que está definido el derecho a la tabla a través de DDL durante el tiempo de creación frente a la creación de objetos de partición en SQL Server (esquemas de partición y funciones) que luego son aplicadas a las tablas.













  / * Ejemplo de MySQL de la partición Rango * / 
CREAR UN CUADRO empleados (
id INT NOT NULL,
fname VARCHAR (30),
lname VARCHAR (30),
contratado NOT NULL DEFAULT '1970-01-01 ',
separados NOT NULL DEFAULT '9999-12-31 ',
job_code INT NOT NULL,
store_id INT NOT NULL
)
PARTITION BY RANGE (store_id) (
TABIQUERÍA p0 valores inferiores a (6),
TABIQUERÍA P1 valores inferiores a (11),
TABIQUERÍA P2 valores inferiores a (16),
TABIQUERÍA P3 valores inferiores a (21));


  / * SQL Server muestra de mapas de todo el esquema de partición Rango partición mismo grupo de archivos * /
CREATE FUNCTION PARTICIÓN myRangePF3 (int)
Como la gama IZQUIERDA EN VALORES (6, 11, 16, 21);
GO
CREATE PARTITION SCHEME myRangePS3
Como partición myRangePF3
TODOS A ( 'principal');
GO
CREAR UN CUADRO empleados (
id INT NOT NULL,
fname VARCHAR (30),
lname VARCHAR (30),
contratado NOT NULL DEFAULT '1970-01-01 ',
separados NOT NULL DEFAULT '9999-12-31 ',
job_code INT NOT NULL,
store_id INT NOT NULL
) SOBRE myRangePS3 (store_id);


A continuación se muestra un ejemplo de una partición de la lista (sólo disponible en MySQL). La principal diferencia con la gama de particiones es que, en la lista de particiones, cada partición se define y seleccionados en base a la pertenencia de un valor de columna en uno de una serie de listas de valores, en lugar de en uno de una serie de áreas contiguas de los valores.










  / * Lista de partición de MySQL * / 
CREAR UN CUADRO empleados (
id INT NOT NULL,
fname VARCHAR (30),
lname VARCHAR (30),
contratado NOT NULL DEFAULT '1970-01-01 ',
separados NOT NULL DEFAULT '9999-12-31 ',
INT job_code,
INT store_id
)
PARTICIÓN POR LISTA (store_id) (
PARTICIÓN pNorth EN VALORES (3,5,6,9,17),
PARTICIÓN pEast EN VALORES (1,2,10,11,19,20),
PARTICIÓN pWest EN VALORES (4,12,13,14,18),
PARTICIÓN pCentral EN VALORES (7,8,15,16)
);


Seguridad de SQL Server es la forma superior y más robusto que MySQL. Con MySQL no se pueden definir funciones o dependen de la autenticación externa (OS de autenticación). Sólo se puede restringir el acceso basado en el nombre de usuario y la IP de origen, además, capacidades de auditoría son bastante débiles en comparación con SQL Server ..


En este punto, parece claro que SQL Server tiene más características que MySQL, sin embargo es importante prestar atención a un estudio de investigación realizado por Forrester Research, que afirma que el 80% de las instalaciones de base de datos actual sólo hacen uso de alrededor del 30% de la conjunto de características de proveedor. Así que, antes de escoger una plataforma de base de datos debemos preguntarnos qué función y las características de base de datos son necesarios para el negocio específico.


Me gustaría concluir este extremo, enumerando las características que he utilizado y que más me gusta en ambas plataformas de base de datos:


Microsoft SQL Server 2005/2008

  • DMV

  • Database Mirroring

  • Instantánea de base de datos

  • Extended Events

  • Auditoría

  • Cifrado de datos transparente

  • Captura de datos modificados (CDC) de

  • El regulador de recursos


MySQL 5.x y por encima de

  • Capacidad para funcionar en varios SO

  • Compartir Nada Cluster

  • Fácil de escalar en los productos básicos de hardware

  • MySQL Proxy

  • Replicación

  • Motores de almacenamiento de múltiples


Próximos pasos

Creo que tanto las tecnologías de base de datos están preparados y lo suficientemente maduros para ser utilizado en entornos de producción del mundo real. En mi opinión, la adopción de una sobre la otra tecnología depende del presupuesto disponible y, sobre todo, necesidades y requisitos de SLA. Creo que, si tenemos un buen diseño de base de datos general y la aplicación, podemos sacar el máximo provecho de ambas tecnologías y usarlas donde son más adecuados y convenientes.

Sistema de Boletaje para Terminales de Autobuses

Hola el día de hoy les presento una de mis mas recientes creaciones es un pequeño sistema para la venta de boletos de una terminal de autobuses, es algo sencillo y todavía le falta pulirlo mas pero para los fines didácticos es mas que suficiente.
Muy contento de estar aqui con ustedes de nuevo oyendo a Krystal Meyers, jejeje un poco lleno de la cena de fin de año y empezando mi año nuevo con muchas metas y promesas que se materializaran en realidad poco a poco y ya con medio año de colegio para salir como todo un LI. Espeluznante no, debo de agradecerles a los lectores del blog y ah todos los amigos  del Facebook. y del Twitter.

En hora buena y que este año todos los deseos e ilusiones se vuelvan en logros y satisafcciones.

Un saludo!!

Compartir sesiones con MySql en diferentes servidores

Muchos sitios necesitan correr desde varios servidores, por ejemplo para aprovechar la localidad
de los usuarios con respecto al servidor, para balancear la carga, para compartir usuarios registrados o simplemente como resguardo
por si alguno de los sitios falla. Uno de los aspectos a contemplar para este menester es el
manejo de sesiones, aqui explicamos como mantener sesiones entre multiples servidores.




Descripcion del problema


Supongamos que tenemos 2 servidores que corren el mismo sitio por ejemplo mexico.foo.org y espana.foo.org,
los sitios pueden ser exactamente iguales o bien tener algunas diferencias entre si, lo que es claro es que
los usuarios de foo.org pueden comenzar por cualquiera de los sitios y moverse de un sitio a otro si les
parece conveniente


Sesiones


El uso de sesiones permite mantener presistencia entre las distintas paginas de un site en forma limpia
y eficiente, PHP4 permite manejar sesiones en forma sumamente sencilla, por ejemplo:













session_start();
$data="hola";
session_register("data");




Todas las paginas que usen sesiones deben empezar con session_start() o al menos hacer el session_start() antes de generar cualquier tipo de salida al browser. Una vez inicializada la sesion se utiliza session_register para guardar una variable en la sesion, notar que a session_register se le pasa elnombre de la variable y no la variable misma.
Una vez registrada la variable podemos tener otra pagina php distinta con:













session_start();
echo "$data";




Y la variable $data tomara el valor "hola" ya que habia sido guardada en la sesion con dicho nombre, se puede tambien
eliminar variables de la sesion y algunas otras cosas mas, pueden encontrar el manual en español sobre el uso de sesiones en esta direccion


Bien, podemos suponer ahora que sabemos usar sesiones, las sesiones son muy utiles para llevar datos pertenecientes
al usuario, como por ejemplo su userid u otros datos importantes, si tenemos dos servidores para el mismo sitio es logico
que la sesion se mantenga cuando el usuario pasa de un sitio a otro, pero esto no ocurre automaticamente


El problema


Internamente y sin modificaciones PHP4 guarda los datos de las sesiones en /tmp, periodicamente el mecanismo de "garbage collection" elimina las sesiones vencidas, la duracion maxima de una sesion sin actividad puede configurarse en php.ini (usualmente en /usr/local/lib). Como es evidente al cambiar de un servidor a otro el segundo no tiene acceso al directorio /tmp del primero por lo que la sesion se pierde, el session_start del nuevo servidor mas que abrir la sesion anterior debe crear una nueva y perdemos los datos que veniamos arrastrando en la sesion


Una primera alternativa que funciona es usar NFS para que los dos servidores puedan acceder a /tmp en un mismo lugar, sin embargo, esto no siempre es posible y muchas veces no queremos usar NFS unicamente por esta razon.


La solucion al problema


La solucion mas practica al problema de la persistencia de la sesion entre multiples servidores reside en usar una base de datos, por ejemplo MySQL, para almacenar los datos de la sesion. De esta forma ambos servidores pueden acceder a la misma base de datos (en un solo servidor) para consultar los datos de la sesion. Tantos servidores como deseemos pueden compartir la sesion siempre y cuando puedan acceder al mismo servidor MySQL.


Para que los datos de la sesion se guarden en MySQL es necesario modificar la forma en que PHP maneja sesiones


Cambiando los Session-Handlers


PHP4 dispone de un mecanismo que permite cambiar la forma en la cual se almacenan las sesiones por cualquier metodo que el usuario desee, para ello se usa la funcion session_set_save_handler. La funcion recibe 6 parametros que son los nombres a 6 funciones que se describen a continuacion:




  • Primera funcion:Abrir la sesion

  • Segunda funcion:Cerrar la sesion

  • Tercera funcion:Leer los datos de la sesion

  • Cuerta funcion:Escribir los datos de la sesion

  • Quinta funcion:Destruir una sesion

  • Sexta funcion:Eliminar sesiones vencidas


Por ejemplo:













session_set_save_handler ( 
'mysql_session_open',
'mysql_session_close',
'mysql_session_read',
'mysql_session_write',
'mysql_session_destroy',
'mysql_session_gc' );




En el ejemplo seteamos los nombres de las 6 funciones que seran usadas para manejar sesiones, veamos ahora que
prototipo debe tener y que hace cada funcion










































FuncionPrototipoDescripcion
mysql_session_openmysql_session_open($sess_path, $session_name);Esta funcion es llamada para inicializar la sesion, recibe el path en donde guardar las sesiones si se usan archivos y el bombre de la sesion, en MySQL ninguno de los parametros nos interesa
mysql_session_closemysql_session_close()Esta funcion se llama cuando la pagina termina y el handler necesita dejar cerrado el archivo o lo que sea que haya usado para mantener la sesion, no elimina la sesion solo deja todo listo para volver a abrirla con open
mysql_session_readmysql_session_read($key)Esta funcion se usa para leer los datos asociados a una sesion,las sesiones se identifican por una clave que se recibe como parametro, no es necesario preouparse por los datos que se recuperan ya que esto lo maneja php4 internamente, si el usuario registra 4 variables los handlers solo guardan y recuperan un par clave-valor, la forma en que las 4 variables se serializan y desserializan esta a cargo del PHP
mysql_session_writemysql_session_write($key,$val)Esta funcion se usa para almacenar el contenido de la sesion indicada por $key, $val tiene todas las variables de la sesion serializadas y listas para ser almacenadas.Est funcion se suele llamar al final de cada script antes de hacer el close.
mysql_session_destroymysql_session_destroy($key)Es invocada para eliminar los datos de una sesion.
mysql_session_gcmysql_session_gc($maxlifetime)Esta funcion debe eliminar todas las sesiones que tengan mas de $maxlifetime segundos de vida.


Preparando la base para guardar sesiones


Una vez que hemos analizado como funcionan los handlers es bueno analizar como vamos a guaradar la informacion en MySQL, si entendimos bien el mecanismo solo necesitamos guardar algo de tipo clave-valor por cada sesion y ademas un timestamp que permita saber hace cuanto tiempo que no se usa la sesion. Podemos crear una tabla de la forma:













DROP TABLE IF EXISTS PHPSessions;
CREATE TABLE PHPSessions (
SessionID CHAR(32) NOT NULL PRIMARY KEY,
LastActive INTEGER NOT NULL,
Data TEXT
);



SessionID es la clave de la sesion, LastActive la ultima fecha de uso de la sesion y Data los datos de la sesion, notemos que al estar definida como PRIMARY KEY la columna SessionID esta indexada lo cual agiliza mucho el manejo de sesiones cuando hay miles de usuarios en el sistema.


Handlers para Mysql


Analicemos ahora que debe hacer cada funcion para almacenar las sesiones en Mysql



































FuncionDescripcion
mysql_session_open($path,$name);En esta funcion tenemos que abrir la conexion a la base, usar mysql_pconnect con una conexion persistente es muy recomendable, ademas seleccionamos la base con mysql_select_db. Los dos parametros que recibe la funcion se ignoran.
mysql_session_close();Aqui no hace falta hacer nada ya que no es necesario cerrar la conexion a la base
mysql_session_read($key);Esto es simplemente un select a la base y devolvemos la columna data para la clave recibida. Ademas actualizar el timestamp del registro.
mysql_session_write($key,$data);Aquie hay que hacer un update si la sesion ya existe o bien un insert en caso contrario. Ademas actualizamos el timestamp del registro.
mysql_session_destroy($key);Un simple delete de la base
mysql_session_gc($maxlifetime);Borramos de la tabla todos los registros para los cuales la diferencia entre el ultimo tiempo de acceso y el actual sea mayor al parametro recibido


El codigo


Una vez analizado que es lo que hay que hacer solo resta programarlo, a continuacion presentamos el codigo y que pueden obtener tambien desde este link













<? 
// This code is released under the same license as PHP

$SessionTableName = "PHPSessions";
assert(!empty($SessionTableName));

function mysql_session_open ($save_path, $session_name) {
mysql_pconnect("HOST","USER","PASS");
mysql_select_db("BASE");
return true;
}

function mysql_session_close() {
return true;
}

function mysql_session_read ($SessionID) {
global $SessionTableName;

$SessionID = addslashes($SessionID);

$session_data = mysql_query("SELECT Data FROM $SessionTableName
WHERE SessionID = '$SessionID'") or die(db_error_message());
if (mysql_numrows($session_data) == 1) {
return mysql_result($session_data, 0);
} else {
return false;
}
}

function mysql_session_write ($SessionID, $val) {
global $SessionTableName;

$SessionID = addslashes($SessionID);
$val = addslashes($val);

$SessionExists = mysql_result(mysql_query("SELECT COUNT(*) FROM $SessionTableName
WHERE SessionID = '$SessionID'"), 0);

if ($SessionExists == 0) {
$retval = mysql_query("INSERT INTO $SessionTableName
(SessionID, LastActive, Data)
VALUES ('$SessionID', UNIX_TIMESTAMP(NOW()), '$val')")
or die(db_error_message());
} else {
$retval = mysql_query("UPDATE $SessionTableName SET
Data = '$val', LastActive = UNIX_TIMESTAMP(NOW())
WHERE SessionID = '$SessionID'") or die(db_error_message());
if (mysql_affected_rows() == 0) {
error_log("unable to update session data for session $SessionID");
}
}

return $retval;
}

function mysql_session_destroy ($SessionID) {
global $SessionTableName;

$SessionID = addslashes($SessionID);

$retval = mysql_query("DELETE FROM $SessionTableName
WHERE SessionID = '$SessionID'") or die(db_error_message());
return $retval;
}

function mysql_session_gc ($maxlifetime = 300) {
global $SessionTableName;
$CutoffTime = time() - $maxlifetime;
$retval = mysql_query("DELETE FROM $SessionTableName
WHERE LastActive < $CutoffTime") or die(db_error_message());
return $retval;
}

session_set_save_handler (
'mysql_session_open',
'mysql_session_close',
'mysql_session_read',
'mysql_session_write',
'mysql_session_destroy',
'mysql_session_gc' );
?>




Como usar el los nuevos handlers


Para usar los nuevos handlers tenemos que, en primer lugar crear la tabla PHPSessions con el codigo provisto para alguna base mysql, si se quiere se puede crear una nueva base para las sesiones, una vez creada la tabla modificar el script con los handlers indicando HOST,USER,PASS y BASE en la funcion mysql_session_open, luego solamente resta poner el script en el servidor y hacer un include del mismo "antes" del session_start, y eso es todo, pueden probarlo y ver como los datos se almacenan en la tabla y se mantiene la persistencia de la sesion. Para usarlo en otro server el proceso es el mismo, no olviden poner correctamente el HOST, USER,PASS en la funcion de conexion para que los dos servidores se conecten a la misma base MySQL.


Conclusiones


Las tecnica que hemos descripto permite compartir sesiones facilmente entre servidores y ademas ha demostrado ser
mucho mas limpia y eficiente incluso en instalaciones con un unico servidor, esta es una de las cosas a tener en cuenta
cuando nos lancemos a construir multiples sitios o sitios que quieran compartir usuarios en forma limpia y efectiva.