Aquí les dejo este video!

April 26, 2007
Mensaje Steve Jobs en la Universidad Standford
Publicado por
Metxtli
@
1:56 PM
2
comentarios
Etiquetas: Internet
Aprenda inglés
Alguien ha escuchado acerca del programa "Tell me more" para aprender inglés?
Bueno pues resulta que lo estoy probando y sinceramente me parece muy bueno. Tiene muchísimos ejercicios de pronunciación,
analiza tu voz y te dice en una escala que tan bien pronunciaste, tiene una especie de crucigramas que te ayudan a recordar las
palabras de los ejercicios entre otras cosas, ya iré posteando lo que vaya viendo de entrada parece mucho muy bueno.
Si a alguien le interesa probarlo, deje su mensaje.
Aquí les dejo una reseña: http://www.auralog.com/us/individuals_home.htm
Learn a language with TELL ME MORE, THE international stan dard for language learning software:• Over 5 million satisfied users worldwide.
• Global Leading organizations have placed their trust in TELL ME MORE: The U.S. State Department, the U.S. Government, the FBI, the Canadian Federal Government, EDS, BMW, Carnival Cruise Lines, Mercedes, Telefónica...
• Used everyday in more than 10,000 Academic Institutions. TELL ME MORE addresses all the skills critical to learn a language: reading, writing, listening, speaking, vocabulary, grammar, and culture.
This package includes all 3 levels: Beginner, Intermediate, and Advanced and is the perfect solution to learn a language. With up to 850 hours of learning, TELL ME MORE language software is the most extensive offer on the market.
The intelligent software version evaluates your progress as you learn a language, and uses your results to suggest the activities and exercises best suited to your needs.
Whatever your objectives or level, TELL ME MORE adapts to your needs and guides you through the language learning process, just as a teacher would.
UP TO 850 HOURS OF LANGUAGE LEARNING,
DIVIDED INTO 6 WORKSHOPS
• The Lesson Workshop organizes activities by topic.
• The Cultural Workshop helps to improve your knowledge of the countries in which the language is spoken.
• The Grammar and Vocabulary Workshops include sets of exercises linked to grammar rules, verb conjugations and key vocabulary words (classified by either topic or level).
![]()
• The Written Workshop includes sets of exercises designed to help you improve your written expression.
• The Oral Workshop contains numerous dialogues and interactive videos focusing on both oral comprehension and expression.
>To learn a language, this language software contains up to 4,000 exercises organized in 35 different types of activities.
3 ALTERNATIVE LEARNING MODES
TO HELP PERSONALIZE YOUR LANGUAGE LEARNING
• The Dynamic Mode uses real-time performance analysis to tailor the language learning process to your individual needs. Evaluating your progress as you work, it adjusts your activities based on the results of your previous exercises.
• The Guided Mode offers a personalized lesson structure based on your own objectives and time constraints.
• The Free-to-Roam Mode allows you to select the activities and workshops of your choice, giving you the freedom to create your own language lessons.
THE LATEST TECHNOLOGY TO HELP YOU LEARN A LANGUAGE
• State-of-the-art speech recognition technology enables you to evaluate your pronunciation, and automatically detects and corrects your errors (using S.E.T.S .® technology). ![]()
• 3D animations illustrate the movements of the lips and mouth to help improve your pronunciation. ![]()
• A modern, user-friendly interface ensures effortless browsing.
• 2 hours of video activities included.
Publicado por
Metxtli
@
7:45 AM
0
comentarios
Etiquetas: Tools
April 22, 2007
Simi, el exorcista
Ahora si que no lo pude evitar, pero descubri que SIMI es el exorcista!!!
para muestra un botón, digo un video:
Publicado por
Metxtli
@
9:05 PM
0
comentarios
Etiquetas: Videos
Abrigos de piel
Esto va a ser una especie de queja!
Resulta ser que navegando en un foro me encontré un post acerca de la crueldad con la que son sacrificados
los animales para poder hacer un abrigo de piel.
Acá les dejo un resumen de lo que se necesita:
| |||||||
| |||||||
|
Aquí les dejo la lista completa: Pagina
Eso no es lo peor del caso, el post inicia con un vídeo, realmente cruel. ADVERTENCIA, es demasiado cruel, mira que se me han revuelto un poco las tripas, y creo que es de coraje!. Imagina la escena en donde les quitan.. que digo quitan, ARRANCAN la piel
estando los pobres animales vivos. Es demasiada crueldad la que usan. En fin, lo dejo a su consideración.
Publicado por
Metxtli
@
8:51 PM
0
comentarios
Etiquetas: Articles, Human behavior
Curso de fotografía
Hace tiempo estuve leyendo un curso que me pareció bueno acerca de fotografía, para mi, que prácticamente no sé nada
acerca del tema, pues me ha sido muy útil. Aquí les dejo el URL.
PD: En julio es mi cumple, se aceptan regalos:
Les dejo uno de los capítulos
37. Técnicas - Fotos en la playa y en la nieve
El problema de las fotografías en la playa o en la nieve es el exceso de luz ya que, esto provoca en los fotómetros de las cámaras una lectura incorrecta. De esta forma la fotografía será demasiado rápida y aparecerá oscura.
-Se debe compensar la fotografía, ajustando a +1, +2 ó +3 la compensación de exposición si hace un día oscuro, nublado o soleado respectivamente.
-Para resaltar el cielo y contrastarlo más, así como eliminar parte de la luz sobrante, se recomienda utilizar un filtro polarizador.
Así es como el ojo humano percibe el color de la nieve.
Así es como el fotómetro de la cámara percibe el color de la nieve.
![]()
Exposición compensada.
Exposición sin compensar.
Publicado por
Metxtli
@
8:14 AM
1 comentarios
Etiquetas: Internet
Arranque sin llave
Who Needs Car Keys?
Suena bien no? subirte a tu coche, presionas el freno, y con un botón lo echas a andar! Bueno pues esto ya es una realidad (nuevamente)
para más información echarle un vistazo al siguiente artículo.
Publicado por
Metxtli
@
7:36 AM
0
comentarios
Etiquetas: Articles
April 20, 2007
Cola de Caballo, MTY
Bueno en esta ocasión solo para comentar lo bien que nos la
pasamos el domingo pasado. Anduvimos en el parque Cola de Caballo y después
en la ya bien conocida "Presa de la boca".
Un saludos a Candy, Esparta, Jara, La China y al buen Eydar que nos invitó.
Aquí les dejo unas fotos :D.

