Un videotutorial para hacer altas, bajas, eliminaciones y consultas con LINQ to SQL, fácilmente en ASP.Net, Un saludo!
Exporta Datos Fácilmente desde PHP a Excel
Soporte Mono Touch para Ipad
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 * / |
/ * SQL Server muestra de mapas de todo el esquema de partición Rango partición mismo grupo de archivos * / |
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 * / |
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
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(); |
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(); |
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 ( |
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
| Funcion | Prototipo | Descripcion |
| mysql_session_open | mysql_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_close | mysql_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_read | mysql_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_write | mysql_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_destroy | mysql_session_destroy($key) | Es invocada para eliminar los datos de una sesion. |
| mysql_session_gc | mysql_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
| Funcion | Descripcion |
| 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
<? |
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.
Silverlight: Universal GUI toolkit
The upcoming version of Silverlight will no longer be a Web-only technology. It will now be possible to build full desktop applications with Silverlight.
Desktop Silverlight applications differ from the standard Silverlight in a few ways:
- Full access to the host file system, like any other .NET application would have.
- None of the socket connectivity limitations that are present on the sandboxed versioned of Silverlight. Full network access (we should build a MonoTorrent UI for it!)
- Built-in Notifications API to show up bubbles to the user when they need to interact with the application.
Although Moonlight has supported this mode of operation since day one, turning this into a standard way to develop applications was going to take a long time. We would have needed to port Moonlight to Windows and OSX and then we would have to bootstrap the ecosystem of "Silverlight+" applications.
But having Microsoft stand behind this new model will open the gates to a whole new class of desktop applications for the desktop. The ones that I was dreaming about just two weeks ago.
This was a big surprise for everyone. For years folks have been asking Microsoft to give Silverlight this capability to build desktop apps and to compete with Air and it is now finally here. This is a case of doing the right thing for users and developers.
Desktop Tools in Silverlight?
Now that this technology is available, perhaps it is a good time to start a movement to create a suite of Silverlight-based desktop applications.
The benefits to me are many:
- .NET applications that actually look good. In the past your choices were basically of Gtk# or Winforms, neither one really designed for this graphic-designer driven world.
- We can join forces with Windows/MacOS developers to create the next generation of desktop applications.
- Developers can tap into the large ecosystem of third-party controls that exists for Silverlight.
For the Moonlight team, this means that there is a lot of work ahead of us to bring every Silverlight 3 and 4 feature. I think I speak for the whole Mono team when I say that this is exciting, fascinating, challenging and feels like we just drank a huge energy boost drink.
If you want to help, come join us in the #moonlight or #mono channels on the IRC server at irc.gnome.org.
Silverlight 4
There are many other great features in Silverlight 4, but none as important as Silverlight becoming a universal runtime for the CLR. This is a revolution.
If you are curious about all the new tactical features of the revolution, check Tim's Complete Guide to the new Silverlight Features.
If you have the time, watch Scott's keynote's presentation where he introduced the new features (he starts at 1:02). I loved the use of HTML as a Silverlight brush (paint with HTML and even Flash). If you have time, these are some great sessions on Silverlight:
- Microsoft Silverlight 4 Overview: A good intro, repeats a lot from Scott's keynote.
- Improving and Extending the Sandbox with Silverlight 4: Joe Stegman's presentation on the revolution.
- RIA Services: The technique that lets you "remove four acronyms" from your development, mindblowing.
Invocar funciones PHP desde Flex con AMFPHP
Adobe Flex es un framework de desarrollo que nos permite crear rápida y facilmente aplicaciones RIA (Aplicaciones de Internet Enriquecidas), basado en la plataforma Flashcombinando el lenguaje de marcas MXML y ActionScript. También, gracias a su entorno de desarrollo se simplifica el desarrollo de aplicaciones AIR.
En esta oportunidad quiero explicar cómo hacer uso de Flex para invocar funciones hechas enPHP (no entraré en detalles, pues no conozco a fondo ActionScript). Una forma de hacerlo es mediante AMFPHP. Pero ¿qué es AMFPHP? Es un RPC (Llamada a Procedimientos Remotos) que nos permite comunicar datos de aplicaciones-funciones entre el cliente (JavaScript, Flash, Flex, etc) y servidor (PHP, ASP, JSP, etc). En este caso AMFPHP realiza la comunicación de procesos remotos entre Flash (y por extensión aplicaciones RIA en Flex y AIR) y PHP.
Vamos por paso para la implementación de un proyecto en Flex que llame a funciones en PHP.
1. Descargar y extrae la carpeta amfphp que contiene la siguiente estructura (y para no perderse en el tutorial, colocala en la raíz de tu sitio web de tal forma que quede así:http://localhost/amfphp)
+ ampphp
+services
+core
+browser
-gateway.php
-globals.php
-.htaccess
-json.php
-xmlrpc.php
-phpinfo.php
2. Verificar el funcionamiento del amfphp. Para ello abres tu navegador y escribeshttp://localhost/amfphp/browser. Aparecera una ventana de configuración donde se muestra la ubicación del archivo gateway que actuará como puerta de enlace. En esta ventana solo dale clic en Save.
Podrás apreciar un especie de explorador. En la vista árbol a tu izquierda se mostrarán todas las clases en PHP que podemos usar. Para que una clase aparezca allí debes guardarla en el directorio services.
3. Vamos crear una clase en PHP. Vamos a lista una relación de clientes de una base de datos MySQL. La estructura de la tabla es la siguiente (ingresa un par de registros luego):
CREATE TABLE IF NOT EXISTS `cliente` (
`id` tinyint(7) NOT NULL auto_increment,
`nombres` varchar(50) NOT NULL,
`ciudad` varchar(50) NOT NULL,
`sexo` char(1) NOT NULL,
`telefono` varchar(10) NOT NULL,
`fecha_nacimiento` datetime NOT NULL,
KEY `id` (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
En archivo PHP debe tener el mismo nombre que la clase, en este caso se llama sample.php:
<?php
class sample{
function getUsers () {
$mysql = mysql_connect(localhost, "root", "");
mysql_select_db( "empresa" );
$Query = "SELECT * from cliente";
$Result = mysql_query( $Query );
while ($row = mysql_fetch_object($Result)) {
$return[] = $row;
}
return( $return );
}
}
?>
Volvamos a http://localhost/amfphp/browser y podemos apreciar en la lista de servicios, a la mano izquierda, nuestra clase llamada sample. Si la seleccionamos se muestran sus métodos, en este caso getUsers, y pulsamos el botón call se mostrará el resultado en la parte inferior.
4. Abrimos Flex (en mi caso Flex Builder 3) y creamos un nuevo proyecto Flex de nombresample.
Configuramos la ruta en nuestro servidor local:
El archivo autogenerado sample.mxml lo dejamos allí por un momento. Ahora vamos agregar un archivo de ActionScript a nuestro proyecto, para ello le damos clic derecho en la carpeta srcy seleccionamos New > ActionScript File.
El archivo RemotingConnection.as contiene un clase que llama a una conexión remota especificando la url de ésta.
package {
import flash.net.NetConnection;
import flash.net.ObjectEncoding;
public class RemotingConnection extends NetConnection
{
public function RemotingConnection( sURL:String )
{
objectEncoding = ObjectEncoding.AMF0;
if (sURL) connect( sURL );
}
public function AppendToGatewayUrl( s : String ) : void
{
//
}
}
}
Ahora el archivo autogenerado sample.mxml, lo reemplazamos por el siguiente contenido:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" xmlns="*" creationComplete="initApplication()">
<mx:DataGrid dataProvider="{dataProvider}">
<mx:columns>
<mx:DataGridColumn headerText="ID" dataField="id"/>
<mx:DataGridColumn headerText="Nombres" dataField="nombres"/>
<mx:DataGridColumn headerText="Ciudad" dataField="ciudad"/>
<mx:DataGridColumn headerText="Telefono" dataField="telefono"/>
<mx:DataGridColumn headerText="Sexo" dataField="sexo"/>
<mx:DataGridColumn headerText="Fecha Nacimiento" dataField="fecha_nacimiento"/>
</mx:columns>
</mx:DataGrid>
<mx:Script>
<![CDATA[
[Bindable]
public var dataProvider:Array;
public var gateway : RemotingConnection;
public function initApplication()
{
gateway = new RemotingConnection( "http://localhost/amfphp/gateway.php" );
gateway.call( "sample.getUsers", new Responder(onResult, onFault));
}
public function onResult( result : Array ) : void
{
dataProvider = result;
}
public function onFault( fault : String ) : void
{
trace( fault );
}
]]>
</mx:Script>
</mx:Application>
Hemos creado un DataGrid para mostrar los datos de la consulta al servidor MySQL. Dentro de las etiquetas <mx:Script/> hacemos uso de ActionScript para llamar a la claseRemotingConnection que creamos anteriormente. La función initApplication() se encarga de conectar con la puerta de enlace: gateway.php, y llama al método getUsers() de la clasesample. La respuesta la recibe la función onResult() que pasa los datos a la variabledataProvider y ésta pasa al DataGrid.
6. Ahora simplemente compilamos el proyecto (Ctrl + F11) y podemos apreciar el resultado en el navegador web.
De esta forma podemos crear aplicaciones web complejas que incluyan inserción y actualización de datos. Pero eso no esto, incluso podemos crear aplicaciones de escritorio gracias a AIR con esta funcionalidad, es decir llamadas a procesos remotos. Les dejo los archivos de este tutorial para que lo prueben en su servidor local.
Lo vi en: Flex and PHP Using AMFPHP
Parecidos entre lenguajes de servidores y las mujeres
101 Switching Protocols ==== Si no te decides...
303 See Other ==== Pruebalo con otra
400 Bad Request ==== Dímelo con flores
401 Unathorized ==== Estoy casada
402 Payment Required === Son 10.000 y la cama
403 Forbidden/Access Required === ZZZZZZZAS! (bofetón)
404 Not Found === He quedado con las amigas
405 Method Not Allowed === No, por detrás no...
406 Method Not Acceptable === ... y en la boca menos
407 Proxy Auth. Required === Lo hablaré con mi madre
408 Request Timeout === ¿Sabes cuánto hace que no me llamas?
409 Conflict === ¿Quien era ESA?
410 Document Removed === Quiero el D-I-V-O-R-C-I-O
411 Lenght Required === ¿A eso llamas 'pedazo polla'?
412 Precondition Failed === ¿Que no has traido condones?
413 Request Entity Too Large === Eso no me va a caber ahí dentro
414 Request URL Too Large === Eso tampoco me va a caber ahí dentro
415 Unsupported Media Type === A cuatro patas no me gusta
500 Internal Server Error === Tengo la regla
501 Not Implemented === Nunca haría *eso*
502 Bad Gateway === ...y por ahí, menos todavía
503 Service Unavailable === Me duele la cabeza
504 Gateway Timeout === ¿Ya está?
Y no hay que olvidar el raro e infrecuente
200 OK === Chica facilona
Dia del codigo de barras
Si hicieron una búsqueda en Google hoy, quizás habrán notado que algo extraño le pasó al logo. El nuevo “doodle” que aparece hoy, y que debiera ser fácilmente reconocido por todos, celebra los 57 años del código de barras.
El invento, que ha facilitado las compras en el supermercado en el mundo (entre otras cosas), fue patentado el 7 de Octubre de 1952 por los ciudadanos del país del consumismo estadounidenses Norman Joseph Woodland y Bernard Silver.
Silver, quien administraba una cadena de locales de comida, buscó crear un sistema que facilitara la lectura de los datos de los productos de forma automática. Para ello se asoció con el profesor del Instituto Tecnológico Drexel, de donde se había graduado, y crearon el hoy universal código de barras.
La primera versión consistía en una serie de círculos concéntricos, que luego fue reemplazada por las líneas rectas que se utilizan hasta hoy.
Link: Bar code: invention history behind new Google doodle (Telegraph)
C# (C Sharp) Mejor que JAVA???? Opinen
les dejo un poco de teoria
“Muchos dicen que si Java se puede considerar un C++ mejorado en cuestiones de seguridad y portabilidad, C# debe entenderse como un Java mejorado en todos los sentidos: desde la eficiencia hasta la facilidad de integración con aplicaciones tan habituales como Microsoft Office o Corel Draw."
Las frases del inge pollis en facebook!
Google festeja hoy sus 11 años Online (¿de vida?)
El 27 de septiembre parece haber sido la fecha elegida por la empresa que hoy mismo cambia su logopara celebrarlo, aunque muchas personas discrepan y consideran que el nacimiento de Google tuvo lugar el día 15 del mismo mes
[caption id="" align="alignnone" width="600" caption="11 años de google"]
Hoy Google celebra su cumpleaños número 11 y para celebrarlo agregó una letra L extra: Googlle (Goog11e).
El aniversario de Google se celebra durante el mes de septiembre, no tiene una fecha exacta, aunque en2002 y 2005 (y ahora 2009) se escogió el día 27 de septiembre para celebrarlo desde el logo del buscador.
Con once primaveras a sus espaldas y convertidos en la mayor empresa de internet, Google nos regala, semana a semana, todas las novedades para hacer más sencilla nuestra navegación por la red.
Según figura en los archivos, fue fundada el 7 de septiembre de 1998 por Larry Page y Sergey Brin(dos estudiantes de doctorado en Ciencias de la Computación de la Universidad de Stanford).
Aunque su principal producto es el buscador, la empresa ofrece también entre otros servicios: un comparador de precios llamado Google Product Search (antes conocido como "Froogle"), un motor de búsqueda para material almacenado en discos locales (Google Desktop Search), y el servicio de correo electrónico llamado Gmail, el cual pone a disposición para sus usuarios más de 7 GB[2] de espacio.
También es famoso su programa Google Earth, un mapamundi en 3D con imágenes de alta resolución. Recientemente lanzó su versión beta de un servicio de mensajería instantánea basado en Jabber/XMPP llamado Google Talk.
Encontrar el valor de un Window Message
De vez en cuando, si trabajamos con WinForms, nos puede surgir la necesidad de manejar un evento a muy bajo nivel y para hacerlo tenemos que interceptar los famosos Window Messages, o mensajes de ventana. Estos mensajes son el mecanismo que utiliza Windows para comunicarse con una aplicación. Cuando apretamos una tecla y nuestra aplicación responde, parece que es nuestra aplicación la que ‘atrapó’ el teclazo, pero en realidad es el Sistema Operativo (SO) el que lo atrapó (debido a que el SO es quien controla el puerto donde esta conectado el teclado) y este le envía un mensaje a nuestra aplicación para que responda al mismo, normalmente imprimiendo el caracter representado por la tecla presionada. Aunque no lo parezca, el SO es quien tiene control de todo lo que sucede y cuando nuestra aplicación responde a distintos inputs, es en realidad el SO el que le ordena que haga una cosa u otra.
Si tenemos un Form y el SO determina que es necesario que sea redibujado (porque cambio su contenido por ejemplo), entonces se envía un mensaje conocido como WM_PAINT (en .NET veremos que esto dispara el evento Paint), en cambio si presionamos la tecla ‘Q’ en el teclado, entonces el mensaje recibido por nuestra aplicación es WM_KEYDOWN (también tenemos el evento KeyDown en .NET, el cual es lanzado cuando se recibe un mensaje de este tipo). Cabe aclarar que el nombre de los mensajes es solo una ayuda para nosotros los humanos, ya que los mensajes en realidad no son más que un valor entero, y estos nombres son los nombres de las constantes asociadas a los mismos.
Para interceptar estos mensajes lo que se suele hacer comúnmente es sobrescribir el métodoWndProc definido en la clase Control de la siguiente manera:
1: ...2: private const int WM_PAINT = 15;
3:4: protected override void WndProc(ref Message m) {
5:6: if (m.Msg == WM_PAINT) {
7: // Atrapamos el mensaje...
8: } else{
9: // Ignoramos el mensaje y dejamos que siga su curso
10: base.WndProc(ref m);
11: } 12: 13: } 14: ...El método WndProc es el que se encarga de procesar todos los mensajes que recibe un Form y es por eso que ese es el punto indicado para atraparlos.
Ahora el problema esta en conocer el valor de los mensajes, ya que muchas veces uno sabe que mensaje procesar, pero no sabe cual es su valor. Estos valores están definidos en la claseSystem.Windows.Forms.NativeMethods y System.Design.NativeMethods, pero lamentablemente estas clases son internas y no tenemos acceso a ellas, por lo que vamos a tener que usar .NET Reflector para ver su contenido.
La info de este post fue sacada de aquí.
Saludos
MonoDevelop 2.2 Beta 1: We go cross platform.
Since the beginning of time, man has yearned to get a cross platform .NET IDE. Homer's Odyssey described one man's effort to achieve such a thing. And it was not until today, September 9th of 2009 that the world can test out such a tool.
With this release MonoDevelop leaves its cozy Linux nest and embarks on a wild adventure into the hearth of MacOS and Windows. The MonoDevelop team made this one of their major goals for this release: to turn our loved IDE into a cross platform IDE.
If you are curious about the details, check out the What is new in MonoDevelop 2.2 page.
MonoDevelop on Windows
We are not only bringing MonoDevelop to OSX and Windows as a plain GUI port, but we are also providing installers, deep operating system integration and support for native debugging on each platform.
MonoDevelop on MacOS X
In addition to becoming a cross platform IDE, there are many new features in MonoDevelop.
For instance, MonoDevelop can be used to develop ASP.NET MVC applications on OSX and Linux and Silverlight applications on OSX and Linux.
Debugger
MonoDevelop now has integrated debugger support. Not only it is able to debug Mono applications, it also can work as a frontend to GDB to debug native applications.
In addition, on Linux it is possible to debug ASP.NET pages.
New Add-ins
New exciting add-ins: ASP.NET MVC, Silverlight and iPhone (for use with MonoTouch).
Policies
A common problem that we face as open source developers is that not every project uses the same coding style. Different teams use different coding conventions. MonoDevelop now supports policies to describe how files should be edited and what defaults should be used in each:
Editor Improvements
My favorite new feature is Dynamic Abbrev (Alt-/) a feature that we brought from Emacs and that fills me with joy. That being said, for the non-Emacs lovers there are plenty of features that you asked for, and that we implemented:
- Extensive refactoring support. And I mean, it is extensive.
- Code templates.
- On the fly formatting.
- Acronym Matching in Code Completion
- XML Documentation Shown in Code Completion
- VI mode for those users hooked up on VI commands, they can now use those within MonoDevelop.
Another pretty cool feature is the code generation support that is triggered with Alt-Insert. When you press Alt-insert it will popup a context sensitive dialog box that offers a few options of code that could be generated at this point: ToString methods, Equals/GetHashCode methods all based on existing fields and properties.
Why go Cross Platform?
Going cross platform means that developers will have the same tool across all of the operating systems they use: Windows, Mac and Linux.
.NET developers that have been enchanted by OSX will be able to continue developing software with their favorite programming languages while enjoying OSX and will be able to go back and forth between Windows, OSX and Linux as needed. This also means that they can work with developers in other platforms, regardless of the personal choices of other team members.
As many of you know, the number of contributors to a project is linked to the number of users of that project. By expanding our market presence from Linux, we expect to get contributions, fixes, improvements, bug reports, code and add-ins from developers in other platforms.
We intend to make MonoDevelop the Eclipse of the .NET community. Just like Eclipse became the foundation for Java development, we hope that MonoDevelop will become the foundation for .NET development, and hopefully for much more than that.
A multi-system IDE
We are not religious when it comes to supporting other programming languages [1]. We want to embrace not only .NET-based projects like Gtk#, Silverlight, ASP.NET, Boo, C#, F#, Visual Basic and Windows.Forms. We are also embracing other developer platforms like Python, C/C++, Vala, and we want to expand our presence to work with the Flash, PHP, Ruby, Rails, Flex and any other communities that need a cross platform IDE.
[1] we are just religious about the fact that C# is a better programming language to build an IDE than Java is.
Thanks!
This release could not have been possible without the endless nights and the collaborations of our contributors and all of the end users that reported bugs and gave us feedback.
Posted by Miguel de Icaza on 09 Sep 2009
Visita A La Universidad Tecnologica De Gutierrez Zamora
Consumir Un Servicio Web ASP.NET Usando Apache
En esta entrega analizaremos la posibilidad de utilizar el web server apache para montar servicios web asp.net, mas adelante seguire con mas aportes. Saludos
Consumir Un Servicio Web ASP.NET Usando Apache