<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss'><id>tag:blogger.com,1999:blog-4730412993282588645</id><updated>2009-11-14T03:41:09.030-08:00</updated><title type='text'>Un Mecánico de Máquinas de Turing</title><subtitle type='html'>SAP, ABAP, PROGRAMACION, COMPUTACION</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://carlosagreda.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4730412993282588645/posts/default'/><link rel='alternate' type='text/html' href='http://carlosagreda.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Carlos Agreda</name><uri>http://www.blogger.com/profile/04557577110714581339</uri><email>noreply@blogger.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>16</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4730412993282588645.post-6824941864249766420</id><published>2008-08-15T10:40:00.000-07:00</published><updated>2008-08-15T10:48:25.595-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SAP'/><category scheme='http://www.blogger.com/atom/ns#' term='ABAP desde cero'/><category scheme='http://www.blogger.com/atom/ns#' term='ABAP'/><title type='text'>Selection-screen Básico</title><content type='html'>&lt;span style="color:#000066;"&gt;Un programita básico de ejemplo para mostrar un selection screen.&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#000066;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#000066;"&gt;REPORT ZPROG02.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;selection-screen begin of block bloque01.&lt;br /&gt;&lt;span style="color:#006600;"&gt;* Aqui van los elementos del selection-screen&lt;br /&gt;&lt;/span&gt;        parameters: nombre(35) type c,&lt;br /&gt;        direc(45) type c,&lt;br /&gt;        edad(3) type n,&lt;br /&gt;        fecha type d.&lt;br /&gt;selection-screen end of block bloque01.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#006600;"&gt;*En este evento podemos inicializar valores&lt;br /&gt;&lt;/span&gt;Initialization.&lt;br /&gt;       nombre = 'ingrese aqui su nombre'.&lt;br /&gt;       direc = 'aqui debe ir el apellido'.&lt;br /&gt;       edad = '99'.&lt;br /&gt;       fecha = Sy-datum. &lt;span style="color:#999999;"&gt;&lt;span style="color:#006600;"&gt;"Sy-datum recupera la hora del sistema&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#006600;"&gt;*fin del codigo del evento&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#006600;"&gt;*Este evento se ejecuta cuando el usuario da clic en el reloj o opresiona F8&lt;br /&gt;&lt;/span&gt;Start-of-selection.&lt;br /&gt;       write nombre.&lt;div class="blogger-post-footer"&gt;Podríamos cambiar el mundo...
pero Dios no nos daria el código fuente.&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4730412993282588645-6824941864249766420?l=carlosagreda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://carlosagreda.blogspot.com/feeds/6824941864249766420/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=4730412993282588645&amp;postID=6824941864249766420' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4730412993282588645/posts/default/6824941864249766420'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4730412993282588645/posts/default/6824941864249766420'/><link rel='alternate' type='text/html' href='http://carlosagreda.blogspot.com/2008/08/selection-screen-bsico.html' title='Selection-screen Básico'/><author><name>Carlos Agreda</name><uri>http://www.blogger.com/profile/04557577110714581339</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09672903207654664222'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4730412993282588645.post-5175964524168476059</id><published>2008-06-18T08:46:00.000-07:00</published><updated>2008-06-18T08:49:48.910-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Certificacion SAP-ABAP'/><category scheme='http://www.blogger.com/atom/ns#' term='SAP'/><category scheme='http://www.blogger.com/atom/ns#' term='ABAP desde cero'/><category scheme='http://www.blogger.com/atom/ns#' term='ABAP'/><title type='text'>Oportunidad Laboral para aprender SAP-ABAP</title><content type='html'>D'Soft Consultores &lt;a href="http://www.dsoftconsultores.com/"&gt;www.dsoftconsultores.com&lt;/a&gt;, esta requiriendo 6 programadores para nuevo staff en Peru.&lt;br /&gt;El personal sera capacitado en el lenguaje de programacion ABAP (lenguaje utilizado en el ERP SAP) durante 2 meses, para luego formar parte del staff de consultores.&lt;br /&gt;Requerimientos:-&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Egresado de Sistemas, Informatica o afines; en el año 2006 o 2007.&lt;/li&gt;&lt;li&gt;Solidos conocimientos en fundamentos de programacion.&lt;/li&gt;&lt;li&gt;Facilidad para aprender nuevos lenguajes de programacion.&lt;/li&gt;&lt;li&gt;Manejo de sentencias SQL.&lt;/li&gt;&lt;li&gt;Disponibilidad INMEDIATA y a tiempo completo.&lt;/li&gt;&lt;li&gt;Personalidad pro-activa.&lt;/li&gt;&lt;li&gt;Conocimientos en JAVA seran considerados como un "plus". &lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Se ofrece:- Contrato bajo planilla inicialmente por 3 años.- Capacitacion constante en programacion y módulos de SAP.- Sueldo acorde con el mercado.- Bonificaciones adicionales por proyectos.  Interesados enviar CV hasta el dia 18 de junio, a:- Ana Mostacero (&lt;a href="mailto:amostacero@dsoftconsultores.com"&gt;amostacero@dsoftconsultores.com&lt;/a&gt;)&lt;div class="blogger-post-footer"&gt;Podríamos cambiar el mundo...
pero Dios no nos daria el código fuente.&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4730412993282588645-5175964524168476059?l=carlosagreda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://carlosagreda.blogspot.com/feeds/5175964524168476059/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=4730412993282588645&amp;postID=5175964524168476059' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4730412993282588645/posts/default/5175964524168476059'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4730412993282588645/posts/default/5175964524168476059'/><link rel='alternate' type='text/html' href='http://carlosagreda.blogspot.com/2008/06/oportunidad-laboral-para-aprender-sap.html' title='Oportunidad Laboral para aprender SAP-ABAP'/><author><name>Carlos Agreda</name><uri>http://www.blogger.com/profile/04557577110714581339</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09672903207654664222'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4730412993282588645.post-6098433005222724881</id><published>2008-04-01T17:05:00.000-07:00</published><updated>2009-02-07T13:13:24.655-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SAP'/><category scheme='http://www.blogger.com/atom/ns#' term='ABAP desde cero'/><category scheme='http://www.blogger.com/atom/ns#' term='ABAP'/><title type='text'>Algo de historia sobre SAP</title><content type='html'>SAP fue fundada en 1972 en la Ciudad de Mannheim, Alemania, por antiguos empleados de IBM (Claus Wellenreuther, Hans-Werner Hector, Klaus Tschira, Dietmar Hopp y Hasso Plattner) bajo el nombre de "SAP Systemanalyse, Anwendungen und Programmentwicklung". El nombre fue tomado de la división en la que trabajaban en IBM.&lt;br /&gt;&lt;br /&gt;La corporación SAP fue fundada en 1972 y se ha desarrollado hasta convertirse en la quinta más grande compañía mundial de software. Este sistema comprende muchos módulos completamente integrados, que abarca prácticamente todos los aspectos de la administración empresarial. Ha sido desarrollado para cumplir con las necesidades crecientes de las organizaciones mundiales y su importancia esta más allá de toda duda.&lt;br /&gt;&lt;br /&gt;SAP ha puesto su mirada en el negocio como un todo, así ofrece un sistema único que soporta prácticamente todas las áreas en una escala global. SAP proporciona la oportunidad de sustituir un gran número de sistemas independientes, que se han desarrollado e instalado en organizaciones ya establecidas, con un solo sistema modular. Cada módulo realiza una función diferente, pero esta diseñado para trabajar con otros módulos. Está totalmente integrado ofreciendo real compatibilidad a lo largo de las funciones de una empresa.&lt;br /&gt;&lt;br /&gt;Después de haber dominado el mercado, la empresa afronta una mayor competencia de Microsoft e IBM. En marzo de 2004 cambió su enfoque de negocio en favor de crear la "plataforma" que desarrolla y utiliza, la nueva versión de su software NetWeaver&lt;br /&gt;Es en este punto donde SAP se encuentra enfrentado con Microsoft e IBM, en lo que se conoce como "la guerra de las plataformas". Microsoft ha desarrollado una plataforma basada en la Web llamada .NET, mientras IBM ha desarrollado otra llamada WebSphere.&lt;br /&gt;&lt;br /&gt;SAP ha conquistado clientes de forma consistente para aumentar la cuota del mercado global entre sus cuatro principales competidores a un 55% a fines de 2004, desde un 48% dos años antes. La participación combinada de Oracle y PeopleSoft declinó de un 29% a un 23%.&lt;br /&gt;SAP es una compañía alemana, pero opera en todo el mundo, con 28 sucursales y afiliadas y 6 compañías asociadas, manteniendo oficinas en 40 países.&lt;div class="blogger-post-footer"&gt;Podríamos cambiar el mundo...
pero Dios no nos daria el código fuente.&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4730412993282588645-6098433005222724881?l=carlosagreda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://carlosagreda.blogspot.com/feeds/6098433005222724881/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=4730412993282588645&amp;postID=6098433005222724881' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4730412993282588645/posts/default/6098433005222724881'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4730412993282588645/posts/default/6098433005222724881'/><link rel='alternate' type='text/html' href='http://carlosagreda.blogspot.com/2008/04/algo-de-historia-sobre-sap.html' title='Algo de historia sobre SAP'/><author><name>Carlos Agreda</name><uri>http://www.blogger.com/profile/04557577110714581339</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09672903207654664222'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4730412993282588645.post-5062465470948954348</id><published>2008-04-01T16:01:00.000-07:00</published><updated>2009-02-04T17:41:10.327-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Certificacion SAP-ABAP'/><category scheme='http://www.blogger.com/atom/ns#' term='SAP'/><category scheme='http://www.blogger.com/atom/ns#' term='ABAP desde cero'/><category scheme='http://www.blogger.com/atom/ns#' term='ABAP'/><title type='text'>Abap desde cero "0"</title><content type='html'>&lt;a href="http://2.bp.blogspot.com/_xd7iXaoorZs/R_LJqKqJ5tI/AAAAAAAACbE/ARHFqhxmAqk/s1600-h/abapsap.gif"&gt;&lt;img id="BLOGGER_PHOTO_ID_5184427847309715154" style="margin: 0px 10px 10px 0px; float: left;" alt="" src="http://2.bp.blogspot.com/_xd7iXaoorZs/R_LJqKqJ5tI/AAAAAAAACbE/ARHFqhxmAqk/s320/abapsap.gif" border="0" /&gt;&lt;/a&gt; Algunas personas me escriben y comentan preguntando si es posible empezar a aprender &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;ABAP&lt;/span&gt; de manera &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;autodidacta&lt;/span&gt;, y bueno realmente es una pregunta complicada... y &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;a pesar&lt;/span&gt; de que todo el mundo insiste en que no es posible yo quiero dar la contra un poquito (solo por eso) y empezar a poner por &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_3"&gt;acá&lt;/span&gt; algunos &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;consejillos&lt;/span&gt; que me hubieran sido &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_5"&gt;útiles&lt;/span&gt; hace no mucho al empezar a aprender &lt;span style="color: rgb(0, 0, 0);"&gt;ABAP&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Primero: &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;ABAP&lt;/span&gt;/4 es un lenguaje para &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;SAP&lt;/span&gt;, &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_9"&gt;así&lt;/span&gt; que primero vale la pena leer algo sobre &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;SAP&lt;/span&gt; y su arquitectura &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_11"&gt;básica&lt;/span&gt;. Un poco por &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_12"&gt;acá&lt;/span&gt; &lt;a href="http://carlosagreda.blogspot.com/2008/04/algo-de-historia-sobre-sap.html"&gt;http://carlosagreda.blogspot.com/2008/04/algo-de-historia-sobre-sap.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Segundo: Para programar en &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_13"&gt;ABAP&lt;/span&gt; requieres NECESARIAMENTE de un servidor, donde se compilaran/guardaran/ejecutaran los programas que escribas, entre otras cosas. No es tan sencillo como hacer un fuente en texto y compilarlo como sucede en otros lenguajes. Es posible encontrar una &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_14"&gt;versión&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_15"&gt;mini&lt;/span&gt; de prueba (como para aprender) en este &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_16"&gt;link&lt;/span&gt; &lt;a href="https://www.sdn.sap.com/irj/sdn/downloads?rid=/library/uuid/80fd9a0a-e306-2a10-c896-b84c77c13ed2"&gt;https://www.sdn.sap.com/irj/sdn/downloads?rid=/library/uuid/80fd9a0a-e306-2a10-c896-b84c77c13ed2&lt;/a&gt;, para poder descargarla te &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_17"&gt;pedirá&lt;/span&gt; registrarte.&lt;br /&gt;&lt;br /&gt;Tercero: Revisa en la &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_18"&gt;web&lt;/span&gt; programas sencillos, los mas &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_19"&gt;básicos&lt;/span&gt;, los complicados ya los puedes hacer tu :P. Dejare por &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_20"&gt;aquí&lt;/span&gt; muchos programas muy &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_21"&gt;básicos&lt;/span&gt; como para empezar desde cero.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Actualización 05/FEB/2009&lt;/span&gt;...&lt;br /&gt;&lt;br /&gt;He creado un nuevo blog para hablar específicamente sobre cómo aprender &lt;span style="font-weight: bold;"&gt;ABAP de manera autodidacta&lt;/span&gt;. Se llama &lt;a href="http://abapdesdecero.blogspot.com/"&gt;Abap Desde Cero&lt;/a&gt;&lt;a href="http://abapdesdecero.blogspot.com/"&gt; "0"&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://abapdesdecero.blogspot.com/"&gt;http://abapdesdecero.blogspot.com/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Saludos.&lt;div class="blogger-post-footer"&gt;Podríamos cambiar el mundo...
pero Dios no nos daria el código fuente.&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4730412993282588645-5062465470948954348?l=carlosagreda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://carlosagreda.blogspot.com/feeds/5062465470948954348/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=4730412993282588645&amp;postID=5062465470948954348' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4730412993282588645/posts/default/5062465470948954348'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4730412993282588645/posts/default/5062465470948954348'/><link rel='alternate' type='text/html' href='http://carlosagreda.blogspot.com/2008/04/abap-desde-cero.html' title='Abap desde cero &quot;0&quot;'/><author><name>Carlos Agreda</name><uri>http://www.blogger.com/profile/04557577110714581339</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09672903207654664222'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_xd7iXaoorZs/R_LJqKqJ5tI/AAAAAAAACbE/ARHFqhxmAqk/s72-c/abapsap.gif' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4730412993282588645.post-773761570606687405</id><published>2008-02-29T09:12:00.000-08:00</published><updated>2008-02-29T09:39:18.813-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SAP'/><category scheme='http://www.blogger.com/atom/ns#' term='Juegos'/><category scheme='http://www.blogger.com/atom/ns#' term='ABAP'/><title type='text'>Timer para ABAP</title><content type='html'>Estoy intentando programar un space invaders en ABAP -ya saben el de las navecitas- y bueno... tengo la necesidad de ejecutar eventos que se repitan en un intervalo establecido, y ya que aprendí a usar el timer, decidí poner un ejemplo super sencillo aca.&lt;br /&gt;&lt;br /&gt;Este programa, escribe "hola" en un report y luego cada 3 segundos escribe "hola otra vez!!"&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#339999;"&gt;&lt;span&gt;&lt;span&gt;*&amp;amp;---------------------------------------------------------------------*&lt;br /&gt;*&amp;amp; Autor: Carlos Agreda                                                *&lt;br /&gt;*&amp;amp; Fecha: Feb 29 (Es biciesto) 2008                                    *&lt;br /&gt;*&amp;amp;---------------------------------------------------------------------*&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;REPORT  ZEJ_TIMER.&lt;br /&gt;data: temporizador type ref to cl_gui_timer.&lt;br /&gt;&lt;span&gt;&lt;span&gt;&lt;span style="color:#339999;"&gt;* Definición del manejador de eventos ------------------------------------&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;class lcl_event_handler definition.&lt;br /&gt;     public section.&lt;br /&gt;          class-methods: on_Timer for event finished of cl_gui_timer&lt;br /&gt;                        importing sender.&lt;br /&gt;endclass.&lt;br /&gt;&lt;span&gt;&lt;span style="color:#339999;"&gt;* Implementación del manejador de eventos ------------------------------&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;class lcl_event_handler implementation.&lt;br /&gt;     method on_Timer.&lt;br /&gt;           write:  'Hola otra vez!!'.&lt;br /&gt;           sender-&gt;run( ).&lt;br /&gt;     endmethod.&lt;br /&gt;endclass.&lt;br /&gt;&lt;br /&gt;start-of-selection.&lt;br /&gt;     create object temporizador.&lt;br /&gt;     set handler lcl_event_handler=&gt;on_Timer for temporizador.&lt;br /&gt;&lt;br /&gt;     temporizador-&gt;interval = 3.&lt;span&gt; &lt;/span&gt;&lt;span style="color:#339999;"&gt;&lt;span&gt;&lt;span&gt;"el tiempo va en segundos&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;     temporizador-&gt;run(  ).&lt;br /&gt;     write: 'Hola'.&lt;div class="blogger-post-footer"&gt;Podríamos cambiar el mundo...
pero Dios no nos daria el código fuente.&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4730412993282588645-773761570606687405?l=carlosagreda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://carlosagreda.blogspot.com/feeds/773761570606687405/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=4730412993282588645&amp;postID=773761570606687405' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4730412993282588645/posts/default/773761570606687405'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4730412993282588645/posts/default/773761570606687405'/><link rel='alternate' type='text/html' href='http://carlosagreda.blogspot.com/2008/02/timer-para-abap.html' title='Timer para ABAP'/><author><name>Carlos Agreda</name><uri>http://www.blogger.com/profile/04557577110714581339</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09672903207654664222'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4730412993282588645.post-7659054722641397255</id><published>2008-02-16T02:52:00.000-08:00</published><updated>2008-02-21T17:43:38.609-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tratamiento Imagenes'/><category scheme='http://www.blogger.com/atom/ns#' term='Computer Science'/><title type='text'>Esteganografia en Imagenes (LSB)</title><content type='html'>&lt;div align="justify"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_xd7iXaoorZs/R7bHTs5Dh_I/AAAAAAAACVI/Yuoopp2B02c/s1600-h/esteganografia.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5167536763736131570" style="FLOAT: left; MARGIN: 0pt 10px 10px 0pt; CURSOR: pointer" alt="" src="http://2.bp.blogspot.com/_xd7iXaoorZs/R7bHTs5Dh_I/AAAAAAAACVI/Yuoopp2B02c/s200/esteganografia.jpg" border="0" /&gt;&lt;/a&gt; &lt;span style="color:#000000;"&gt;Este es un un trabajo que presente en la universidad el 2004 para el curso de Algebra Universal, y quiero postearlo por aqui para que no se pierda en el olvido.&lt;br /&gt;&lt;br /&gt;Es una aplicacion de esteganografia que permite ocultar un texto ascii o inclusive un archivo binario cualquiera dentro de una imagen BMP de 24 bits.&lt;br /&gt;&lt;br /&gt;Esteganos: Oculto, Grafia: Escrito&lt;br /&gt;La esteganografía tiene como objeto de estudio las técnicas que permitan ocultar información detrás de otros datos; de tal forma que al ser "mezclados" sean visibles solo los datos de soporte y nuestra información confidencial pase desapercibida ante los ojos de cualquier observador.&lt;br /&gt;&lt;br /&gt;Ej. &lt;/span&gt;&lt;img id="BLOGGER_PHOTO_ID_5169614028963809730" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://1.bp.blogspot.com/_xd7iXaoorZs/R74okc5DicI/AAAAAAAACac/sK8MaJuYqUY/s320/map.bmp" border="0" /&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="color:#000000;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="color:#000000;"&gt;Otro ejemplo.&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="justify"&gt;&lt;span style="color:#000000;"&gt;La iglesia mas antigua, puso el rumor ultimo.&lt;br /&gt;&lt;br /&gt;...si extraemos la primera letra de cada palabra obtenermos:&lt;br /&gt;&lt;span style="FONT-WEIGHT: bold"&gt;L&lt;/span&gt;a &lt;span style="FONT-WEIGHT: bold"&gt;i&lt;/span&gt;glesia &lt;span style="FONT-WEIGHT: bold"&gt;m&lt;/span&gt;as &lt;span style="FONT-WEIGHT: bold"&gt;a&lt;/span&gt;ntiguaa, &lt;span style="FONT-WEIGHT: bold"&gt;p&lt;/span&gt;uso &lt;span style="FONT-WEIGHT: bold"&gt;e&lt;/span&gt;l &lt;span style="FONT-WEIGHT: bold"&gt;r&lt;/span&gt;umor &lt;span style="FONT-WEIGHT: bold"&gt;u&lt;/span&gt;ltimo. = Lima peru.&lt;br /&gt;&lt;br /&gt;Este es un ejemplo muy sencillo en texto, ya se les podra ocurrir miles de ideas distintas para ocultar sobre texto, pero... como ocultar sobre una imagen?&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;a href="http://4.bp.blogspot.com/_xd7iXaoorZs/R7bNEM5DiCI/AAAAAAAACVg/C4txOLhbsUk/s1600-h/sandwich.jpg"&gt;&lt;span style="color:#000000;"&gt;&lt;img id="BLOGGER_PHOTO_ID_5167543094517925922" style="FLOAT: right; MARGIN: 0px 0px 10px 10px" alt="" src="http://4.bp.blogspot.com/_xd7iXaoorZs/R7bNEM5DiCI/AAAAAAAACVg/C4txOLhbsUk/s200/sandwich.jpg" border="0" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="color:#000000;"&gt; La primera alternativa para ocultar un mensaje (bits) sobre un BMP de 24 bits es aprovechar &lt;/span&gt;&lt;a href="http://carlosagreda.blogspot.com/2008/02/destripando-un-bmp-24-bits.html"&gt;&lt;span style="color:#ff6600;"&gt;su &lt;/span&gt;&lt;/a&gt;&lt;a href="http://carlosagreda.blogspot.com/2008/02/destripando-un-bmp-24-bits.html"&gt;&lt;span style="color:#ff6600;"&gt;estructura&lt;/span&gt;&lt;/a&gt;&lt;span style="color:#000000;"&gt; simar al siguiente grafico. solo debemos ocultar nuestros datos justo despues de los metadatos (primeros 54 bytes) y modificar el campo offset (campo que guarda la distancia entre los metadatos y los pixeles) de tal manera que podamos hacer espacio para todo lo que queremos esconder.&lt;br /&gt;Esta alternativa si bien es cierto es muy sencilla de implementar tiene el defecto de que la imagen obtenida sera considerablemente grande, seria extranho tener una imagen de un icono (10x10) que nos ocupe 10 Mb no?&lt;br /&gt;&lt;br /&gt;Otra alternativa -desde mi parecer mucho mejor- es esconder &lt;span style="FONT-STYLE: italic"&gt;lo que queremos esconder&lt;/span&gt; en los LSB de cada componente de un pixel.&lt;br /&gt;&lt;br /&gt;En espanhol: &lt;span style="color:#000000;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/span&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_xd7iXaoorZs/R7cD385DiFI/AAAAAAAACV4/EqPG3vRtOMw/s1600-h/pixel.jpg"&gt;&lt;span style="color:#000000;"&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;/span&gt;&lt;img id="BLOGGER_PHOTO_ID_5167666776691148994" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://2.bp.blogspot.com/_xd7iXaoorZs/R7c9jc5DiMI/AAAAAAAACWw/Sdnv3U5IBZk/s320/pixel.jpg" border="0" /&gt;&lt;br /&gt;&lt;span style="color:#000000;"&gt;&lt;span style="color:#000000;"&gt;Cada pixel, en un archivo BMP (de 24 bits), esta representado por 3 bytes conteniendo la intensidad de color para ROJO, VERDE y AZUL (RGB: red, green, blue). Entonces combinando valores en esas posiciones podemos obtener los &lt;/span&gt;&lt;a href="http://4.bp.blogspot.com/_xd7iXaoorZs/R7cKF85DiJI/AAAAAAAACWY/jV-58uzvBeU/s1600-h/224.png"&gt;&lt;span style="color:#000000;"&gt;&lt;img id="BLOGGER_PHOTO_ID_5167610194791991442" style="CURSOR: hand" alt="" src="http://4.bp.blogspot.com/_xd7iXaoorZs/R7cKF85DiJI/AAAAAAAACWY/jV-58uzvBeU/s200/224.png" border="0" /&gt;&lt;/span&gt;&lt;/a&gt; = &lt;span style="color:#000000;"&gt;(16777216) colores que puede mostrar un pixel, habitualmente se dice 16 millones de colores, pero son un poquito mas.&lt;/span&gt;&lt;a href="http://3.bp.blogspot.com/_xd7iXaoorZs/R7cJXs5DiII/AAAAAAAACWQ/wQF_QR6kx98/s1600-h/224.png"&gt;&lt;/a&gt;&lt;span style="color:#000000;"&gt;&lt;br /&gt;&lt;br /&gt;Bueno entonces... cada byte contiene un valor entre 0 y 255 (en binario 00000000 y 11111111), estos bytes igual que en el sistema decimal conforme sus cifras esten mas a la izquierda tendran mas valor (peso) por citar un ejemplo:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;5768&lt;/strong&gt;, si cambiamos la primera cifra (la mas significativa) a 3 nos queda &lt;strong&gt;3&lt;/strong&gt;768, la diferencia es notable. Pero si cambiamos la ultima cifra (la menos significativa) por ejemplo a un 2 nos queda 576&lt;strong&gt;2&lt;/strong&gt;, la diferencia es relativamente minima.&lt;br /&gt;&lt;br /&gt;Con esto quiero decir que podemos modificar los LSB (less significant bits, o cifras menos significativas) sin producir mayor alteracion.&lt;br /&gt;&lt;br /&gt;Un caso:&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;a href="http://4.bp.blogspot.com/_xd7iXaoorZs/R7caL85DiKI/AAAAAAAACWg/69VCSsAJ5zI/s1600-h/pixels.png"&gt;&lt;span style="color:#000000;"&gt;&lt;img id="BLOGGER_PHOTO_ID_5167627890057250978" style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://4.bp.blogspot.com/_xd7iXaoorZs/R7caL85DiKI/AAAAAAAACWg/69VCSsAJ5zI/s320/pixels.png" border="0" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="color:#000000;"&gt; Si observamos estos dos pixels, tan solo se le ha cambiado una unidad a cada componente R, G, B, y la variacion de color ha sido minima. Al ojo humano son practicamente el mismo color. &lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="color:#000000;"&gt;Con esto hemos logrado sembrar 3 bits que originalmente eran &lt;span style="color:#ff0000;"&gt;101&lt;/span&gt; ahora hemos sembrado &lt;span style="color:#ff0000;"&gt;010&lt;/span&gt;, eso significa que por cada pixel podemos almacenar 3 bit sin producir un cambio aparente en el pixel.&lt;/span&gt;&lt;/p&gt;&lt;span style="color:#000000;"&gt;Si repetimos este paso, recorriendo los pixels de la imagen, podemos ir sembrando (ocultando) los bits que querramos dentro de nuetra imagen. En cada pixel podremos poner 3 bits es decir necesitaremos masomenos 8 pixels para poner 3 bytes (un byte tiene 8 bits :P). &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="color:#000000;"&gt;Como se puede ver no es muy dificil &lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="color:#000000;"&gt;Esta es una imagen que contiene un mensaje, si logran recuperarlo lo comentan :P&lt;/span&gt;&lt;/p&gt;&lt;img id="BLOGGER_PHOTO_ID_5167661532536080562" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://1.bp.blogspot.com/_xd7iXaoorZs/R7c4yM5DiLI/AAAAAAAACWo/DfwpXiXV6-0/s400/bart_mensaje.bmp" border="0" /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;La imagen de bart con el mensaje la pueden descargar &lt;a href="http://carlosagreda.googlepages.com/bart_mensaje.bmp"&gt;aqui&lt;/a&gt;.&lt;br /&gt;La aplicacion ejecutable la pueden descargar &lt;a href="http://carlosagreda.googlepages.com/Ocultor.rar"&gt;aqui&lt;/a&gt;.&lt;br /&gt;El codigo fuente para vb 6, lo pueden descargar &lt;a href="http://carlosagreda.googlepages.com/Source_ocultor.rar"&gt;aqui.&lt;/a&gt;&lt;br /&gt;Un instalador de la aplicacion lo pueden descargar de &lt;a href="http://carlosagreda.googlepages.com/install_ocultor.rar"&gt;aqui&lt;/a&gt;.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;y si no tienen el winrar lo pueden descargar de &lt;a href="http://www.winrar.es/descargas"&gt;aqui&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Saludos.&lt;/p&gt;&lt;br /&gt;&lt;span style="color:#000000;"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;Podríamos cambiar el mundo...
pero Dios no nos daria el código fuente.&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4730412993282588645-7659054722641397255?l=carlosagreda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://carlosagreda.blogspot.com/feeds/7659054722641397255/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=4730412993282588645&amp;postID=7659054722641397255' title='3 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4730412993282588645/posts/default/7659054722641397255'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4730412993282588645/posts/default/7659054722641397255'/><link rel='alternate' type='text/html' href='http://carlosagreda.blogspot.com/2008/02/esteganografia-en-imagenes.html' title='Esteganografia en Imagenes (LSB)'/><author><name>Carlos Agreda</name><uri>http://www.blogger.com/profile/04557577110714581339</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09672903207654664222'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_xd7iXaoorZs/R7bHTs5Dh_I/AAAAAAAACVI/Yuoopp2B02c/s72-c/esteganografia.jpg' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4730412993282588645.post-5460167358203995152</id><published>2008-02-15T12:21:00.000-08:00</published><updated>2008-02-16T13:30:22.610-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Certificacion SAP-ABAP'/><category scheme='http://www.blogger.com/atom/ns#' term='SAP'/><category scheme='http://www.blogger.com/atom/ns#' term='ABAP'/><title type='text'>SAP Consultant Certification</title><content type='html'>&lt;div class="Section1"&gt;&lt;p&gt;&lt;span lang="EN-US"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span lang="EN-US"&gt;Navegando por ahi me tope con los contenidos para la certificación ABAP. Me pareció util postearlo por aca.&lt;/span&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;span&gt;&lt;span lang="EN-US"&gt;Number of certification questions: 80&lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US"&gt;Courses for certification preparation: TAW10 (ABAP Workbench Fundamentals); TAW12 (ABAP Workbench Concepts)&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US"&gt;Please note that you are not allowed to use any reference materials during the certification test (no access to online documentation or to any SAP system).&lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US"&gt;The certification test Development Consultant SAP NetWeaver 2004– Application Development Focus ABAP verifies the knowledge in the area of the SAP NetWeaver for the consultant profile Application Development Focus ABAP. This certificate proves that the candidate has a basic understanding within this consultant profile, and can implement this knowledge practically in projects.&lt;br /&gt;The certification test consists of questions from the areas specified below:&lt;/span&gt; &lt;p&gt;&lt;/p&gt;&lt;h2&gt;&lt;span lang="EN-US"&gt;Topic Areas&lt;/span&gt; &lt;/h2&gt;&lt;/div&gt;&lt;div class="Section2"&gt;&lt;span&gt;&lt;strong&gt;&lt;span lang="EN-US"&gt;1. SAP Technologies (+)&lt;/span&gt; &lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="Section2"&gt;&lt;span lang="EN-US"&gt;SAP systems (mySAP Business Suite and SAP NetWeaver)&lt;/span&gt;&lt;/div&gt;&lt;div class="Section2"&gt;&lt;span lang="EN-US"&gt;Technical structure of an SAP Web Application Server&lt;/span&gt;&lt;/div&gt;&lt;div class="Section1"&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;p class="Section1"&gt;&lt;span lang="EN-US"&gt;&lt;strong&gt;2. ABAP Workbench Basics (++)&lt;br /&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span lang="EN-US"&gt;Data types and data objects (declaration)&lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US"&gt;Internal tables&lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US"&gt;Data retrieval (authorization check)&lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US"&gt;Subroutines&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span lang="EN-US"&gt;Function groups and function modules&lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US"&gt;Program calls and memory management&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span lang="EN-US"&gt;&lt;strong&gt;3. Advanced ABAP (++)&lt;br /&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span lang="EN-US"&gt;ABAP runtime&lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US"&gt;Data types and data objects (usage)&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span lang="EN-US"&gt;Open SQL (high-performance programming)&lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US"&gt;Dynamic programming&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span lang="EN-US"&gt;&lt;strong&gt;4. ABAP Objects (++)&lt;br /&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span lang="EN-US"&gt;Classes and objects&lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US"&gt;Inheritance&lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US"&gt;Polymorphism (casting)&lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US"&gt;Interfaces&lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US"&gt;Events&lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US"&gt;Global classes and interfaces&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span lang="EN-US"&gt;Exception handling&lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US"&gt;Shared objects&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span lang="EN-US"&gt;&lt;strong&gt;5. ABAP Dictionary (++)&lt;br /&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span lang="EN-US"&gt;Database tables&lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US"&gt;Performance for table accesses&lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US"&gt;Consistency by means of input check (foreign key dependency)&lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US"&gt;Dependency for ABAP Dictionary objects&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span lang="EN-US"&gt;Views&lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US"&gt;Search helps&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span lang="EN-US"&gt;&lt;strong&gt;6. List Creation Techniques (++)&lt;br /&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span lang="EN-US"&gt;Data output in lists&lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US"&gt;Selection screen&lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US"&gt;Logical database&lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US"&gt;Interactive lists&lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US"&gt;List creation with the ALV grid control:&lt;br /&gt;- Simple lists&lt;br /&gt;- Field catalog&lt;br /&gt;- Layout&lt;br /&gt;- Event handling&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span lang="EN-US"&gt;&lt;strong&gt;7. Dialog Programming (++)&lt;br /&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span lang="EN-US"&gt;Screen (basics)&lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US"&gt;Program interface (GUI title, GUI status)&lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US"&gt;Screen elements for output (text fields, status icons, and group boxes)&lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US"&gt;Screen elements for input/output&lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US"&gt;Subscreen and tabstrip control&lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US"&gt;Table control&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span lang="EN-US"&gt;Context menu&lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US"&gt;Lists in dialog programming&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span lang="EN-US"&gt;&lt;strong&gt;8. Database Changes (+)&lt;br /&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span lang="EN-US"&gt;Database updates with open SQL&lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US"&gt;LUWs and client/server architecture&lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US"&gt;SAP locking concept&lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US"&gt;Organize database changes&lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US"&gt;Complex LUW processing&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span lang="EN-US"&gt;Number assignment&lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US"&gt;Change document creation&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span lang="EN-US"&gt;&lt;strong&gt;9. Enhancements and Modifications (+)&lt;br /&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span lang="EN-US"&gt;Changes to the standard SAP system&lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US"&gt;Personalization&lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US"&gt;Enhancements to ABAP Dictionary elements&lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US"&gt;Enhancements via customer exits&lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US"&gt;Business Transaction Events&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span lang="EN-US"&gt;Business Add-Ins&lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US"&gt;Modifications&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span lang="EN-US"&gt;Amount of questions by topic (as percentage of test):&lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US"&gt;+ = 1 - 10%&lt;br /&gt;++ = 11 - 20%&lt;br /&gt;+++ = over 20%&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span lang="EN-GB"&gt;No responsibility is taken for the correctness of this information. &lt;/span&gt;&lt;span lang="EN-US"&gt;Copyright © SAP AG 2005.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Fuente: &lt;a href="https://websmp108.sap-ag.de/~sapidp/011000358700006455222004E"&gt;https://websmp108.sap-ag.de/~sapidp/011000358700006455222004E&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;Podríamos cambiar el mundo...
pero Dios no nos daria el código fuente.&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4730412993282588645-5460167358203995152?l=carlosagreda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://carlosagreda.blogspot.com/feeds/5460167358203995152/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=4730412993282588645&amp;postID=5460167358203995152' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4730412993282588645/posts/default/5460167358203995152'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4730412993282588645/posts/default/5460167358203995152'/><link rel='alternate' type='text/html' href='http://carlosagreda.blogspot.com/2008/02/sap-consultant-certification.html' title='SAP Consultant Certification'/><author><name>Carlos Agreda</name><uri>http://www.blogger.com/profile/04557577110714581339</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09672903207654664222'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4730412993282588645.post-8717744744603567846</id><published>2008-02-15T11:57:00.000-08:00</published><updated>2008-04-01T15:57:56.648-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Certificacion SAP-ABAP'/><category scheme='http://www.blogger.com/atom/ns#' term='SAP'/><category scheme='http://www.blogger.com/atom/ns#' term='ABAP'/><title type='text'>Certificación SAP-ABAP</title><content type='html'>&lt;a href="http://4.bp.blogspot.com/_xd7iXaoorZs/R_K92qqJ5sI/AAAAAAAACa8/3AY4gQWRd4c/s1600-h/abap.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5184414867918546626" style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://4.bp.blogspot.com/_xd7iXaoorZs/R_K92qqJ5sI/AAAAAAAACa8/3AY4gQWRd4c/s320/abap.jpg" border="0" /&gt;&lt;/a&gt;Imagino que muchos como yo quisieran certificarse algún día en SAP ABAP -mundillo interesante en el que he venido a llegar de casualidad- y dado que estoy al inicio de esta aventura de recopilar información y empezar a estudiar, me he decidido postear cada paso que voy dando hasta llegar a lograrlo (espero :P).&lt;br /&gt;&lt;br /&gt;Síganme los buenos!!!&lt;br /&gt;&lt;br /&gt;Todo material es bienvenido, los comentarios y recomendaciones, también.&lt;br /&gt;&lt;br /&gt;Saludos.&lt;div class="blogger-post-footer"&gt;Podríamos cambiar el mundo...
pero Dios no nos daria el código fuente.&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4730412993282588645-8717744744603567846?l=carlosagreda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://carlosagreda.blogspot.com/feeds/8717744744603567846/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=4730412993282588645&amp;postID=8717744744603567846' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4730412993282588645/posts/default/8717744744603567846'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4730412993282588645/posts/default/8717744744603567846'/><link rel='alternate' type='text/html' href='http://carlosagreda.blogspot.com/2008/02/certificacin-sap-abap.html' title='Certificación SAP-ABAP'/><author><name>Carlos Agreda</name><uri>http://www.blogger.com/profile/04557577110714581339</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09672903207654664222'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_xd7iXaoorZs/R_K92qqJ5sI/AAAAAAAACa8/3AY4gQWRd4c/s72-c/abap.jpg' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4730412993282588645.post-7387639606541528543</id><published>2008-02-14T19:48:00.000-08:00</published><updated>2008-02-14T20:44:33.124-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SAP'/><category scheme='http://www.blogger.com/atom/ns#' term='Noticias GeeK'/><title type='text'>SAP CRM para iPhone</title><content type='html'>&lt;a href="http://1.bp.blogspot.com/_xd7iXaoorZs/R7UMOs5Dh4I/AAAAAAAACTw/2Cg-lK6A3-g/s1600-h/sap-iphone-crm.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5167049594185680770" style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://1.bp.blogspot.com/_xd7iXaoorZs/R7UMOs5Dh4I/AAAAAAAACTw/2Cg-lK6A3-g/s200/sap-iphone-crm.jpg" border="0" /&gt;&lt;/a&gt;&lt;strong&gt;SAP&lt;/strong&gt; está trabajando en un &lt;strong&gt;CRM&lt;/strong&gt; -&lt;em&gt;Customer Relationship Management&lt;/em&gt;- móvil para iPhone. El argumento de SAP es que sus clientes corporativos prefieren iPhone antes que otras marcas y no pueden perder el pulso del mercado. SAP, líder de software de gestión e inteligencia empresarial ha decidido desarrollar aplicaciones para iPhone comenzando con CRM 2007.&lt;br /&gt;&lt;br /&gt;El nuevo CRM, que se empezará a comercializar a finales de mes, contará con un programa que permitirá el envío de datos de clientes a los teléfonos iPhone de Apple. SAP ha buscado en esta nueva generación de aplicaciones utilizar todas las experiencias de los servicios de la web 2.0, inspirándose en las herramientas de Google y Yahoo.&lt;br /&gt;El CRM móvil será un instrumento imprescindible para que las empresas puedan brindar mayor satisfacción de los clientes, mejorar sus objetivos de rendimiento financiero e impulsar su ventaja competitiva en el mercado, comenzando por los equipos de fuerza de ventas para llegar, tarde o temprano, a las actividades de aprovisionamiento y producción.&lt;div class="blogger-post-footer"&gt;Podríamos cambiar el mundo...
pero Dios no nos daria el código fuente.&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4730412993282588645-7387639606541528543?l=carlosagreda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4730412993282588645/posts/default/7387639606541528543'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4730412993282588645/posts/default/7387639606541528543'/><link rel='alternate' type='text/html' href='http://carlosagreda.blogspot.com/2008/02/sap-crm-para-iphone.html' title='SAP CRM para iPhone'/><author><name>Carlos Agreda</name><uri>http://www.blogger.com/profile/04557577110714581339</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09672903207654664222'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_xd7iXaoorZs/R7UMOs5Dh4I/AAAAAAAACTw/2Cg-lK6A3-g/s72-c/sap-iphone-crm.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-4730412993282588645.post-981474049609869685</id><published>2008-02-14T18:17:00.000-08:00</published><updated>2008-02-16T13:31:59.013-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tratamiento Imagenes'/><category scheme='http://www.blogger.com/atom/ns#' term='Noticias GeeK'/><category scheme='http://www.blogger.com/atom/ns#' term='Biometria'/><category scheme='http://www.blogger.com/atom/ns#' term='Inteligencia Artificial'/><category scheme='http://www.blogger.com/atom/ns#' term='Computación Grafica'/><category scheme='http://www.blogger.com/atom/ns#' term='Computer Science'/><title type='text'>Mujer afgana identificada por su iris</title><content type='html'>&lt;a href="http://1.bp.blogspot.com/_xd7iXaoorZs/R7T7f85Dh3I/AAAAAAAACTo/Zrt5EbShQsc/s1600-h/afghanportraits.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5167031198840751986" alt="" src="http://1.bp.blogspot.com/_xd7iXaoorZs/R7T7f85Dh3I/AAAAAAAACTo/Zrt5EbShQsc/s200/afghanportraits.jpg" border="0" /&gt;&lt;/a&gt;&lt;strong&gt;Sharbat Gula&lt;/strong&gt;, fotografiada en 1984 a los 12 años en un refugio en Pakistán por el fotógrafo de la National Geographic Steve McCurry, y localizada 18 &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_xd7iXaoorZs/R7T5S85Dh1I/AAAAAAAACTY/oVoFO5rMMhY/s1600-h/afghanportraits.jpg"&gt;&lt;/a&gt;años después en una remota parte de Afganistán donde fue nuevamente fotografiada por McCurry, es mencionada por la National Geographic en su revista y en su &lt;a href="http://ngm.nationalgeographic.com/ngm/afghangirl/index.html"&gt;website&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;John Daugman todo un ícono en el procesamiento y reconocimiento del iris humano, calculó el IrisCode de ambos ojos en la fotografía de 1984. Un sección procesada de la fotografía de 1984 se muestra&lt;a href="http://www.cl.cam.ac.uk/~jgd1000/youngProcessedR.jpg"&gt; aquí&lt;/a&gt;. La circunferencia muestra la automática localización del iris y sus bordes, el descarte de ciertas reflexiones especulares del ojo y la representación del IrisCode. Luego calculó el IrisCods de ambos ojos fotografiados en 2002. La imágenes procesadas pueden ser vistas aquí, para el ojo &lt;a href="http://www.cl.cam.ac.uk/~jgd1000/matched2002_L.jpg"&gt;izquierdo&lt;/a&gt; y &lt;a href="http://www.cl.cam.ac.uk/~jgd1000/matched2002_R.jpg"&gt;derecho&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Aún lo más interesante surge a continuación. Cuando se obtuvo la distancia de Hamming de los ojos izquierdo y derecho(los cuales en todo humano son completamente diferentes), se obtuvo medidas muy similares, que como el mismo Daugman manifiesta es estadísticamente casi imposible para diferentes iris se muestren medidas tan poco distintas. La estadística matemática de que tal evento pase es de seis millones a uno para el ojo derecho y 10 elevado a 15 para el ojo izquierdo. NatGeo aceptó nuevamente publicar esta conclusión.&lt;br /&gt;&lt;br /&gt;Como se ve el IrisCode tuvo todo un reto, y salió con algunas heridas pero victorioso al fin.&lt;br /&gt;&lt;br /&gt;Fuente: &lt;a href="http://www.seccperu.org/?q=node/608"&gt;http://www.seccperu.org/?q=node/608&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;Podríamos cambiar el mundo...
pero Dios no nos daria el código fuente.&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4730412993282588645-981474049609869685?l=carlosagreda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://carlosagreda.blogspot.com/feeds/981474049609869685/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=4730412993282588645&amp;postID=981474049609869685' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4730412993282588645/posts/default/981474049609869685'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4730412993282588645/posts/default/981474049609869685'/><link rel='alternate' type='text/html' href='http://carlosagreda.blogspot.com/2008/02/mujer-afgana-identificada-por-su-iris.html' title='Mujer afgana identificada por su iris'/><author><name>Carlos Agreda</name><uri>http://www.blogger.com/profile/04557577110714581339</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09672903207654664222'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_xd7iXaoorZs/R7T7f85Dh3I/AAAAAAAACTo/Zrt5EbShQsc/s72-c/afghanportraits.jpg' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4730412993282588645.post-4546811442047573672</id><published>2008-02-14T09:15:00.000-08:00</published><updated>2008-02-16T12:18:21.320-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Inteligencia Artificial'/><category scheme='http://www.blogger.com/atom/ns#' term='Computer Science'/><title type='text'>Algo sobre lógica difusa.</title><content type='html'>Han podido ver sus lavadoras u otros electrodomésticos que dicen "FUZZY LOGIC?"&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_xd7iXaoorZs/R7SNQs5Dh0I/AAAAAAAACSw/OVud1434e4w/s1600-h/FuzzyLogicLogo.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5166909990568691522" style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://4.bp.blogspot.com/_xd7iXaoorZs/R7SNQs5Dh0I/AAAAAAAACSw/OVud1434e4w/s200/FuzzyLogicLogo.png" border="0" /&gt;&lt;/a&gt;Habitualmente las premisas de la lógica que conocemos tienen sólo dos extremos: o son completamente ciertas o son totalmente falsas (1 v 0). En el mundo de la lógica difusa las premisas pueden tener un grado de certeza que le permite acercar la matemática al lenguaje impreciso del hombre común, ya que está repleto de términos vagos como “poco”, “mucho”, “tibio”, etc.&lt;br /&gt;&lt;br /&gt;Entonces podemos decir que la lógica difusa analiza los métodos y principios del razonamiento a partir de proposiciones IMPRECISAS similar a como lo haría un ser humano: "Si hace &lt;strong&gt;algo de frio&lt;/strong&gt; y tengo &lt;strong&gt;muchas cosas que hacer&lt;/strong&gt; entonces &lt;strong&gt;no salgo&lt;/strong&gt;", ¿Cuánto es &lt;strong&gt;algo&lt;/strong&gt; o &lt;strong&gt;mucho&lt;/strong&gt;?&lt;br /&gt;De esa manera tu lavadora puede decirdir cuanto tiempo lavar, cuanto detergente pedir, y cuanta agua cargar, con reglas de inferencias del tipo:&lt;br /&gt;&lt;br /&gt;Si la ropa esta &lt;strong&gt;muy sucia&lt;/strong&gt;, y el agua es &lt;strong&gt;fria&lt;/strong&gt;, y ademas hay &lt;strong&gt;mucha ropa&lt;/strong&gt; -&gt; cargar &lt;strong&gt;mucha&lt;/strong&gt; agua y lavar durante &lt;strong&gt;mucho&lt;/strong&gt; tiempo. :P&lt;br /&gt;&lt;br /&gt;Para los q quieren saber mas...&lt;br /&gt;&lt;br /&gt;Un sistema difuso convencional consta de 3 etapas que son las siguientes:&lt;br /&gt;&lt;br /&gt;&lt;em&gt;&lt;strong&gt;Fuzzyficación&lt;br /&gt;&lt;/strong&gt;&lt;/em&gt;Consiste en llevar los valores del mundo real al ambiente Fuzzy mediante el uso de funciones de membresía. Por ejemplo, si tenemos un paciente con fiebre, podemos plantear un modelo en el que la situación de fiebre no se restringe sólo a dos valores (hay fiebre o no hay fiebre), sino que tenemos todo un rango de temperaturas posible, asi un paciente que tiene 38C de tempratura puede tener fiebre como no tenerla pero en cierto grado.&lt;br /&gt;&lt;em&gt;&lt;/em&gt;&lt;br /&gt;&lt;em&gt;&lt;strong&gt;Inferencia Lógica&lt;br /&gt;&lt;/strong&gt;&lt;/em&gt;Para poder operar con los Conjuntos Difusos es necesario definir las operaciones elementales entre ellos. Esto implica definir el modo de calcular las funciones de pertenencia a estos tres conjuntos.&lt;br /&gt;Siento FP una función que nos devuelve el grado de pertenencia al un conjunto difuso, Zadeh propone:&lt;br /&gt;FP(X AND Y) = mínimo de (FP (X), FP(Y))&lt;br /&gt;FP (X OR Y) = máximo de (FP (X), FP (Y))&lt;br /&gt;NOT FP = 1 – FP (X), considerando pertenencia total = 1&lt;br /&gt;&lt;br /&gt;En realidad, estas expresiones son bastante arbitrarias y podrían haberse definido de muchas otras maneras. En la actualidad se considera correcto definir el operador AND mediante cualquier aplicación t-norma y el operador OR mediante cualquier aplicación s-norma.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;em&gt;Defuzzyficación&lt;br /&gt;&lt;/em&gt;&lt;/strong&gt;Después de calcular las reglas fuzzy y evaluar las variables fuzzy, necesitaremos trasladar estos valores nuevamente hacia el mundo real. El método más popular de defusificación es el cálculo del centro de gravedad ó centroide, el cual retorna el centro del área bajo la curva de la inferencia.&lt;br /&gt;&lt;br /&gt;El término difuso aplicado a la lógica procede de la expresión fuzzy sets (conjuntos difusos) acuñada por Lofti A. Zadeh. Zadeh prefirió el término fuzzy para denominar a sus conjuntos y a la lógica en la que se apoya su análisis. Uno de los países donde más éxito han tenido los sistemas difusos ha sido en Japón. Empresas como Fuji Elec.&amp;amp; TIT han desarrollado aplicaciones de control fuzzy para el proceso de purificación del agua, Hitachi con una aplicación de control fuzzy para el Metro en Sendai City o Matsushita con una aplicación de control fuzzy para la unidad de suministro de agua caliente para uso doméstico. Merece una mención especial la creación de LIFE (Laboratory for International Fuzzy Engineering Research) en marzo de 1989, creado por el Ministerio de Comercio Internacional e Industria en Japón (MITI). Pero también en USA las empresas han comenzado a aplicar la lógica difusa a sus desarrollos y proyectos. Entre otras encontramos a la NASA, Boeing, Rochwell, Bell o a Ford Motor Co., que experimenta con un sistema de aparcamiento automático para camiones con remolque.&lt;br /&gt;&lt;br /&gt;Los comentarios son bienvenidos.&lt;div class="blogger-post-footer"&gt;Podríamos cambiar el mundo...
pero Dios no nos daria el código fuente.&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4730412993282588645-4546811442047573672?l=carlosagreda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://carlosagreda.blogspot.com/feeds/4546811442047573672/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=4730412993282588645&amp;postID=4546811442047573672' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4730412993282588645/posts/default/4546811442047573672'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4730412993282588645/posts/default/4546811442047573672'/><link rel='alternate' type='text/html' href='http://carlosagreda.blogspot.com/2008/02/algo-sobre-lgica-difusa.html' title='Algo sobre lógica difusa.'/><author><name>Carlos Agreda</name><uri>http://www.blogger.com/profile/04557577110714581339</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09672903207654664222'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_xd7iXaoorZs/R7SNQs5Dh0I/AAAAAAAACSw/OVud1434e4w/s72-c/FuzzyLogicLogo.png' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4730412993282588645.post-2808247166340112949</id><published>2008-02-07T06:35:00.000-08:00</published><updated>2008-02-14T09:13:01.577-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ABAP'/><title type='text'>Plantilla super básica para aprender ALV</title><content type='html'>Esta es una plantilla que hice hace un tiempo cuando aprendí a usar ALV, es la plantilla más básica como ejemplo para aprender, luego uno ya puede ir agregándole otras capacidades que ALV permite.&lt;br /&gt;&lt;br /&gt;Solo cambia lo que está en rojo y para obtener un programa que muestra un ALV.&lt;br /&gt;&lt;hr /&gt;&lt;span style="color:#339999;"&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;*&amp;amp;---------------------------------------------------------------------*&lt;br /&gt;*&amp;amp; autor....... : Carlos Agreda*&lt;br /&gt;*&amp;amp; Descripción..: programa plantilla basico para alv                   *&lt;br /&gt;*&amp;amp;---------------------------------------------------------------------*&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;REPORT  ZEJ_ALV.&lt;br /&gt;     type-pools: slis.&lt;br /&gt;     Data: gt_fieldcat TYPE slis_t_fieldcat_alv WITH HEADER LINE.&lt;br /&gt;     Data: BEGIN OF it_datos  OCCURS 0.&lt;br /&gt;                            INCLUDE STRUCTURE &lt;/span&gt;&lt;span style="color:#ff0000;"&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;strong&gt;tabla_diccionario&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;.&lt;br /&gt;     Data: END OF it_datos .&lt;br /&gt;&lt;br /&gt;     perform llenaDatos.&lt;br /&gt;     perform llenaFieldcat.&lt;br /&gt;     perform mostrarALV.&lt;br /&gt;&lt;hr /&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span style="color:#339999;"&gt;*llena la tabla interna con los datos que queremos mostrar  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;form llenaDatos.&lt;br /&gt;             SELECT * FROM &lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span style="color:#ff0000;"&gt;&lt;strong&gt;tabla_diccionario&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt; INTO TABLE it_datos.&lt;br /&gt;endform.&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span style="color:#339999;"&gt;*Llena el fieldcat para cada campo&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;form llenaFieldcat.&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#ff0000;"&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;* repetir este bloque por cada campo&lt;br /&gt;             CLEAR gt_fieldcat.&lt;br /&gt;             gt_fieldcat-SELTEXT_L = '&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;strong&gt;&lt;span style="color:#990000;"&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;caption&lt;/span&gt;&lt;span&gt;_campo&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span style="color:#ff0000;"&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;'.&lt;br /&gt;             gt_fieldcat-fieldname = '&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span style="color:#990000;"&gt;&lt;strong&gt;nombre_del_Campo&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#ff0000;"&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;'.&lt;br /&gt;             gt_fieldcat-tabname = '&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span style="color:#990000;"&gt;&lt;strong&gt;tabla_diccionario&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#ff0000;"&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;'.&lt;br /&gt;             APPEND gt_fieldcat.&lt;br /&gt;*fin del bloque&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;endform.&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;&lt;span style="color:#339999;"&gt;* muestra el alv&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;                                                  &lt;br /&gt;form mostrarALV.&lt;br /&gt;             CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'&lt;br /&gt;             EXPORTING&lt;br /&gt;                      it_fieldcat                    = gt_fieldcat[]&lt;br /&gt;             TABLES&lt;br /&gt;                        t_outtab                       = it_datos&lt;br /&gt;             EXCEPTIONS&lt;br /&gt;                        program_error                  = 1&lt;br /&gt;               OTHERS                         = 2.&lt;br /&gt;endform.&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;&lt;/span&gt;Espero no haber olvidado nada.&lt;br /&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;Podríamos cambiar el mundo...
pero Dios no nos daria el código fuente.&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4730412993282588645-2808247166340112949?l=carlosagreda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://carlosagreda.blogspot.com/feeds/2808247166340112949/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=4730412993282588645&amp;postID=2808247166340112949' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4730412993282588645/posts/default/2808247166340112949'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4730412993282588645/posts/default/2808247166340112949'/><link rel='alternate' type='text/html' href='http://carlosagreda.blogspot.com/2008/02/plantilla-super-bsica-para-aprender-alv.html' title='Plantilla super básica para aprender ALV'/><author><name>Carlos Agreda</name><uri>http://www.blogger.com/profile/04557577110714581339</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09672903207654664222'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4730412993282588645.post-5907109488612179737</id><published>2008-02-06T15:57:00.000-08:00</published><updated>2008-02-14T09:13:36.749-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Juegos'/><category scheme='http://www.blogger.com/atom/ns#' term='Inteligencia Artificial'/><category scheme='http://www.blogger.com/atom/ns#' term='ABAP'/><title type='text'>Tres en raya para ABAP</title><content type='html'>Ésta es una implementacion -ociosa- del juego de 3 en raya en ABAP/4, por el momento es muy torpe -juega totalmente aleatorio- y poco robusta, pero es un buen ejemplo de programas interactivos.&lt;br /&gt;El código está listo para pegar poner F8 y jugar.&lt;br /&gt;Prometo implementar la heurística del juego para que no le puedas ganarle, pero eso será en otro post.&lt;br /&gt;Por cierto el generador de aleatorios de ABAP es muy malo, prometo implementar uno y postearlo también.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#339999;"&gt;&lt;span style="font-family:arial;"&gt;&lt;span&gt;&lt;span&gt;*&amp;amp;---------------------------------------------------------------------*&lt;br /&gt;*&amp;amp; Autor.........: Carlos Agreda Pérez&lt;br /&gt;*&amp;amp; Descripción...: Juego de 3 en raya&lt;br /&gt;*&amp;amp; Fecha ........: 06/FEB/2008                                         *&lt;br /&gt;*&amp;amp;---------------------------------------------------------------------*&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:arial;"&gt;&lt;span&gt;&lt;br /&gt;REPORT  ZTMP_3R no standard page heading.&lt;br /&gt;Data: aleatorio type i, posX type i, posY type i.&lt;br /&gt;Data: ganoMaquina type i value 0.&lt;br /&gt;Data: ganoJugador type i value 0.&lt;br /&gt;Data: Begin of estado,&lt;br /&gt;            P1 VALUE '-', P2 VALUE '-', P3 VALUE '-', P4 VALUE '-', P5 VALUE '-',&lt;br /&gt;            P6 VALUE '-', P7 VALUE '-', P8 VALUE '-', P9 VALUE '-',&lt;br /&gt;    End of estado.&lt;br /&gt;&lt;br /&gt;perform elegirAccionMaquina.&lt;br /&gt;perform mostrarEstado.&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:arial;"&gt;&lt;span&gt;&lt;span&gt;&lt;span style="color:#339999;"&gt;* CAPTURA DE LA JUGADA-----------------------&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:arial;"&gt;&lt;span&gt;&lt;br /&gt;AT LINE-SELECTION.&lt;br /&gt;     GET CURSOR LINE posY OFFSET posX.   &lt;br /&gt;     if posX = 10 and posY = 4.  estado-P1 = 'o'.    endif.&lt;br /&gt;     if posX = 20 and posY = 4.  estado-P2 = 'o'.    endif.&lt;br /&gt;     if posX = 30 and posY = 4.  estado-P3 = 'o'.    endif.&lt;br /&gt;     if posX = 10 and posY = 6.  estado-P4 = 'o'.    endif.&lt;br /&gt;     if posX = 20 and posY = 6.  estado-P5 = 'o'.    endif.&lt;br /&gt;     if posX = 30 and posY = 6.  estado-P6 = 'o'.    endif.&lt;br /&gt;     if posX = 10 and posY = 8.  estado-P7 = 'o'.    endif.&lt;br /&gt;     if posX = 20 and posY = 8.  estado-P8 = 'o'.    endif.&lt;br /&gt;     if posX = 30 and posY = 8.  estado-P9 = 'o'.    endif.&lt;br /&gt;     perform verificarGanador.&lt;br /&gt;     if ganoJugador NE 1.&lt;br /&gt;              perform elegirAccionMaquina.&lt;br /&gt;     endif.&lt;br /&gt;     perform mostrarEstado. &lt;br /&gt; &lt;br /&gt;&lt;span style="color:#339999;"&gt;* SUBPROGRAMAS ------------------------------------&lt;/span&gt; &lt;br /&gt;form elegirAccionMaquina.&lt;br /&gt;        perform generarAleatorioLibre.&lt;br /&gt;        if aleatorio = 1.   estado-P1 = 'X'.  endif.&lt;br /&gt;        if aleatorio = 2.   estado-P2 = 'X'.  endif.&lt;br /&gt;        if aleatorio = 3.   estado-P3 = 'X'.  endif.&lt;br /&gt;        if aleatorio = 4.   estado-P4 = 'X'.  endif.&lt;br /&gt;        if aleatorio = 5.   estado-P5 = 'X'.  endif.&lt;br /&gt;        if aleatorio = 6.   estado-P6 = 'X'.  endif.&lt;br /&gt;        if aleatorio = 7.   estado-P7 = 'X'.  endif.&lt;br /&gt;        if aleatorio = 8.   estado-P8 = 'X'.  endif.&lt;br /&gt;        if aleatorio = 9.   estado-P9 = 'X'.  endif.&lt;br /&gt;endform.&lt;br /&gt;&lt;br /&gt;form mostrarEstado.&lt;br /&gt;       write: /, /, /.&lt;br /&gt;       write at 11(1): estado-P1.  write at 21(1): estado-P2.  write at 31(1): estado-P3.  write: /.&lt;br /&gt;       write at 11(1): estado-P4.  write at 21(1): estado-P5.  write at 31(1): estado-P6.  write: /.&lt;br /&gt;       write at 11(1): estado-P7.  write at 21(1): estado-P8.  write at 31(1): estado-P9.&lt;br /&gt;endform.&lt;br /&gt;&lt;br /&gt;form generarAleatorioLibre.&lt;br /&gt;      CALL FUNCTION 'QF05_RANDOM_INTEGER'&lt;br /&gt;              EXPORTING&lt;br /&gt;                        RAN_INT_MIN = 1&lt;br /&gt;                        RAN_INT_MAX = 9&lt;br /&gt;              IMPORTING&lt;br /&gt;                        RAN_INT = aleatorio&lt;br /&gt;              EXCEPTIONS&lt;br /&gt;                        OTHERS   = 1.&lt;br /&gt;      if aleatorio = 1 and estado-P1 NE '-'. perform generarAleatorioLibre.   endif.&lt;br /&gt;         if aleatorio = 2 and estado-P2 NE '-'. perform generarAleatorioLibre.   endif.&lt;br /&gt;         if aleatorio = 3 and estado-P3 NE '-'. perform generarAleatorioLibre.   endif.&lt;br /&gt;         if aleatorio = 4 and estado-P4 NE '-'. perform generarAleatorioLibre.   endif.&lt;br /&gt;         if aleatorio = 5 and estado-P5 NE '-'. perform generarAleatorioLibre.   endif.&lt;br /&gt;         if aleatorio = 6 and estado-P6 NE '-'. perform generarAleatorioLibre.   endif.&lt;br /&gt;         if aleatorio = 7 and estado-P7 NE '-'. perform generarAleatorioLibre.   endif.&lt;br /&gt;         if aleatorio = 8 and estado-P8 NE '-'. perform generarAleatorioLibre.   endif.&lt;br /&gt;         if aleatorio = 9 and estado-P9 NE '-'. perform generarAleatorioLibre.   endif.&lt;br /&gt;endform.&lt;br /&gt;&lt;br /&gt;form verificarGanador.&lt;br /&gt;       if estado-P1 = 'X' and estado-P2 = 'X' and estado-P3 = 'X'.  ganoMaquina = 1.  endif.&lt;br /&gt;       if estado-P4 = 'X' and estado-P5 = 'X' and estado-P6 = 'X'.  ganoMaquina = 1.  endif.&lt;br /&gt;       if estado-P7 = 'X' and estado-P8 = 'X' and estado-P9 = 'X'.  ganoMaquina = 1.  endif.&lt;br /&gt;       if estado-P1 = 'X' and estado-P4 = 'X' and estado-P7 = 'X'.  ganoMaquina = 1.  endif.&lt;br /&gt;       if estado-P2 = 'X' and estado-P5 = 'X' and estado-P8 = 'X'.  ganoMaquina = 1.  endif.&lt;br /&gt;       if estado-P3 = 'X' and estado-P6 = 'X' and estado-P9 = 'X'.  ganoMaquina = 1.  endif.&lt;br /&gt;       if estado-P3 = 'X' and estado-P5 = 'X' and estado-P7 = 'X'.  ganoMaquina = 1.  endif.&lt;br /&gt;       if estado-P1 = 'X' and estado-P5 = 'X' and estado-P9 = 'X'.  ganoMaquina = 1.  endif.&lt;br /&gt;       if estado-P1 = 'o' and estado-P2 = 'o' and estado-P3 = 'o'.  ganoJugador = 1.  endif.&lt;br /&gt;       if estado-P4 = 'o' and estado-P5 = 'o' and estado-P6 = 'o'.  ganoJugador = 1.  endif.&lt;br /&gt;       if estado-P7 = 'o' and estado-P8 = 'o' and estado-P9 = 'o'.  ganoJugador = 1.  endif.&lt;br /&gt;       if estado-P1 = 'o' and estado-P4 = 'o' and estado-P7 = 'o'.  ganoJugador = 1.  endif.&lt;br /&gt;       if estado-P2 = 'o' and estado-P5 = 'o' and estado-P8 = 'o'.  ganoJugador = 1.  endif.&lt;br /&gt;       if estado-P3 = 'o' and estado-P6 = 'o' and estado-P9 = 'o'.  ganoJugador = 1.  endif.&lt;br /&gt;       if estado-P3 = 'o' and estado-P5 = 'o' and estado-P7 = 'o'.  ganoJugador = 1.  endif.&lt;br /&gt;       if estado-P1 = 'o' and estado-P5 = 'o' and estado-P9 = 'o'.  ganoJugador = 1.  endif.  &lt;br /&gt;      if ganoMaquina = 1.         Write 'Te gané'.&lt;br /&gt;       elseif ganoJugador = 1.     Write 'Ganaste'.&lt;br /&gt;       endif.&lt;br /&gt;endform.&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;Podríamos cambiar el mundo...
pero Dios no nos daria el código fuente.&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4730412993282588645-5907109488612179737?l=carlosagreda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://carlosagreda.blogspot.com/feeds/5907109488612179737/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=4730412993282588645&amp;postID=5907109488612179737' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4730412993282588645/posts/default/5907109488612179737'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4730412993282588645/posts/default/5907109488612179737'/><link rel='alternate' type='text/html' href='http://carlosagreda.blogspot.com/2008/02/tres-en-raya-para-abap.html' title='Tres en raya para ABAP'/><author><name>Carlos Agreda</name><uri>http://www.blogger.com/profile/04557577110714581339</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09672903207654664222'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4730412993282588645.post-198394199655489572</id><published>2008-02-06T12:23:00.000-08:00</published><updated>2008-02-14T09:13:01.578-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ABAP'/><title type='text'>Capturar la posición de un doble clic en un Report ABAP/4</title><content type='html'>Estuve implementando un tres en raya en &lt;strong&gt;ABAP&lt;/strong&gt; -para refrescar ABAP y aprovechando que no hay proyectos- y para recibir las jugadas me fue necesario capturar la posición de un doble clic sobre el report.&lt;br /&gt;Es bien fácil tan solo utilizar el evento &lt;span&gt;AT LINE-SELECTION. (&lt;/span&gt;se invoca cuando das el doble clic)&lt;span&gt; &lt;/span&gt;&lt;span&gt;y la instrucción &lt;/span&gt;&lt;span&gt;GET CURSOR LINE posY OFFSET posX.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;Aqui  un ejemplo sencillo:&lt;/span&gt;&lt;br /&gt;&lt;hr /&gt;&lt;span style="color:#339999;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;*&amp;amp; Autor.........: Carlos Agreda&lt;br /&gt;*&amp;amp; Descripción...: Captura la posición del doble&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;*&amp;amp; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;clic y la &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;escribe en pantalla&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;        &lt;br /&gt;*&amp;amp; Fecha  ........: 06/FEB/2008&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#000099;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;REPORT  ZEJEMPLO.&lt;br /&gt;DATA : posX type i, posY type i.&lt;br /&gt;write 'hola'.&lt;br /&gt;&lt;br /&gt;AT LINE-SELECTION.&lt;br /&gt;GET CURSOR LINE posY OFFSET posX.&lt;br /&gt;write: posX, posY.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;hr /&gt;La restricción es que nomás se podrán dar clics sobre la superficie escrita, en éste caso solo se podrá dar doble clic sobre "hola".&lt;br /&gt;&lt;br /&gt;Prometo postear el fuente del tres en raya ni bien lo termine :P&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;Podríamos cambiar el mundo...
pero Dios no nos daria el código fuente.&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4730412993282588645-198394199655489572?l=carlosagreda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://carlosagreda.blogspot.com/feeds/198394199655489572/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=4730412993282588645&amp;postID=198394199655489572' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4730412993282588645/posts/default/198394199655489572'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4730412993282588645/posts/default/198394199655489572'/><link rel='alternate' type='text/html' href='http://carlosagreda.blogspot.com/2008/02/capturar-la-posicin-de-un-doble-clic-en.html' title='Capturar la posición de un doble clic en un Report ABAP/4'/><author><name>Carlos Agreda</name><uri>http://www.blogger.com/profile/04557577110714581339</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09672903207654664222'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4730412993282588645.post-8113508413199272538</id><published>2008-02-06T07:39:00.000-08:00</published><updated>2008-02-16T03:42:39.538-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tratamiento Imagenes'/><category scheme='http://www.blogger.com/atom/ns#' term='Computación Grafica'/><category scheme='http://www.blogger.com/atom/ns#' term='Computer Science'/><title type='text'>Destripando un BMP (24 bits)</title><content type='html'>&lt;span&gt;&lt;span&gt;Existe una gran variedad de formatos de imágenes tal como BMP, TIFF, GIF, PNG, JPEG, etc. El más sencillo de todos es el formato BMP de 24 bits.&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;strong&gt;&lt;span&gt;Características:&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;No es comprimido (Una desventaja con respecto a espacio pero ventaja por su simplicidad)&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;Por no ser comprimido es de alta calidad&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;Se puede ver en cualquier visor de imágenes por ser el mas básico.&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;Veamos que hay dentro...&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;img id="BLOGGER_PHOTO_ID_5163892889562219826" alt="" src="http://2.bp.blogspot.com/_xd7iXaoorZs/R6nVOTyFhTI/AAAAAAAACOk/oLNNOfJosbU/s320/radiografia.jpg" border="0" /&gt;&lt;span&gt; &lt;/span&gt;&lt;img id="BLOGGER_PHOTO_ID_5163893095720650050" alt="" src="http://2.bp.blogspot.com/_xd7iXaoorZs/R6nVaTyFhUI/AAAAAAAACOs/YFDuGsG9ug4/s320/Imagen.jpg" border="0" /&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;Los Primeros 54 Bytes contienen los metadatos de nuestra imagen y su estructura es la siguiente:&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;2 bytes - contienen siempre 'BM', para poder identificar que es un bmp&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;4 bytes - tamaño del archivo (en bytes)&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;4 bytes - Reservados, contienen ceros (reservados para usos futuros)&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;4 bytes - offset, distancia entre cabecera y píxels (no lo usaremos)&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;4 bytes - Tamaño de Metadatos (tamaño de esta estructura = 40)&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;4 bytes - Ancho (numero de píxeles horizontales)&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;4 bytes - Alto (numero de pixeles verticales)&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;2 bytes - Numero de planos de color (No lo usaremos, valdrá 1)&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;2 bytes - Profundidad de color (debe ser 24 para nuestro caso)&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;4 bytes - Tipo de compresión (valdrá 0, ya que es descomprimido)&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;4 bytes - Tamaño de la estructura Imagen&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;4 bytes - Píxeles por metro horizontal (No lo usaremos)&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;4 bytes - Píxeles por metro vertical (No lo usaremos)&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;4 bytes - Cantidad de colores usados (No lo usaremos)&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;4 bytes - Cantidad de colores importantes (Tampoco usaremos)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;Suman 54 bytes, y son los primeros 54 bytes que debemos leer de nuestro archivo.&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;Podemos leerlo uno a uno pero lo mejor es crear una estructura y leerlos todo de un solo paso.&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;strong&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;Ejemplo de Estuctura para Visual Basic:&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;Public Type tipoMetadatosBMP&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;        B As Byte&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;        M As Byte&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;        tamaño As Long&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;        reservado As Long&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;        offset As Long&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;        tamañoMetadatosB&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;        ancho As Long&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;        alto As Long&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;        planos As Integer&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;        profundidadColor As Integer&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;        tipoCompresion As Long&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;        tamañoEstructuraImagen As Long&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;        pixelsPorMetroH As Long&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;        pixelsPorMetroV As Long&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;        cantidadColoresUsados As Long&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;        cantidadColoresImportantes As Long&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt; End Type&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;strong&gt;&lt;span&gt;&lt;span&gt;Ejemplo de estructura para C++:&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;struct tipoMetadatosBMP&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;{      char bm[2];&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;       int tamano;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;       int reservado;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;       int offset;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;       int tamanoMetadatos;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;       int alto;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;       int ancho;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;       short numeroPlanos;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;       short profundidadColor;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;       int tipoCompresion;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;       int tamanoEstructura;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;       int pxmh;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;       int pxmv;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;       int coloresUsados;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;       int coloresImportantes;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt; } ;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;No debe variar mucho de lenguaje en lenguaje.&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;Inmediatamente después de Nuestra cabecera (metadatos), vienen los píxeles (si, esos cuadraditos de colores que conforman nuestra imagen)&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;Cada Píxel se almacena en 24 bits (3 bytes)&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;De los 24 bits = 3 bytes, se utilizan 1 byte por cada color básico es decir...&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;Un byte parta R, Un byte para G, Un byte para B&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;NO, no son los colores rastas :P, son los colores básicos para el BMP, cada color puede ser obtenido mediante una combinacion de R (red), G (green) y B (blue).&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;Considerando que un byte puede almacenar 256 valores diferentes, tenemos:&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;256 (R) x 256 (G) x 256 colores (B) = 16777216 Colores RGB&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;Por alguna razón que desconozco al momento de diseñar el formato los ordenaron BGR y no RGB es decir primero el byte para azul, luego el byte para verde y luego el byte para verde.&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;strong&gt;&lt;blockquote&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;strong&gt;&lt;span&gt;Importante!!! :&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;Además despues de cada fila de pixels (barrido horizontal), si el ancho de&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;la imagen no es multiplo de 4, se rellena la linea con [ancho mod 4] bytes que&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;contienen 0.&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;Por ejemplo si la imagen tuviera 42 pixeles de ancho, se&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;rellenaria 2 bytes (el resto de 42/4) al final de cada fila de&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;pixeles.&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;strong&gt;&lt;span&gt; &lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;Ahora ya que al leer los metadatos obtuvimos la resolución (Sí, la RESOLUCIÓN, o sea los píxeles horizontales x verticales)&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;Recuerdas?&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;...&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;ancho As Long&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;alto As Long&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;...&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;ahora podemos leer cada uno de los píxeles de la siguiente manera:&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;strong&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;Codigo de ejemplo para leer una imagen en Visual Basic.&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;strong&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;Dim meta As tipoMetadatosBMP&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;Dim i As Long, j As Long, k as Integer, resto as Integer&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;Dim pixelAux As tipoPixel&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;Dim relleno as Byte&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;Open nombreBMP For Binary As #1&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;Get #1, , meta&lt;span&gt; ' Leemos los metadatos&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;resto = meta.ancho mod 4 &lt;span&gt;'calculamos el resto&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;For i = 1 To meta.alto&lt;span&gt; 'Recorremos las filas&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;     For j = 1 To meta.ancho &lt;span&gt;'Recorremos las columnas&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;           Get #1, , pixelAux &lt;span&gt;'leemos el pixel ...&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;     Next&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;     For k = 1 To resto&lt;span&gt; 'leemos los pixels de relleno&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;           Get #1, , relleno&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;     Next&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;Next&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;Close #1&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;strong&gt;&lt;span&gt;Asumimos que tenemos declarado el tipo:&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;Public Type tipoPixel&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;     b As Byte&lt;span&gt; ' Azul&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;     g As Byte&lt;span&gt; ' verde&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;     r As Byte &lt;span&gt;' rojo&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;End Type&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;strong&gt;&lt;span&gt;&lt;span&gt;Codigo de ejemplo para leer una imagen en C++&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;archivo.Open("imagen.bmp",CFile::modeCreateCFile::modeNoTruncateCFile::modeRead);&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;//cargamos los metadatos -----------------------------------&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;archivo.Read(&amp;amp;bm,2);&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;archivo.Read(&amp;amp;tamano,sizeof(tamano));&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;archivo.Read(&amp;amp;reservado,sizeof(reservado));&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;archivo.Read(&amp;amp;offset,sizeof(offset));&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;archivo.Read(&amp;amp;tamanoMetadatos,sizeof(tamanoMetadatos));&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;archivo.Read(&amp;amp;ancho,sizeof(ancho));&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;archivo.Read(&amp;amp;alto,sizeof(alto));&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;archivo.Read(&amp;amp;numeroPlanos,sizeof(numeroPlanos));&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;archivo.Read(&amp;amp;profundidadColor,sizeof(profundidadColor));&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;archivo.Read(&amp;amp;tipoCompresion,sizeof(tipoCompresion));&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;archivo.Read(&amp;amp;tamanoEstructura,sizeof(tamanoEstructura));&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;archivo.Read(&amp;amp;pxmh,sizeof(pxmh));&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;archivo.Read(&amp;amp;pxmv,sizeof(pxmv));&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;archivo.Read(&amp;amp;coloresUsados,sizeof(coloresUsados));&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;archivo.Read(&amp;amp;coloresImportantes,sizeof(coloresImportantes));&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;//----------------------------------------------------------&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;//Luego leemos los pixeles ---------------------------------&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;int resto = metadata.ancho % 4;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;for (i=1;i&lt;=metadata.alto;i++) &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;  {      for (j=1;j&lt;=metadata.ancho;j++) &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;           {    archivo.Read(&amp;amp;varB,1); &lt;span&gt;//leemos el byte azul en la variable varB&lt;/span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;                  archivo.Read(&amp;amp;varG,1); &lt;span&gt;//leemos el byte azul en la variable varB&lt;/span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;                  archivo.Read(&amp;amp;varR,1); &lt;span&gt;//leemos el byte azul en la variable varB&lt;/span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;           }&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;           for (k=1;k&lt;=resto;k++) &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;                  archivo.Read(&amp;amp;var,1); &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;//leemos los pixels de relleno&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;  } &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;archivo.Close(); &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;//----------------------------------------------------------&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;strong&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;El código es muy similar para cualquier otro lenguaje.&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;Espero les haya servido.&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;Comentarios y sugerencias a: carlosagreda-at-gmail.com&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;Podríamos cambiar el mundo...
pero Dios no nos daria el código fuente.&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4730412993282588645-8113508413199272538?l=carlosagreda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://carlosagreda.blogspot.com/feeds/8113508413199272538/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=4730412993282588645&amp;postID=8113508413199272538' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4730412993282588645/posts/default/8113508413199272538'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4730412993282588645/posts/default/8113508413199272538'/><link rel='alternate' type='text/html' href='http://carlosagreda.blogspot.com/2008/02/destripando-un-bmp-24-bits.html' title='Destripando un BMP (24 bits)'/><author><name>Carlos Agreda</name><uri>http://www.blogger.com/profile/04557577110714581339</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09672903207654664222'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_xd7iXaoorZs/R6nVOTyFhTI/AAAAAAAACOk/oLNNOfJosbU/s72-c/radiografia.jpg' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4730412993282588645.post-7729890599968875949</id><published>2008-02-05T17:58:00.000-08:00</published><updated>2008-02-14T09:13:57.762-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Noticias GeeK'/><title type='text'>Un Mecánico de Máquinas de turing!!!</title><content type='html'>Hace tiempo que necesitaba un espacio para poder publicar curiosidades, programas,  bytes sueltos que uno siempre tiene en el cerebro y es necesario volcarlos antes que la muerte se los lleve conmigo :P, asi que bienvenidos al Mecánico de Máquinas de Turing.&lt;div class="blogger-post-footer"&gt;Podríamos cambiar el mundo...
pero Dios no nos daria el código fuente.&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4730412993282588645-7729890599968875949?l=carlosagreda.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://carlosagreda.blogspot.com/feeds/7729890599968875949/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=4730412993282588645&amp;postID=7729890599968875949' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4730412993282588645/posts/default/7729890599968875949'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4730412993282588645/posts/default/7729890599968875949'/><link rel='alternate' type='text/html' href='http://carlosagreda.blogspot.com/2008/02/bienvenido-un-mecanico-de-maquinas-de.html' title='Un Mecánico de Máquinas de turing!!!'/><author><name>Carlos Agreda</name><uri>http://www.blogger.com/profile/04557577110714581339</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09672903207654664222'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry></feed>