En la entrada :P
De izquierda a derecha: yo, Juanita, Jara, su novia, Candy y Esparta
y Eydar detrás de la cámara (En la presa, comiendo)
Esparta aventandose del bungie!
Publicado por
Metxtli
@
1:35 PM
2
comentarios
March 28, 2007
Notas breves
Si tienes oportunidad, pasen por esta página: http://www.conocimientoenlinea.com, muy interesante!!
DATOS RELEVANTES
•La Lingüística es la Ciencia del lenguaje humano; es decir, es el estudio científico de las lenguas; especialmente estudia los fenómenos de su evolución y desarrollo, su localización en el mundo, las relaciones entre ellas, etc.
•La Lexicología es el estudio científico de las palabras desde el punto de vista histórico, semántico, etimológico, etc.
•La Prosodia es el arte de pronunciar bien y hablar con propiedad.
•La Gramática es la Ciencia de las reglas de una lengua hablada o escrita.
•La Morfología es la parte de la gramática que estudia las formas de las palabras consideradas aisladamente.
•La Sintaxis es la parte de la gramática que estudia la coordinación de las palabras en las oraciones.
•La Ortografía es la parte de la gramática que enseña a escribir correctamente.
•La Semántica es el estudio del significado de las palabras y sus variaciones.
•La Fonética es el estudio de los sonidos y las articulaciones del lenguaje hablado.
•La lengua o idioma es el código de comunicación de un país o nación.
•El primer libro impreso fue la Biblia, en el año 1455. Fue su impresor el inventor alemán Johannes Gensfleisch Gutenberg (1398-1468).
•En diciembre de 1901, Guillermo Marconi realizó la primera transmisión radiofónica.
•Los juegos olímpicos de Berlín 1936 fueron el primer gran acontecimiento televisado de la historia.
•El Internet "nació" en 1969; en la actualidad, es el medio de comunicación masiva más utilizado y con mayor expansión en el mundo; cuenta con miles de millones de páginas de información diversa; es decir, de todas las áreas del conocimiento humano.
ASÍ FUE DICHO
•"Yo nunca me he quedado sin patria; mi patria es el idioma" María Zambrano.
•"Cuando hables, procura que tus palabras sean mejores que el silencio" Proverbio hindú.
•"Pensar es hablar el alma consigo misma" Platón.
•"Sí y no son las palabras más antiguas y simples, pero que requieren más reflexión" Pitágoras.
•"El leer hace completo al hombre, el hablar lo hace expeditivo, el escribir lo hace exacto" Francis Bacon.
•"Por tus palabras serás justificado, y por tus palabras serás condenado" Mateo 12.37.
•"El labio veraz permanecerá para siempre; mas la lengua mentirosa sólo por un momento" Proverbio 12.19.
•"Si yo hablase lenguas humanas y angélicas, y no tengo amor, vengo a ser como metal que resuena, o címbalo que retiñe" 1ª Corintios 13.1.
Publicado por
Metxtli
@
1:55 PM
0
comentarios
Etiquetas: Ocio
DIALÉCTICA DE LA PUBLICIDAD
DIALÉCTICA DE LA PUBLICIDAD
Símbolo VS Realidad
Fuente: http://www.conocimientoenlinea.com/ediciones/Revista%20Conocimiento%2020/html/20/comunicacion_3.htm
Doctor Mario Nieves Cruz Universidad Regiomontana |
1. Diáspora medial
Los datos y evidencias de la investigación permiten sostener que el impacto de la publicidad televisiva no depende sólo de su volumen ni de la cantidad de individuos directamente expuestos. Campañas de avalancha fracasaron de manera escandalosa. Acontecimientos de baja intensidad mediática han provocado explosiones comerciales. Uno y otro extremos —éxito y fracaso— están relacionados con un fenómeno social que llamaremos diáspora medial.
El mensaje publicitario necesita agentes. Sin ellos no hay diáspora y sin diáspora no hay prácticas masivas de consumo. El agente por excelencia es el consumidor. La relación hombre - contenido simbólico al que presta su agencia es dinámica, compleja, multidimensional, causal e intersubjetiva. El hombre no dispersa anuncios; da sentido a símbolos. "El anuncio es el hombre", pudiera decirse. Al participar en la dinámica de consumo desatada por el discurso publicitario y servirle de agente, no se desprende de aquél, sino que se lo apropia, lo vehicula y lo comparte en relaciones intersubjetivas reticulares, complejas y de crecimiento exponencial. No tendría mayor alcance investigar cuántas personas vieron en el anuncio, si no se comprende este proceso ligado a la agencia, que tiene lugar al menos en dos dimensiones:
a) En la dimensión del consumo
b) En la dimensión de las prácticas discursivas
Agencia, diáspora y consumo
Se emplea el concepto de agencia del antropólogo Arjum Appadurai, en el sentido de ciertas formas de respuesta y reacción que hacen del sujeto un difusor de lo que consume para su placer. El agente por excelencia de esa diáspora es el propio consumidor. La mejor publicidad de las pulseras Livestrong
no la hizo Nike, sino los millones de seres humanos que se convirtieron en sus agentes al sumarla a su indumentaria.
DIÁSPORA Y PRÁCTICAS DISCURSIVAS.
Hay diáspora cuando la experiencia del consumo, o las ideas sobre éste, o la reflexión sobre ciertas prácticas que conducen al consumo invaden las relaciones dialógicas y a través de ellas alimentan los flujos cotidianos del discurso social. La pulsera Livestrong incorporó a las charlas cotidianas temas que proporcionaron cierta calidez a innumerables conversaciones.
Las prácticas discursivas se convirtieron en agentes del símbolo que las objetivaba, y una erupción de pulseras amarillas comenzó a distinguirse en la muñeca de celebridades del espectáculo, ídolos deportivos, conductores de programas televisivos, personajes carismáticos de dramas juveniles y fumadores arrepentidos.
EL HOMBRE COMO EXTENSIÓN DE LA PUBLICIDAD
El concepto permite rescatar al sujeto de la visión cartesiana que lo entiende sólo como simple receptor y consumidor de mensajes publicitarios, porque los datos disponibles sugieren que acaso necesitemos construir a estas alturas una apremiante visión en la que estudiemos al hombre como extensión de la publicidad.
Réplica cognitiva
Réplica cognitiva es un efecto complejo que asociamos a la producción simbólica de los medios, y de manera muy especial a la publicidad, la cual tiende a restringir los conocimientos de ciertos grupos a una réplica empobrecedora de las percepciones simbólicas que intervienen en la construcción de la subjetividad del individuo, donde el consumo y los procesos relacionados con éste ocupan un sitio dominante. Los alcances de la réplica parecen determinados por el vínculo entre la experiencia de ciertos grupos sociales y la subjetivación de los modelos dominantes del discurso publicitario, que luego se objetivan en sus proyectos de vida.
El conocimiento tiende a configurarse como réplica de las percepciones acu-muladas en el espacio de la publicidad, y los alcances de aquél difícilmente pudieran rebasar la membrana de la burbuja mediática que seduce al consumidor, quien se priva de conocimientos más amplios relacionados con sus propias experiencias, su vida y el contexto en que tienen lugar. El efecto de la réplica cognitiva no se debe só-lo a la publicidad, pero ésta pudiera ocupar un lugar central en el proceso en que intervienen además factores culturales y sociales.
RÉPLICA DEL UNIVERSO SIMBÓLICO
El desarrollo cognitivo del sujeto se configura como una réplica del universo simbólico en que se modelan sus conocimientos, lenguaje, actitudes y sensibilidad. El efecto de réplica disminuye en la medida en que es más elevada la cultura del sujeto o más amplias y consistentes su formación y experiencias culturales. En los jóvenes con inquietudes culturales, que se relacionan con el arte y la literatura y se inquietan por el saber, el tema del consumo pierde su centralidad.
La réplica es una configuración de cierto saber del sujeto en torno a ciertas nociones del campo en que se forma, y guarda relación con los objetos a los que presta mayor interés. Hay dos conceptos centrales en la obra de Bourdieu (2002) —habitus y campo— a través de los cuales se explora mejor el fenómeno al que apenas nos aproximamos teóricamente. El habitus y el campo bourdiano designan dos nudos de relaciones. El habitus favorece el proceso de integración cognitiva que tiene lugar dentro de un orden social determinado —el campo— y se reproduce a través de las prácticas del sujeto. La réplica cognitiva opera en los límites del habitus y se configura dentro de las fuerzas del campo social.
UNIDAD DEL
CONOCIMIENTO SENSIBLE
Bajo ciertos términos y condiciones, la vida de los jóvenes estudiados se reduce a una réplica de frágil configuración en que el conocimiento sobre temas relacionados con la publicidad y el consumo rebasa las nociones del mundo que produce la relación directa entre el individuo y los espacios naturales de su existencia. La noción del sí mismo es reducida aquí a sus más pobres y estrechas manifestaciones, atrapada "en un cañamazo de relaciones", como diría Lyotard (1987), que han sido reducidas a sus más desnaturalizadas e insignificantes expresiones. Si la percepción es "la unidad psicológica básica del conocimiento sensible" (Cuesta, 2000), los resultados de este estudio conducen a advertir el papel predominante de la publicidad televisiva en la construcción de imaginarios que ponen bardas a una percepción plena del mundo real.
Wolfgang Haug ha propuesto el concepto de "estética de la mercancía", con la intención de subrayar cómo se organizan espacios imaginarios alrededor de los objetos consumidos o deseados. Todo parece indicar que esos sitios de la imaginación son tan minúsculos y frágiles como la "estética de la mercancía". La réplica cognitiva se caracteriza por ser alienante, selectivo y regresivo, y opera en dos dimensiones:
1. En la subjetividad del individuo, que limita su imaginario al pobre y efímero arsenal de conocimientos que le proporciona su intensa relación con el mundo del consumo, que se objetiva en la producción simbólica de los medios y muy especialmente en la publicidad.
2. En la relación del individuo con el mundo exterior, hacia el cual proyecta la noción del mundo concebida por sus experiencias.
Alterfaz
El concepto de alterfaz se refiere a una trama de sentidos subyacentes en el comercial que, más allá del spot mismo, se confirma en el flujo de las emisiones televisivas en que se machacan una y otra vez los signos que alimentan el consumo simbólico de la gente. La alterfaz pone en juego claves de acceso a los sentidos que legitiman el sistema y reproducen los valores sin los cuales aquél no podría sostenerse: hedonismo, desenfreno consumista, estereotipos, mística del éxito individual, codificación social de los objetos, etcétera.
Cuando una presentadora aparece en pantalla para vender un shampoo, el reclamo publicitario presta su rostro a una segunda intención, que es el texto visual en su conjunto: esa otra faz no sólo habla de una chica que vende el shampoo de cierta marca, sino de una chica cuya belleza, indumentaria, cabellos, piel, cuerpo, clase, modales, así como el sitio y el ambiente placentero en que actúa, objetos que le rodean, cortinas, color y textura de las paredes y cuadros que cuelgan sobre ellas y hasta el breve trozo de paisaje que se adivina al fondo, es el proyecto social indispensable que perpetúa el consumo.
La categoría de alterfaz deja a un lado la tradición saussureana del signo como entidad de dos caras (significante/significado) y se apoya en la tradición más avanzada que estudia al signo como función semiótica, especialmente en la acepción peirciana de "trasladador de pensamiento" y en la de "sentidos múltiples" de Ricoeur (2003). De otra manera, no sería posible desarticular los mecanismos de significación de la imagen. Una imagen puede ser un signo, pero a diferencia del signo lingüístico, puede estar a la vez articulada por un conjunto de objetos con valor de signo y, por tanto, con capacidad expresiva o significación propia.
Publicado por
Metxtli
@
1:39 PM
0
comentarios
Etiquetas: Articles
March 27, 2007
La física, las matematicas y las enfermedades
La física, las matematicas y las enfermedades
Este año se celebra el año de la Física y para muchos de nosotros estudiar física y matemáticas significó un verdadero problema, porque no sabíamos para qué se iba a aplicar en el futuro.
Estoy seguro de que tú, que eres de una gene-ración nueva y por supuesto más inteligente que nosotros, podrás entender que las matemáticas son muy importantes para la medicina; basta señalarte que una ecuación que se llama de NERNST define la vida y señala cómo la célula conserva una diferencia de electricidad dentro y fuera cuando está viva y cuando esta diferencia es de 0 es que ya está muerta. Como ves, las matemáticas sí son útiles y debes aprenderlas.
Vida = E transmembrana = log K ke/ ki
En la Física también hay ejemplos, como es el caso de la Resonancia Magnética Nuclear en la cual los núcleos de los átomos están girando en un campo magnético, que es como los imanes que tú conoces y producen una onda de radio cuando inviertes su polaridad. Esta onda de radio FM como los radios comunes, analizado en una computadora, hace puntos y con millones de puntos hace imágenes para diagnóstico de enfermedades como la que aquí aparece.
Como ves, estudiar matemáticas y física sí es un buen negocio para el futuro.
Publicado por
Metxtli
@
7:03 PM
0
comentarios
Etiquetas: Articles
March 23, 2007
IEPro
Acá les dejo este enlace para los amantes del Internet Explorer, en lo particular uso más el Firefox.
Bueno este es una Add-on para el IE7 para que lo puedas configurar, etc, etc, etc, todo lo que ya hace Firefox en pocas
palabras.
Espero sea del agrado de alguien.
URL: http://www.ie7pro.com/
Publicado por
Metxtli
@
2:40 PM
0
comentarios
March 22, 2007
Clipmarks
Saludos!
|
Publicado por
Metxtli
@
12:07 PM
0
comentarios
March 15, 2007
La universidad
Ahora que algunos volverán a la universidad, otros comenzaran y otros ya han salido…les dejo esto.
PEQUEÑAS COSAS UNIVERSITARIAS
- No importa cuan tarde sea tú primera clase, igual te la vas a dormir .
- Vas a cambiar completamente y no te darás cuenta
- Puedes amar a varias personas de manera diferente .
- Los alumnos de la universidad también tiran avioncitos de papel durante la clase.
- Si vas a clases con zapatos, te preguntarán por qué andas tan elegante.
- Cada reloj del edificio muestra una hora diferente.
- Si eras inteligente en el colegio, en la universidad no cuenta.
- No importa todo lo que prometiste al salir del colegio, irás a las fiestas de la Universidad, aunque sean la noche anterior al examen final
- Te puedes saber toda la materia y te irá mal en el examen.
- Puedes no saber nada de la materia y sacarte un 7 en el examen.
- Tu casa es un lugar perfecto para ir de visita.
- La mayor parte de la educación es adquirida fuera de las salas de clase
- Si nunca tomaste, vas a tomar (y ser un pedote).
- Si nunca fumaste, vas a fumar.
- Si no haces nada de esto durante la universidad, nunca más en la vida lo harás, a menos que entres de nuevo a la universidad.
- Te vas a transformar en una de esas personas que tus padres te aconsejaron alejarte de ellas.
- Psicología es en verdad biología
- Biología es en verdad química
- Química es en verdad física
- Física es en verdad matemática; O sea, aunque estudies años, igual no vas a saber nada de nada.
- Sentir depresión, soledad o tristeza no son exquisiteces de quien no tiene nada que hacer.
- Siempre prometerás que el próximo semestre estudiarás más y festejarás menos pero siempre ocurrirá lo contrario.
- Las únicas cosas que valen la pena en la universidad son los amigos que conocerás allá
- No verás la hora de terminar la Universidad.
- Cuando termine te vas a dar cuenta de que fue la mejor época de tu vida.
CUANDO TERMINA LA UNIVERSIDAD, LAS SEÑALES DE QUE YA NO ESTÁS EN ELLA SUCEDEN CUANDO:
- Hay más comida que cerveza en tu refrigerador.
- Las seis de la mañana es la hora en que despiertas y no en la que te vas a acostar.
- Tu música preferida la escuchas cuando vas en el ascensor.
- Andas con paraguas y te preocupas de la predicción del tiempo.
- Tus amigos se casan y divorcian en vez de andar y terminar.
- Tus vacaciones disminuyen de 130 a 15 días por año.
- Los jeans y camisetas ya no son consideradas vestimenta.
- Eres tu quien llamas ala plicia para que tus vecinos bajen la musica, pero obvio no lo hacen.
- Dormir en el sillón ahora te da un dolor de espalda.
- Ya no duermes siesta entre durante la semana.
- Vas a la farmacia a comprar analgésicos y no condones o test de embarazo.
- Te tomas el desayuno a la hora del desayuno.
- Más del 90% del tiempo que pasas frente al computador, de verdad estás trabajando.
- Y lo más importante… Ya no tienes tiempo ni siquiera de leer este estupido mensaje y aprovechar de pasarlo a tus amigos para que ellos se acuerden que también están viejos y los buenos tiempos de la universidad ya se fueron o se están yendo.
Publicado por
Metxtli
@
1:47 PM
0
comentarios
Etiquetas: Ocio
March 14, 2007
Redondeo
En un foro me encontré un post referente al dichoso Redondeo que hacen a nivel
nacional y que recaudan las tiendas comerciales, ¿alguien sabe si esto es cierto?
Ayer en un centro comercial, Soriana para
ser exactos, mi padre redondeó su cuenta, algo un tanto insignificante
y una práctica muy común en todos y cada uno de los centros comerciales
del país, en el ticket de compra aparecía "redondeo 85 centavos";
mas lo que despertó mi instinto, "mi instinto legal" fué que, en
la pantalla de la cajera aparecía el siguiente concepto: "Donación
Cáritas A.C.".
Al ver lo anterior escrito, le pregunté a la cajera
que si ellos (es decir "Soriana") lo manejaban como una
donación, a lo cual me respondió que sí, pues bueno ahora litigando
fiscal entiendo que todas y cada una de la donaciones son
deducibles de impuestos para cada contribuyente siempre y cuando se
expida el dicho comprobante fiscal.
Basado en lo anterior, le pedí a la cajera que me
diera mi comprobante de donación, claramente la respuesta fue
una negativa ya que ellos solo lo manejan como redondeo.
Pedí hablar con el gerente ya que evidentemente bajo
mi razonamiento había una evasión fiscal escondida tras
un redondeo, llego el gerente y le dije que si podía expedirme un
recibo de donación a cargo de Cáritas a.c. por todas mis compras
realizadas en dicha tienda ya que, ese era el concepto y quería
deducirlas (evidentemente le dije que traía conmigo mis tickets
de compra, falso pero buenoooo, esa era la onda ) el gerente me
negó mi comprobante (que ojo! es mi derecho), y trató de
explicarme que bueno, ellos solamente son captadores del efectivo, es
decir juntan la suma de capital del redondeo y lo entregan a
Cáritas A.C.
Terminé pidiéndole que me regresara mis 80 centavitos
porque no iba a participar en una defraudación fiscal y
accedió.
¿¿¿Porqué defraudación fiscal???
Pues es simple, ellos ( oséase, todas las tiendas de
súper mercado) recaudan una cantidad específica de dinero a
lo largo del mes, calculemos que de cada compra recaudan 50
centavos, es claro que en un mes recaudan una muy alta cantidad de pesos.
Esa cantidad es recolectada en este caso por Soriana S.A. de C.V. y
entregada a Cáritas A.C . ojo, el dinero que es de un montón de
ciudadanos y cooperación de los mismos no es entregado (suponiendo
que en efecto los centros comerciales donen ese dinero colectado) en
nombre de todos y cada uno de los contribuyentes REALES, sino en nombre de
"Soriana" por lo que el recibo de donación es a nombre de
"Soriana"... más claro?? Lo que tú donaste se lo adjudica otra persona,
y ella lo deduce es decir hace uso de TU dinero para ahorrarse
impuestos, es decir defrauda a el fisco y paga con tu dinero
impuestos que el debería de pagar con el suyo.
Así que la próxima vez que te pidan el redondeo
piénsalo.
No digo que no dones, sino que hazlo directamente ante
las instituciones y no ante una empresa "intermediaria" Si
calculamos que en un día de quincena, por una caja pasan 30
clientes por hora, y si lo multiplicamos por 25 cajas, por 15 horas en
que está abierta la Soriana, con un supuesto de 50 centavos de redondeo
por cada compra, nos da un total de 5,625 pesos por tienda. Existen 220
tiendas de Soriana en la república, se metieron $1,237,500 pesos.
Si gana y ese es un milloncito diario, calcula
mensualmente que es la forma en que se deduce y nada más chécate la
gran cantidad de $$$ impuestos que NO no pagan...
Publicado por
Metxtli
@
1:41 PM
0
comentarios
Etiquetas: Articles
March 13, 2007
A tiempo a su funeral
Ahhh que de cosas pasan en este mundo loco!!!
Un mundo raro: Llega hombre a tiempo para su funeral
Conoce los hechos raros insólitos que ocurren en el planeta
|
EFE
El Universal
Nueva Delhi, India
Miércoles 07 de marzo de 2007
El error se produjo tras la identificación equivocada del cadáver de un hombre ahogado en el mayor lago de Raipur, capital de ese estado del centro oriente de la India, que el cuñado de Deepak, Kalyan, tomó por el de su pariente, según la agencia india UNI.
La familia recibió la noticia del supuesto deceso y el cuerpo fue enviado a la casa, donde comenzó una procesión funeraria sin que los compañeros de trabajo de Deepak, enterados de la situación, pudieran avisarle porque se había marchado a pagar la factura del teléfono.
Una vez enterado de la confusión, Deepak Bhatacharya corrió hacia su domicilio y entró en el preciso momento en que el cuerpo del finado estaba a punto de ser comido por las llamas.
"Admito que cometí un error, pero el cadáver que identifiqué se parecía a mi cuñado", dijo Kalyan.
Publicado por
Metxtli
@
1:14 PM
0
comentarios
March 7, 2007
Los lugares ocultos de la tierra
Para que conózcan esos lugars ocultos:
http://www.elbukanero.com/clip/523/los_lugares_ocultos_tierra.htm
Saludos!
Publicado por
Metxtli
@
8:10 PM
0
comentarios
Etiquetas: Internet
February 26, 2007
Process Explorer for Windows v10.21
Como siempre pasa, buscando otra cosa que no tiene nada que ver con este post.. me encontre este programa
Process Explorer for Windows v10.21 ,
URL: http://www.microsoft.com/technet/sysinternals/ProcessesAndThreads/ProcessExplorer.mspx
Está muy bueno, te muestra muchas cosas acerca de los procesos que están corriendo en tu equipo, te da detallede los DLLs que utilizan dichos proceso y otras cosillas, es como un Task Manager ++.
Denle un vistazo y mandan sus mentarios.
Ah, se me olvidaba comentar es una herramienta de MS. Creo que vale la pena revisarlo
Saludos!
Les dejo las imágenes que están en la pagina
Publicado por
Metxtli
@
2:04 PM
0
comentarios
Etiquetas: Tools
January 29, 2007
New HTTP Endpoints Create SQL Server 2005 Web Services
Aquí vengo de nuevo ahora con un artículo interesante. Habla de los EndPoints en SQL Server 2005
¿que es esto?, bueno pues es el manejo que se puede dar a los Web Services directamente desde SQL Server 2005
vale la pena implementar algo así.
Saludos y hasta la próxima!
Fuente: http://www.developer.com/db/article.php/10920_3390241_1
New HTTP Endpoints Create SQL Server 2005 Web Services
By Peter DeBetta
by Peter DeBetta of Wintellect
SQL Server 2000 offers some capabilities for returning XML output via HTTP using SQLXML—and, of course, SQLXML supports Web services creation. Although not rocket science, setting up, configuring, and using Web services in SQL Server 2000 does require a little effort (see the SQLXML documentation about Web services in SQL Server 2000).
When .NET came about, people began writing Web services in C# or VB.NET. They simply connected into SQL Server (or any data store, for that matter) to retrieve the data. .NET made creating Web services as simple as 1-2-3:
- Create some stored procedures.
- Write some WebMethods to return the data from said stored procedures.
- Presto! You have a Web service.
But now, the next generation of Web services is hitting the streets. SQL Server 2005 supports native HTTP SOAP via a feature known as HTTP Endpoints. For those who don't know, Simple Object Access Protocol (affectionately known as SOAP) is a lightweight messaging protocol that Webopedia defines as follows:
"Short for Simple Object Access Protocol, a lightweight XML-based messaging protocol used to encode the information in Web service request and response messages before sending them over a network. SOAP messages are independent of any operating system or protocol and may be transported using a variety of Internet protocols, including SMTP, MIME, and HTTP ."
This new HTTP Endpoints feature in SQL Server 2005 is the subject of this article.
HTTP Endpoints
So what is an HTTP Endpoint? You may have heard that it is SQL Server 2005's means for creating Web services, but it actually is much more. An HTTP Endpoint also is a means of creating interfaces via HTTP or TCP for SOAP, T?SQL, Service Broker, and even database mirroring. Although these other functions are very intriguing, this discussion concerns only the ability to create Web services in SQL Server—Web services that can return rowset data, scalar values, messages, and even errors, all of which are serialized into XML automatically. And, an HTTP Endpoint does all of this without requiring you to install IIS (it uses the Windows 2003 kernel module http.sys).
Because I like to learn from examples, I am going to teach by example. I demonstrate how to use HTTP Endpoints by walking through an example from start to finish. Before starting, here are a few notes to consider:
- This demonstration uses the new demo database called AdventureWorks.
- Native HTTP SOAP in SQL Server 2005 is not supported on Windows XP. If you want to try the examples, you need Windows Server 2003.
- SQL Server 2005 Express Edition (the new MSDE) does not support HTTP Endpoints, so be sure to install the Developer Edition.
- I do not explain how to use SQL Server Management Studio to execute SQL scripts. I trust you know how to do this.
Security
Because HTTP Endpoints are a server-level feature, security of endpoints is also on the server level. Of course, the serveradmin system role can create, alter, and drop endpoints from the SQL Server instance, but how do you allow developers to manage these endpoints without giving them the excessive permissions of this system role?
The answer lies in SQL Server 2005's new ability to assign server-level permissions to logins, as shown here:
GRANT ALTER ANY HTTP ENDPOINT TO peter
With this command, you can allow the peter login to manage HTTP Endpoints without giving other unnecessary permissions. The following is a list of permissions that you can modify via GRANT, DENY, or REVOKE:
{GRANT|DENY|REVOKE} ALTER ANY ENDPOINT TO Login
Controls the ability to alter any HTTP Endpoint; also allows permission to transfer ownership and connect to any endpoint{GRANT|DENY|REVOKE} ALTER ON ENDPOINT:: EndPointName TO Login
Controls whether a login can alter a specific HTTP Endpoint; also allows permission to transfer ownership and connect to the specified endpoint{GRANT|DENY|REVOKE} CONTROL ON ENDPOINT:: EndPointName TO Login
Controls whether a login can alter or drop a specific HTTP Endpoint; also allows permission to transfer ownership and connect to the specified endpoint{GRANT|DENY|REVOKE} CONNECT ON ENDPOINT:: EndPointName TO Login
Controls whether or not a login can connect to (execute requests against) an HTTP Endpoint-
{GRANT|DENY|REVOKE} TAKE OWNERSHIP ON ENDPOINT:: EndPointName
Controls whether a login can take ownership of the HTTP Endpoint
TO Login -
{GRANT|DENY|REVOKE} VIEW DEFINITION ON ENDPOINT:: EndPointName
Controls the ability for a login to see the metadata (definition) of the HTTP Endpoint
TO Login
Consider one last example. If I want to deny the peter login the ability to use an HTTP Endpoint named SQLEP_Financial, I would execute the following statement:
DENY CONNECT ON ENDPOINT::SQLEP_Financial TO peter
Providing a Source for Data
The first order of business is to create the code components that will be the source of information for the endpoint. I create two stored procedures and one user-defined function (UDF), as shown in Listing 1:
Listing 1
USE AdventureWorks
GO
CREATE PROCEDURE prProductList
AS
SELECT Product.ProductID, Product.ProductNumber, Product.Name
FROM Production.Product AS Product
INNER JOIN Production.ProductInventory AS Inventory
ON Product.ProductID = Inventory.ProductID
INNER JOIN Production.Location AS Location
ON Inventory.LocationID = Location.LocationID
WHERE Product.ListPrice > 0
AND Location.LocationID = 6 --Products from Misc Storage only
ORDER BY Product.Name
GO
CREATE PROCEDURE prProductStockInfo
@ProductID int
AS
IF (SELECT ListPrice FROM Production.Product
WHERE ProductID = @ProductID) = 0
BEGIN
RAISERROR ('Product not available for retail sale', 11, 1)
END
ELSE
BEGIN
SELECT Product.ProductID , Product.ProductNumber,
Product.Name, Product.Weight,
Product.WeightUnitMeasureCode,
Product.ListPrice, Inventory.Quantity
FROM Production.Product AS Product
INNER JOIN Production.ProductInventory AS Inventory
ON Product.ProductID = Inventory.ProductID
INNER JOIN Production.Location AS Location
ON Inventory.LocationID = Location.LocationID
WHERE Product.ProductID = @ProductID
AND Location.LocationID = 6 --Misc Storage
END
GO
CREATE FUNCTION dbo.fnProductPhoto (@ProductID int)
RETURNS varbinary(MAX)
AS
BEGIN
DECLARE @largePhoto varbinary(max)
SELECT @largePhoto = ProdPhoto.LargePhoto
FROM Production.ProductPhoto AS ProdPhoto
INNER JOIN Production.ProductProductPhoto ProdProdPhoto
ON ProdPhoto.ProductPhotoID = ProdProdPhoto.ProductPhotoID
WHERE ProdProdPhoto.ProductID = @ProductID
RETURN (@largePhoto)
END
The first procedure returns a list of products (product ID, name, and number) from the AdventureWorks database. The second procedure returns more details about a product, including inventory levels. The UDF returns a single varbinary value containing the product photo.
Creating the Endpoint
Once you have your procedures and functions set up, you can create the endpoint (Web service). The following code creates the endpoint on my server:
CREATE ENDPOINT SQLEP_AWProducts
STATE = STARTED
AS HTTP
(
PATH = '/AWproducts',
AUTHENTICATION = (INTEGRATED),
PORTS = (CLEAR),
SITE = 'win2k301'
)
FOR SOAP
(
WEBMETHOD 'ProductList'
(NAME='AdventureWorks.dbo.prProductList'),
WEBMETHOD 'ProductStockInfo'
(NAME=' AdventureWorks.dbo.prProductStockInfo'),
WEBMETHOD 'ProductPhoto'
(NAME='AdventureWorks.dbo.fnProductPhoto'),
BATCHES = DISABLED,
WSDL = DEFAULT,
DATABASE = 'AdventureWorks',
NAMESPACE = 'http://Adventure-Works/Products'
)
Believe it or not, you are now ready to consume this Web service. Before doing that, though, examine the CREATE ENDPOINT statement. Starting from the top, the first thing you will notice is the name of the endpoint, SQLEP_AWProducts, which is how you refer to the Web service within your client code (see Figure 1). PATH is the virtual path on the server for the Web service. So, for this example, you would access the Web service at http://win2k301/AWproducts, but it would be called SQLEP_AWProducts in your .NET application code. Table 1 provides explanations for this and other arguments used in the AS HTTP clause.
Click here for a larger image.
Figure 1: Object Browsing the Web Service in Visual Studio.NET 2005
Table 1: Arguments Used in the AS HTTP Clause
Argument | Description |
PATH | The virtual URL path on the server where the Web service will reside |
AUTHENTICATION | The method of authentication; can be BASIC, DIGEST, or INTEGRATED You should try to use INTEGRATED when possible, since it is the most secure. It will try to use Kerberos-based authentication if possible (otherwise, NTLM). DIGEST is not as secure as INTEGRATED. You should use it only if INTEGRATED authentication is not possible. BASIC authentication is the least secure. You should use it only if you can't implement either INTEGRATED or DIGEST authentication methods. BASIC requires SSL (see PORTS below). |
PORTS | CLEAR (HTTP - port 80 by default) SSL (HTTPS - port 443 by default) |
SITE | The name of the server on which the Web service is running |
The STATE argument can have one of three values:
- STARTED—listening and responding
- DISABLED—neither listening nor responding
- STOPPED—listening, but returns errors to client requests
You can change the state of an existing Web service using the ALTER ENDPOINT statement. For example, to disable the endpoint, you can execute:
ALTER ENDPOINT SQLEP_AWProducts STATE = DISABLED
The FOR SOAP clause determines which methods the Web service will expose, which other features are exposed (dynamic SQL, for example), and other characteristics of the Web service. In this example, three methods are exposed: the two stored procedures and the UDF shown in Listing 1. WEBMETHOD requires the name of the exposed method as its first argument. As you can see in the code, it does not have to match the name of the actual stored procedure or UDF that it is exposing. The next argument of WEBMETHOD is the fully qualified NAME of the object you are exposing.
The BATCHES argument specifies whether or not the Web service supports ad hoc queries. WSDL indicates how the WSDL document generation will occur; DEFAULT indicates that the WSDL document will be created automatically. SQL Server 2005 allows you to implement custom WSDL generators using the CLR-based abilities of SQL Server 2005 (see Books Online for more details). DATABASE is the name of the database that will be accessed from the endpoint (endpoints are defined at the server level). And finally, NAMESPACE is, well, the namespace for the endpoint.
You have now officially created a Web service using SQL Server 2005. Congratulations.
The Client to Consume Your Web Service
Consuming a Web service created in SQL Server 2005 as an HTTP Endpoint is similar to consuming a Web service created in C#. That's the beauty of Web services and SOAP. Begin a new Windows application in Visual Studio.NET and add the following controls to the form (ControlType: name):
- Button: btnExecSP
- DataGridView: dgvProduct
- ListBox: lstProducts
- PictureBox: picProduct
You will need to add the Web reference before writing any code. Again, you can browse to http://server/awproducts?wsdl to create the Web reference. Keep in mind that your Web reference object will be named server_AWProducts (my machine is named win2k301 so I browse to http://win2k301/awproducts?wsdl, and my Web reference object is win2k301_AWProducts). You will have to tweak the code to the Web reference name that you create.
Once the Web reference is in place, you can double-click the Button control and add the code in Listing 2.
Listing 2
private void BtnExecSP_Click(System.Object sender, System.EventArgs e)
{
win2k301_AWProducts.SQLEP_AWProducts proxy =
new win2k301_AWProducts.SQLEP_AWProducts();
proxy.Credentials = System.Net.CredentialCache.DefaultCredentials ;
object[] products = proxy.ProductList();
System.Data.DataSet resultDS;
if (products[0].ToString() == "System.Data.DataSet")
{
resultDS = (System.Data.DataSet )products[0];
DataTable dt = resultDS.Tables[0];
lstProducts.DataSource = dt;
lstProducts.DisplayMember = "Name";
lstProducts.ValueMember = "ProductID";
}
}
The first thing you will notice is that the Web method returns an object array. Because SQL Server can actually send back not only result sets, but also messages, errors, and other types (see Table 2 for more details), you should validate that you received what you expected. Listing 2 does a check by using the ToString method on the first element in the returned object array and comparing it to "System.Data.DataSet". If true, you know you can safely cast the object to a DataSet type and work with it from there.
Table 2: Object Return Types
Item from SQL Server | Corresponding .NET Object |
Results of SELECT statement | System.Data.DataSet |
Results of a SELECT statement with FOR XML | System.Xml.XmlElement |
Raised error | SqlMessage (from WSDL) |
Message | SqlMessage (from WSDL) |
Output parameter | SqlParameter (from WSDL) |
Rows affected | SqlRowCount (from WSDL) |
RETURN statement value | System.Int32 |
Now double-click the ListBox control and add the following code:
private void lstProducts_SelectedIndexChanged(object sender,
System.EventArgs e)
{
Int32 i = 0;
try
{i = System.Convert.ToInt32(lstProducts.SelectedValue.ToString ());}
catch
{return;} //prevents issue when loading listbox
object e1;
win2k301_AWProducts.SqlMessage errorMessage;
System.Data.DataSet resultDS;
win2k301_AWProducts.SQLEP_AWProducts proxy =
new win2k301_AWProducts.SQLEP_AWProducts();
proxy.Credentials = System.Net.CredentialCache.DefaultCredentials;
object[] products = proxy.ProductStockInfo(i);
e1 = products[0];
switch ( e1.ToString())
{
case "System.Data.DataSet":
resultDS = (System.Data.DataSet)products[0];
DataTable dt = resultDS.Tables[0];
dgvProduct.DataSource = dt;
dgvProduct.Refresh();
break;
case "Yukon_Http_v1.win2k301_AWProducts.SqlMessage":
errorMessage = (win2k301_AWProducts.SqlMessage)products[0];
MessageBox.Show("Error fetching product", "'"
+ errorMessage.Message + " occurred at '"
+ errorMessage.Source + "'");
return;
}
Byte[] photo = proxy.ProductPhoto(i);
picProduct.Image = new Bitmap(new MemoryStream(photo));
}
You should pay attention to a couple of details here. First, this code snippet checks for another type of returned object: SqlMessage. Notice the type name (from the ToString method) is Yukon_Http_v1.server_virtualDirectory.SqlMessage. This type is defined in the WSDL document and is unique to each Web service. The following listing shows a snippet from the WSDL of the SqlMessage complexType:
<xsd:complexType name="SqlMessage">
<xsd:sequence minOccurs="1" maxOccurs="1">
<xsd:element name="Class" type="sqlmessage:nonNegativeInteger" />
<xsd:element name="LineNumber"
type="sqlmessage:nonNegativeInteger" />
<xsd:element name="Message" type="xsd:string" />
<xsd:element name="Number" type="sqlmessage:nonNegativeInteger" />
<xsd:element name="Procedure" type="xsd:string" minOccurs="0" />
<xsd:element name="Server" type="xsd:string" minOccurs="0" />
<xsd:element name="Source" type="xsd:string" />
<xsd:element name="State" type="sqlmessage:nonNegativeInteger" />
</xsd:sequence>
</xsd:complexType>
The last tidbit for this discussion is the Byte array that is returned from the UDF. Because this UDF returned varbinary data, its XSD type is xsd:base64Binary. Thus, it is a Byte array in .NET. SQL Server's int data type is the XSD type xsd:int and Int32 in .NET. Books Online has more information about the mapping of types.
Easy Web Service Creation
HTTP Endpoints provide a way to create various interfaces into SQL Server, including features such as Service Broker, database mirroring, and of course, Web services. It makes the creation of a Web service (that exposes SQL Server data) a snap for experienced programmers and database administrators alike. Enjoy!
About the Author
Peter DeBetta is an independent software consultant who trains exclusively for Wintellect. Peter regularly publishes on the topic of SQL Server and recently wrote Introducing SQL Server 2005 for Developers for Microsoft Press. He also speaks at conferences such as VSLive!, WinSummit, WinDev, and Devscovery.
Publicado por
Metxtli
@
2:13 PM
0
comentarios
Etiquetas: .Net, Articles, Development
September 23, 2006
La venganza de los usuario
Bueno esta vez les comparto una divertida situación que deberíamos hacer realidad, para que sepan
las empresas y mercadologos lo latoso que suelen ser las llamadas a atención a clientes...
Espero se rían un rato....
"La venganza" de los usuarios contra las empresas...
RIIIIING!!...RIIIIING!!...
- ¿Hola?
- Buenos días, ¿Usted es el titular de la línea?
- Sí, soy yo mismo.
- ¿Me puede decir su nombre por favor?
- José Luis
- Señor José Luis, le llamo de Telmex para ofrecerle una promoción consistente en la instalación de una línea adicional en su casa, en donde usted tendrá derecho a...
- Disculpe la interrupción Señorita, pero, exactamente ¿quien es usted?
- Mi nombre es Silvina Maciel, de Telmex y estamos llamando...
- Silvina, discúlpeme, pero para nuestra seguridad me gustaría comprobar algunos datos antes de continuar la conversación, ¿le importa?
- No tengo problemas señor
- ¿Desde que teléfono me llama? En la pantallita del mío solo pone "NUMERO PRIVADO"
- El interno mío es el 1004
- ¿Para qué departamento de Telmex trabaja?
- Telemarketing Activo
- ¿Me podría dar el número de trabajadora de Telmex?
- Señor, disculpe, pero creo que toda esa información no es necesaria...
- Entonces lamentablemente tendré que colgar, porque no tengo la seguridad de hablar con una trabajadora de Telmex
- Pero yo le puedo garantizar...
- Vea Silvina, cada vez que yo llamo a Telmex, antes de poder comenzar cualquier trámite, estoy obligado a dar mis datos a toda una legión de empleados...!
- Está bien Señor, mi numero es el 34591212
- Un momento mientras lo verifico, no se retire Silvina...(dos minutos)
- Un momento por favor, toda la gente en casa se encuentra ocupada....(cinco minutos)
- ¿Señor?
- Un momento por favor, toda la gente en casa se encuentra ocupada....
- Pero... Hola Señor...!
- Sí Silvina, gracias por la espera, nuestros sistemas están un poco lentos hoy... ¿Cual era el asunto de su llamada?
- Lo llamo de Telmex, estamos llamando para ofrecerle nuestra promoción "Línea Adicional", en la que usted tiene derecho al uso de otra línea a muy bajo costo. ¿Usted estaría interesado José Luis?
- Silvina, le voy a comunicar con mi mujer, que es la encargada de la sección de adquisición de productos técnicos de la casa; por favor, no se retire. (Coloco el auricular del teléfono delante de una grabadora y pongo el CD de Lambada Mix 1998 con el Repeat activado. Sabía que algún día, esa porquería de música me sería útil. Después de sonar el CD entero, mi mujer atiende el teléfono):
- Disculpe por la espera, me puede decir su teléfono pues en la pantallita del mío solo aparece "NUMERO PRIVADO".
- 1004
- Gracias, ¿Con quien estoy hablando?
- Con Silvina
- ¿Silvina que?
- Silvina Maciel (ya demostrando cierta irritación en la voz)
- ¿Cual es su número de trabajadora de Telmex?
- 34591212 (mas irritada todavía)
- Gracias por la información Silvina, ¿en que puedo ayudarla?
- La llamo de Telmex, estamos llamando para ofrecerle nuestra promoción "Línea Adicional", en la que usted tiene derecho a otra línea. ¿Estaría interesada?
- Voy a ingresar su solicitud en nuestro programa de Nuevas Adquisiciones y dentro de algunos días nos contactamos con usted. ¿Puede tomar nota del numero de ingreso al programa por favor?... ¿hola?, ¿hola?
TUT...TUT...TUT....TUT...TUT...
Publicado por
Metxtli
@
11:13 AM
2
comentarios
September 5, 2006
Create Dedicated Service Handlers
Aqui va un buen artículo que leí en FTPOnLine http://www.ftponline.com/vsm/2006_08/magazine/columns/aspnet/default.aspx
espero les sirva!!
Create Dedicated Service Handlers
Creating your own HTTP handler in ASP.NET 1.1 or 2.0 gives you a flexible and fast way to move data to clients, browsers, and other Web pages.
by Peter Vogel
August 15, 2006
Technology Toolbox: Visual Basic, ASP.NET, XML
Web Services provide a consistent, standards-based way to provide Web-based access to server resources.
ADVERTISEMENT |
That said, you might be better off creating an ASP.NET HTTP handler when performance is paramount and access is restricted to internal clients. And an ASP.NET handler outperforms every other option in ASP.NET when it comes to delivering data to the client over the Web.
In addition to providing high-efficiency access to server-side resources, an ASP.NET handler provides you with more flexibility in integrating those resources into Web, client-server, and desktop applications. You can call a handler from a page's HTML, server-side code, or client-side code. You can even call a handler from a Windows Forms client. The best part: They are easy to write.
An ASP.NET handler outperforms all of your alternatives in each of the scenarios described (see Table 1).
A handler gains efficiency through what it lacks. Think of an ASP.NET handler as an ASPX file, one that fires no events and has no HTML to render. These missing elements reduce a handler's overhead and give it a performance advantage over an ASP.NET Web Form.
The first step in creating your handler is to add a new file with the extension ASHX to your ASP.NET Web site (see Figure 1). This file must contain a WebHandler processing directive and, if you are going to put your code in the ASHX file itself, include the Language and Class attributes. This example defines a handler that you write in Visual Basic, defining a class named EmployeeInfo:
<%@ WebHandler Language="VB"
Class="EmployeeInfo" %>
ASP.NET creates no code file for an ASHX file by default. Many programmers prefer to place their code in a separate file, especially in Visual Studio 2003 where code in an ASHX file doesn't have IntelliSense, code highlighting, or debugging support. To use a code file with your ASHX file, you must add a CodeBehind attribute to the ASHX file's WebHandler directive and set the attribute to the name of your code file. You then add a Class file with that name to your Web site (Visual Studio 2005 will place the file in your project's App_Code folder). You no longer place the code in the ASHX file, so you can remove the Language attribute from the WebHandler directive:
<%@ WebHandler Class="EmployeeInfo"
CodeBehind="EmployeeInfo.vb" %>
The code for your handler must implement the IHttpHandler interface. Implementing this interface requires you to add code for one method (ProcessRequest) and one property (IsReusable).
Improve Scalability
You can improve your application's scalability by having the IsReusable property return True. This causes ASP.NET to cache your handler after the first user requests it. If your handler will tie up some limited resource or be used infrequently, you should return False from this property.
You must also specify the content type your handler returns by using the ContentType property of the Context object that ASP.NET passes to the ProcessRequest method. You can test your handler just by making your ASHX file your start page and pressing the F5 key if you set the ContentType property to "text/HTML." Your handler's starting point should like this after you make these changes:
Imports System
Imports System.Web
Public Class EmployeeInfo
Implements IHttpHandler
Public Sub ProcessRequest(ByVal context _
As HttpContext) Implements _
IHttpHandler.ProcessRequest
Context.Response.ContentType = "text/HTML"
End Sub
Public ReadOnly Property IsReusable() As Boolean _
Implements IHttpHandler.IsReusable
Get
Return True
End Get
End Property
End Class
Create Dedicated Service Handlers (Continued)
So far, you've created the skeleton for your handler, and put your business logic in the ProcessRequest method of your handler (ASP.NET calls this method automatically whenever a client requests your handler). You also have access to a number of existing ASP.NET objects through the Context object passed to the ProcessRequest method, including the Request, Response, and User objects.
The simplest possible ProcessRequest returns a string by using the Response object's Write method:
Public Sub ProcessRequest(ByVal context _
As HttpContext) Implements _
IHttpHandler.ProcessRequest
context.Response.ContentType = _
"text/HTML"
context.Response.Write ("Hello World")
End Sub
You can also use the Request object to access any of the information sent up to the server by the client as part of the request. This code in the ProcessRequest routine pulls the value of a parameter called "name" from the querystring and incorporates it into the string you write back to the browser:
context.Response.Write("Hello, " & _
context.Request.QueryString("name"))
You can request the handler by entering its URL into the address box of any browser. A typical request for this handler might look like this:
http://MyServer/MyHandlerSite/
EmployeeInfo.ashx?name=Peter
You can request the handler using only an URL, which enables you to embed the URL into any Web page. Using an URL for your handler, along with any querystring parameters, makes it an attribute of a tag that normally holds a URL. This causes a browser to incorporate the text returned by the handler into the page. This code puts the URL in the src attribute of an iframe tag:
<form id="form1" runat="server">
<div>
<iframe src= _
"EmployeeInfo.ashx?name=Peter" />
</div>
</form>
Taking advantage of the Response object's methods for transferring the contents of files and streams to the client enables you to build a handler that lets a client request a file from the server. For example, you can use the WriteFile method to transfer a file's contents directly to the output stream without buffering. This code uses the name in the QueryString to build the name of a graphic file to send to the client:
context.Response.WriteFile( _
context.Request.QueryString("name") & ".jpg")
You can call this handler from the src attribute of an image tag. This code adds the contents of an image file to a page:
<img src="Photo.ashx?EmployeeName=davolio"
alt="Some employee's picture" />
Integrate Your Handler
You can also integrate your handler into the surrounding application by accessing user data in the Session object from your handler's code. Unfortunately, by default, you get an "Object reference not set to an instance of an object" message if you attempt to use the Session property on the Context object. Implementing the IRequiresSessionState interface enables you to gain access to the Session object. This interface doesn't require you to implement any methods or properties—its presence signals to ASP.NET that it needs to instantiate the Session object:
Public Class EmployeeInfo
Implements IHttpHandler
Implements IRequiresSessionState
ADVERTISEMENT |
This more complex example reads data from the Northwind database to build an HTML table of employee information. Note that you don't pull information from the querystring. Instead, use a value in the Session object to determine which employee's information to display. The code builds an img tag to display the employee photo pointed to by the PhotoPath field (see Listing 1 and Figure 2).
These examples discussed so far play with text at a basic level. However, you can also use a handler to send binary data to the client, assuming that the client can deal with the data. In the Northwind database's Employee's table, the Photo column is a BLOB field containing the employee's photo. Fortunately, in a browser, the <img> tag expects to receive a string of binary data. All your handler must do is extract the binary data from the field and send it to the client.
Create Dedicated Service Handlers (Continued)
You need to read a binary field twice using the DataReader's GetBytes method in order to retrieve its contents. First, you call the GetBytes method with Nothing as its third parameter to determine the number of bytes in the field. You then use that value to dimension a buffer that to hold the binary data. With the buffer dimensioned, you call GetBytes again, passing the buffer as the third parameter to load the buffer with data from the field.
Begin by retrieving the record for the employee in the Session object:
Dim Photo() As Byte
Dim lngLength As Long
Dim sbOutPut As New StringBuilder
Dim con As New SqlConnection( _
ConfigurationManager.ConnectionStrings( _
"NwindConnection").ConnectionString)
Dim cmd As SqlCommand = con.createcommand
cmd.CommandText = _
"Select Photo " & _
" Where LastName ='" & _
context.Session("EmployeeName") & "';"
Next, extract the Photo field's data:
con.Open()
Dim rdr As SqlDataReader = cmd.ExecuteReader
If rdr.Read() Then
lngLength = rdr.GetBytes(0, 0, Nothing, 0, _
Integer.MaxValue) - 1
ReDim Photo(lngLength)
rdr.GetBytes (0, 0, Photo, 0, lngLength)
con.Close
The Response object's OutputStream provides a mechanism to stream data to the client. You use the Write method of the OutputStream to transfer data from the buffer to the client. Note that you must skip the first 78 bytes of the Photo field in order to get valid output for the <img> tag (for reasons unknown to me):
context.Response.OutputStream.Write( _
Photo, 78, lngLength - 78)
End If
Use this tag to call your handler and display the contents of the Photo field in a Web page:
<img src="EmployeePhoto.ashx"
alt="Empoyee photo" />
Beyond HTML
You're not limited to calling your handler from HTML tags. You can use the XMLHTTP object to call your handler if you need to process the result returned from your handler with client-side code. This IE-specific code uses the XMLHTTP object to call a handler and catch the result:
var xmlhttp = new ActiveXObject(
"Microsoft.XMLHTTP");
xmlhttp.open("GET",
"http://MyServer/ MyHandlerSite/
EmployeeInfo.ashx ?name=Davolio",
false);
xmlhttp.Send(null);
var result = xmlhttp.responseText;
This version of the code works in recent versions of FireFox, Mozilla, Safari, and Netscape:
var xmlhttp = new XMLHttpRequest();
xmlhttp.open("GET",
"http://MyServer/
MyHandlerSite/EmployeeInfo.ashx?name=
Davolio", false);
xmlhttp.send(null);
var result = xmlhttp.responseText;
You can also call a handler from server-side code in a WebForm by using the WebClient object. The DownloadString method of the WebClient object accepts the URL for the handler and returns the handler's result as a string:
Dim wc As New System.Net.WebClient
Me.TextBox1.Text = wc.DownloadString( _
"http://MyServer/MyHandlerSite/" & _
"EmployeeInfo.ashx ?name=Peter")
Note that you shouldn't call your handler from a page on the same site because doing so is less efficient. Instead, you should create an object with the necessary functionality and then add a handler to act as a façade for that object. This design enables you to access the object directly from the server-side code of WebForms on the same site.
The WebClient object is still useful. You can use the WebClient-based code from other sites or in a Windows Form client to retrieve data from your ASP.NET handler. The WebClient and XMLHTTP objects effectively provide any client with a highly efficient way of retrieving data from your Web application. Clients don't need to create a proxy with a handler, in contrast to using clients with a Web Service. Clients also give you more ways to integrate calls into their code.
Nothing is free, however. If you move away from Web Services, you also have to give up the standards provided by the Web Services specification. You won't be able to count on a Web Service's WSDL file to define your message formats, but instead create and process a set of custom formats. Handlers are efficient, but you should use them only to transfer data when you are also creating the clients that access the handlers.
You now have everything that you need to implement a synchronous ASP.NET handler. But you can also create asynchronous handlers that will provide better scalability than the synchronous handler discussed in this column previously. One warning: Asynchronous handlers are more complex to write than a synchronous handler. In order to take advantage of asynchronous processing, you will need to launch a new thread and create a new class that returns a custom IAsyncResult object.
About the Author
Peter Vogel (MBA, MCSD) is a principal at PH&V Information Services. Peter teaches for Learning Tree International and wrote its ASP.NET and Technical Writing courses. Peter wrote Visual Basic Object & Component Handbook (Prentice Hall) and is currently working on the second edition of Professional Custom Controls, Web Parts, and User Controls with ASP.NET 2.0 for Wrox.
Publicado por
Metxtli
@
1:07 PM
0
comentarios
Etiquetas: Articles