<?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' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-13698376</id><updated>2012-01-30T13:33:19.652-08:00</updated><category term='C#'/><category term='GAMES'/><category term='Community Day'/><category term='JavaME'/><category term='PHP'/><category term='Python'/><category term='SAP'/><category term='SDN'/><category term='Ruby'/><category term='ABAP'/><category term='AIR'/><category term='SAPHANA'/><category term='TECHED_2007'/><category term='Rails'/><category term='Misc'/><category term='BlackBerry'/><category term='FLEX'/><category term='Java'/><category term='Non_Sense'/><category term='TechEd_2009'/><category term='R'/><title type='text'>El blog tecnológico de Blag.</title><subtitle type='html'>Blog sobre Lenguajes Script, Tecnología y SAP.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://atejada.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://atejada.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default?start-index=101&amp;max-results=100'/><author><name>Alvaro "Blag" Tejada Galindo</name><uri>http://www.blogger.com/profile/12061593528820409779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='https://weblogs.sdn.sap.com/images/people/alvaro_tajeda.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>269</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-13698376.post-2279253580174064218</id><published>2012-01-18T04:46:00.000-08:00</published><updated>2012-01-18T04:55:34.237-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>Blag's Word Clock</title><content type='html'>&lt;DIV ALIGN="JUSTIFY"&gt;&lt;br /&gt;Sabes lo que es un &lt;a href="http://www.dougswordclock.com/"&gt;Word Clock&lt;/a&gt;? Bueno, es basicamente un reloj que te da la hora utilizando palabras en vez de numeros.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-Tga4EXKY5SE/TxayOG9KjmI/AAAAAAAABsk/SsNzwoh-hwA/s1600/Blag_Word_Clock_000.jpeg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 393px; height: 400px;" src="http://3.bp.blogspot.com/-Tga4EXKY5SE/TxayOG9KjmI/AAAAAAAABsk/SsNzwoh-hwA/s400/Blag_Word_Clock_000.jpeg" border="0" alt=""id="BLOGGER_PHOTO_ID_5698938333939011170" /&gt;&lt;/a&gt;&lt;br /&gt;La primera vez que vi uno...sabia que queria comprarlo, pero luego pense y me dije a mi mismo..."Hey! Soy un programador...porque comprar uno cuando yo puedo hacerlo?" Ademas...me di cuenta de que la mayoria de los Word Clocks no te dan la hora exacta, como pueden ver en la imagen...asi que decidi arreglar eso -:)&lt;br /&gt;&lt;br /&gt;El siguiente paso era decidir que lenguaje de programacion utilizar...necesitaba una buena interface grafica asi que ABAP y R estaban totalmente descontados...no estaba buscado hacer una version web, asi que PHP fue descartado tambien...asi que mi siguiente opcion fue un lenguaje que me encanta y que no quiero olvidarme tan rapidamente -;) Asi que elegi Python y wxPython para hacerlo funcionar -:) Desde luego...estoy lejos de ser un experto en Python, asi que estoy seguro de que mi codigo podria ser un poco mas corto -:P&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-I5Hb76S3CUM/Txa5VL4e7HI/AAAAAAAABsw/p4kojOie0q8/s1600/Blag_Word_Clock_001.jpeg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 334px; height: 291px;" src="http://3.bp.blogspot.com/-I5Hb76S3CUM/Txa5VL4e7HI/AAAAAAAABsw/p4kojOie0q8/s400/Blag_Word_Clock_001.jpeg" border="0" alt=""id="BLOGGER_PHOTO_ID_5698946152102030450" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/-t4tmoS6-cwc/Txa5eQ_wK_I/AAAAAAAABs8/8ZaIIzuW7Cg/s1600/Blag_Word_Clock_002.jpeg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 331px; height: 290px;" src="http://2.bp.blogspot.com/-t4tmoS6-cwc/Txa5eQ_wK_I/AAAAAAAABs8/8ZaIIzuW7Cg/s400/Blag_Word_Clock_002.jpeg" border="0" alt=""id="BLOGGER_PHOTO_ID_5698946308093520882" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 95%;"&gt;&lt;br /&gt;#Blag's Word Clock&lt;br /&gt;#Alvaro "Blag" Tejada Galindo&lt;br /&gt;#17/01/2012&lt;br /&gt;import wx&lt;br /&gt;import time&lt;br /&gt;import datetime&lt;br /&gt;&lt;br /&gt;class MyApp(wx.App):&lt;br /&gt;    def OnInit(self):&lt;br /&gt;        self.frame = MyFrame(None, title="Blag's Word Clock")&lt;br /&gt;        self.SetTopWindow(self.frame)&lt;br /&gt;        self.frame.Show()&lt;br /&gt;        return True&lt;br /&gt;&lt;br /&gt;class MyFrame(wx.Frame):&lt;br /&gt;    def __init__(self, parent, id=wx.ID_ANY, title="",&lt;br /&gt;                 pos=wx.DefaultPosition, size=(330, 260),&lt;br /&gt;                 style=wx.DEFAULT_FRAME_STYLE ^ wx.RESIZE_BORDER,&lt;br /&gt;                 name="MyFrame"):&lt;br /&gt;        super(MyFrame, self).__init__(parent, id, title, pos,size, style, name)&lt;br /&gt;        self.timer = wx.Timer(self)&lt;br /&gt;        self.Bind(wx.EVT_TIMER, self.update, self.timer)&lt;br /&gt;        self.timer.Start(1000)&lt;br /&gt;        self.SetBackgroundColour("Black")&lt;br /&gt;        text_font = wx.Font(15, wx.SWISS, wx.NORMAL, wx.NORMAL, False, u'Arial')&lt;br /&gt;        self.label_it=wx.StaticText(self,1,"IT",wx.Point(10,10))&lt;br /&gt;        self.label_it.SetForegroundColour("yellow")&lt;br /&gt;        self.label_it.SetFont(text_font)&lt;br /&gt;        self.label_is=wx.StaticText(self,1,"IS",wx.Point(35,10))&lt;br /&gt;        self.label_is.SetForegroundColour("yellow")&lt;br /&gt;        self.label_is.SetFont(text_font)&lt;br /&gt;        self.label_half=wx.StaticText(self,1,"HALF",wx.Point(60,10))&lt;br /&gt;        self.label_half.SetForegroundColour("gray")&lt;br /&gt;        self.label_half.SetFont(text_font)&lt;br /&gt;        self.label_twenty=wx.StaticText(self,1,"TWENTY",wx.Point(120,10))&lt;br /&gt;        self.label_twenty.SetForegroundColour("gray")&lt;br /&gt;        self.label_twenty.SetFont(text_font)&lt;br /&gt;        self.label_quarter=wx.StaticText(self,1,"QUARTER",wx.Point(215,10))&lt;br /&gt;        self.label_quarter.SetForegroundColour("gray")&lt;br /&gt;        self.label_quarter.SetFont(text_font)&lt;br /&gt;                &lt;br /&gt;        self.label_ten=wx.StaticText(self,1,"TEN",wx.Point(10,40))&lt;br /&gt;        self.label_ten.SetForegroundColour("gray")&lt;br /&gt;        self.label_ten.SetFont(text_font)&lt;br /&gt;        self.label_to=wx.StaticText(self,1,"TO",wx.Point(75,40))&lt;br /&gt;        self.label_to.SetForegroundColour("gray")&lt;br /&gt;        self.label_to.SetFont(text_font)&lt;br /&gt;        self.label_one=wx.StaticText(self,1,"ONE",wx.Point(120,40))&lt;br /&gt;        self.label_one.SetForegroundColour("gray")&lt;br /&gt;        self.label_one.SetFont(text_font)&lt;br /&gt;        self.label_two=wx.StaticText(self,1,"TWO",wx.Point(180,40))&lt;br /&gt;        self.label_two.SetForegroundColour("gray")&lt;br /&gt;        self.label_two.SetFont(text_font)&lt;br /&gt;        self.label_three=wx.StaticText(self,1,"THREE",wx.Point(245,40))&lt;br /&gt;        self.label_three.SetForegroundColour("gray")&lt;br /&gt;        self.label_three.SetFont(text_font)&lt;br /&gt;                &lt;br /&gt;        self.label_four=wx.StaticText(self,1,"FOUR",wx.Point(10,70))&lt;br /&gt;        self.label_four.SetForegroundColour("gray")&lt;br /&gt;        self.label_four.SetFont(text_font)&lt;br /&gt;        self.label_five=wx.StaticText(self,1,"FIVE",wx.Point(75,70))&lt;br /&gt;        self.label_five.SetForegroundColour("gray")&lt;br /&gt;        self.label_five.SetFont(text_font)&lt;br /&gt;        self.label_six=wx.StaticText(self,1,"SIX",wx.Point(125,70))&lt;br /&gt;        self.label_six.SetForegroundColour("gray")&lt;br /&gt;        self.label_six.SetFont(text_font)&lt;br /&gt;        self.label_seven=wx.StaticText(self,1,"SEVEN",wx.Point(170,70))&lt;br /&gt;        self.label_seven.SetForegroundColour("gray")&lt;br /&gt;        self.label_seven.SetFont(text_font)&lt;br /&gt;        self.label_eight=wx.StaticText(self,1,"EIGHT",wx.Point(250,70))&lt;br /&gt;        self.label_eight.SetForegroundColour("gray")&lt;br /&gt;        self.label_eight.SetFont(text_font)&lt;br /&gt;                &lt;br /&gt;        self.label_nine=wx.StaticText(self,1,"NINE",wx.Point(10,100))&lt;br /&gt;        self.label_nine.SetForegroundColour("gray")&lt;br /&gt;        self.label_nine.SetFont(text_font)&lt;br /&gt;        self.label_eleven=wx.StaticText(self,1,"ELEVEN",wx.Point(110,100))&lt;br /&gt;        self.label_eleven.SetForegroundColour("gray")&lt;br /&gt;        self.label_eleven.SetFont(text_font)&lt;br /&gt;        self.label_twelve=wx.StaticText(self,1,"TWELVE",wx.Point(230,100))&lt;br /&gt;        self.label_twelve.SetForegroundColour("gray")&lt;br /&gt;        self.label_twelve.SetFont(text_font)&lt;br /&gt;                &lt;br /&gt;        self.label_minutes=wx.StaticText(self,1,"MINUTES",wx.Point(10,130))&lt;br /&gt;        self.label_minutes.SetForegroundColour("gray")&lt;br /&gt;        self.label_minutes.SetFont(text_font)&lt;br /&gt;        self.label_past=wx.StaticText(self,1,"PAST",wx.Point(115,130))&lt;br /&gt;        self.label_past.SetForegroundColour("gray")&lt;br /&gt;        self.label_past.SetFont(text_font)&lt;br /&gt;        self.label_to_x=wx.StaticText(self,1,"TO",wx.Point(180,130))&lt;br /&gt;        self.label_to_x.SetForegroundColour("gray")&lt;br /&gt;        self.label_to_x.SetFont(text_font)&lt;br /&gt;        self.label_one_x=wx.StaticText(self,1,"ONE",wx.Point(215,130))&lt;br /&gt;        self.label_one_x.SetForegroundColour("gray")&lt;br /&gt;        self.label_one_x.SetFont(text_font)&lt;br /&gt;        self.label_two_x=wx.StaticText(self,1,"TWO",wx.Point(265,130))&lt;br /&gt;        self.label_two_x.SetForegroundColour("gray")&lt;br /&gt;        self.label_two_x.SetFont(text_font)&lt;br /&gt;                &lt;br /&gt;        self.label_three_x=wx.StaticText(self,1,"THREE",wx.Point(10,160))&lt;br /&gt;        self.label_three_x.SetForegroundColour("gray")&lt;br /&gt;        self.label_three_x.SetFont(text_font)&lt;br /&gt;        self.label_four_x=wx.StaticText(self,1,"FOUR",wx.Point(85,160))&lt;br /&gt;        self.label_four_x.SetForegroundColour("gray")&lt;br /&gt;        self.label_four_x.SetFont(text_font)&lt;br /&gt;        self.label_five_x=wx.StaticText(self,1,"FIVE",wx.Point(150,160))&lt;br /&gt;        self.label_five_x.SetForegroundColour("gray")&lt;br /&gt;        self.label_five_x.SetFont(text_font)&lt;br /&gt;        self.label_six_x=wx.StaticText(self,1,"SIX",wx.Point(205,160))&lt;br /&gt;        self.label_six_x.SetForegroundColour("gray")&lt;br /&gt;        self.label_six_x.SetFont(text_font)&lt;br /&gt;        self.label_seven_x=wx.StaticText(self,1,"SEVEN",wx.Point(245,160))&lt;br /&gt;        self.label_seven_x.SetForegroundColour("gray")&lt;br /&gt;        self.label_seven_x.SetFont(text_font)&lt;br /&gt;                &lt;br /&gt;        self.label_eight_x=wx.StaticText(self,1,"EIGHT",wx.Point(10,190))&lt;br /&gt;        self.label_eight_x.SetForegroundColour("gray")&lt;br /&gt;        self.label_eight_x.SetFont(text_font)&lt;br /&gt;        self.label_nine_x=wx.StaticText(self,1,"NINE",wx.Point(95,190))&lt;br /&gt;        self.label_nine_x.SetForegroundColour("gray")&lt;br /&gt;        self.label_nine_x.SetFont(text_font)&lt;br /&gt;        self.label_ten_x=wx.StaticText(self,1,"TEN",wx.Point(165,190))&lt;br /&gt;        self.label_ten_x.SetForegroundColour("gray")&lt;br /&gt;        self.label_ten_x.SetFont(text_font)&lt;br /&gt;        self.label_eleven_x=wx.StaticText(self,1,"ELEVEN",wx.Point(235,190))&lt;br /&gt;        self.label_eleven_x.SetForegroundColour("gray")&lt;br /&gt;        self.label_eleven_x.SetFont(text_font)&lt;br /&gt;                &lt;br /&gt;        self.label_twelve_x=wx.StaticText(self,1,"TWELVE",wx.Point(10,220))&lt;br /&gt;        self.label_twelve_x.SetForegroundColour("gray")&lt;br /&gt;        self.label_twelve_x.SetFont(text_font)&lt;br /&gt;        self.label_oclock=wx.StaticText(self,1,"O'CLOCK",wx.Point(125,220))&lt;br /&gt;        self.label_oclock.SetForegroundColour("gray")&lt;br /&gt;        self.label_oclock.SetFont(text_font)&lt;br /&gt;        self.label_am=wx.StaticText(self,1,"AM",wx.Point(235,220))&lt;br /&gt;        self.label_am.SetForegroundColour("gray")&lt;br /&gt;        self.label_am.SetFont(text_font)&lt;br /&gt;        self.label_pm=wx.StaticText(self,1,"PM",wx.Point(283,220))&lt;br /&gt;        self.label_pm.SetForegroundColour("gray")&lt;br /&gt;        self.label_pm.SetFont(text_font)&lt;br /&gt;    &lt;br /&gt;    def reset_colours(self):&lt;br /&gt;        self.label_pm.SetForegroundColour("gray")&lt;br /&gt;        self.label_am.SetForegroundColour("gray")&lt;br /&gt;        self.label_oclock.SetForegroundColour("gray")&lt;br /&gt;        self.label_one.SetForegroundColour("gray")&lt;br /&gt;        self.label_two.SetForegroundColour("gray")&lt;br /&gt;        self.label_three.SetForegroundColour("gray")&lt;br /&gt;        self.label_four.SetForegroundColour("gray")&lt;br /&gt;        self.label_five.SetForegroundColour("gray")&lt;br /&gt;        self.label_six.SetForegroundColour("gray")&lt;br /&gt;        self.label_seven.SetForegroundColour("gray")&lt;br /&gt;        self.label_eight.SetForegroundColour("gray")&lt;br /&gt;        self.label_nine.SetForegroundColour("gray")&lt;br /&gt;        self.label_one_x.SetForegroundColour("gray")&lt;br /&gt;        self.label_two_x.SetForegroundColour("gray")&lt;br /&gt;        self.label_three_x.SetForegroundColour("gray")&lt;br /&gt;        self.label_four_x.SetForegroundColour("gray")&lt;br /&gt;        self.label_five_x.SetForegroundColour("gray")&lt;br /&gt;        self.label_six_x.SetForegroundColour("gray")&lt;br /&gt;        self.label_seven_x.SetForegroundColour("gray")&lt;br /&gt;        self.label_eight_x.SetForegroundColour("gray")&lt;br /&gt;        self.label_nine_x.SetForegroundColour("gray")&lt;br /&gt;        self.label_half.SetForegroundColour("gray")&lt;br /&gt;        self.label_twenty.SetForegroundColour("gray")&lt;br /&gt;        self.label_quarter.SetForegroundColour("gray")&lt;br /&gt;        self.label_ten.SetForegroundColour("gray")&lt;br /&gt;        self.label_ten_x.SetForegroundColour("gray")&lt;br /&gt;        self.label_eleven.SetForegroundColour("gray")&lt;br /&gt;        self.label_eleven_x.SetForegroundColour("gray")&lt;br /&gt;        self.label_twelve.SetForegroundColour("gray")&lt;br /&gt;        self.label_twelve_x.SetForegroundColour("gray")&lt;br /&gt;&lt;br /&gt;    def hours(self,hour):&lt;br /&gt;        if hour == 12:&lt;br /&gt;            self.label_twelve.SetForegroundColour("yellow")&lt;br /&gt;        elif hour == 11:&lt;br /&gt;            self.label_eleven.SetForegroundColour("yellow")&lt;br /&gt;        elif hour == 10:&lt;br /&gt;            self.label_ten.SetForegroundColour("yellow")&lt;br /&gt;        elif hour == 9:&lt;br /&gt;            self.label_nine.SetForegroundColour("yellow")&lt;br /&gt;        elif hour == 8:&lt;br /&gt;            self.label_eight.SetForegroundColour("yellow")&lt;br /&gt;        elif hour == 7:&lt;br /&gt;            self.label_seven.SetForegroundColour("yellow")&lt;br /&gt;        elif hour == 6:&lt;br /&gt;            self.label_six.SetForegroundColour("yellow")&lt;br /&gt;        elif hour == 5:&lt;br /&gt;            self.label_five.SetForegroundColour("yellow")&lt;br /&gt;        elif hour == 4:&lt;br /&gt;            self.label_four.SetForegroundColour("yellow")&lt;br /&gt;        elif hour == 3:&lt;br /&gt;            self.label_three.SetForegroundColour("yellow")&lt;br /&gt;        elif hour == 2:&lt;br /&gt;            self.label_two.SetForegroundColour("yellow")&lt;br /&gt;        elif hour == 1:&lt;br /&gt;            self.label_one.SetForegroundColour("yellow")            &lt;br /&gt;&lt;br /&gt;    def minutes(self,reminder):&lt;br /&gt;        if reminder == 9:&lt;br /&gt;            self.label_nine.SetForegroundColour("yellow")&lt;br /&gt;        if reminder == 8:&lt;br /&gt;            self.label_eight.SetForegroundColour("yellow")&lt;br /&gt;        if reminder == 7:&lt;br /&gt;            self.label_seven.SetForegroundColour("yellow")&lt;br /&gt;        if reminder == 6:&lt;br /&gt;            self.label_six.SetForegroundColour("yellow")&lt;br /&gt;        if reminder == 5:&lt;br /&gt;            self.label_five.SetForegroundColour("yellow")&lt;br /&gt;        if reminder == 4:&lt;br /&gt;            self.label_four.SetForegroundColour("yellow")&lt;br /&gt;        if reminder == 3:&lt;br /&gt;            self.label_three.SetForegroundColour("yellow")&lt;br /&gt;        if reminder == 2:&lt;br /&gt;            self.label_two.SetForegroundColour("yellow")&lt;br /&gt;        if reminder == 1:&lt;br /&gt;            self.label_one.SetForegroundColour("yellow")&lt;br /&gt;&lt;br /&gt;    def update(self, event):        &lt;br /&gt;        self.reset_colours()&lt;br /&gt;        now=datetime.datetime.now()&lt;br /&gt;        hour = now.hour&lt;br /&gt;        minute = now.minute&lt;br /&gt;        if hour &gt;= 12 and minute != 0:&lt;br /&gt;            self.label_pm.SetForegroundColour("yellow")&lt;br /&gt;            hour = hour - 12&lt;br /&gt;        elif hour &lt; 12 and minute != 0:&lt;br /&gt;            self.label_am.SetForegroundColour("yellow")&lt;br /&gt;        elif minute == 0:&lt;br /&gt;            self.label_oclock.SetForegroundColour("yellow")&lt;br /&gt;            if hour &gt;= 12:&lt;br /&gt;                hour = hour - 12&lt;br /&gt;                self.hours(hour)&lt;br /&gt;            else:&lt;br /&gt;                self.hours(hour)&lt;br /&gt;&lt;br /&gt;        if minute &gt;= 1 and minute &lt;= 29:&lt;br /&gt;            self.label_minutes.SetForegroundColour("yellow")&lt;br /&gt;            self.label_past.SetForegroundColour("yellow")&lt;br /&gt;            if hour == 12:&lt;br /&gt;                self.label_twelve_x.SetForegroundColour("yellow")&lt;br /&gt;            elif hour == 11:&lt;br /&gt;                self.label_eleven_x.SetForegroundColour("yellow")&lt;br /&gt;            elif hour == 10:&lt;br /&gt;                self.label_ten_x.SetForegroundColour("yellow")&lt;br /&gt;            elif hour == 9:&lt;br /&gt;                self.label_nine_x.SetForegroundColour("yellow")&lt;br /&gt;            elif hour == 8:&lt;br /&gt;                self.label_eight_x.SetForegroundColour("yellow")&lt;br /&gt;            elif hour == 7:&lt;br /&gt;                self.label_seven_x.SetForegroundColour("yellow")&lt;br /&gt;            elif hour == 6:&lt;br /&gt;                self.label_six_x.SetForegroundColour("yellow")&lt;br /&gt;            elif hour == 5:&lt;br /&gt;                self.label_five_x.SetForegroundColour("yellow")&lt;br /&gt;            elif hour == 4:&lt;br /&gt;                self.label_four_x.SetForegroundColour("yellow")&lt;br /&gt;            elif hour == 3:&lt;br /&gt;                self.label_three_x.SetForegroundColour("yellow")&lt;br /&gt;            elif hour == 2:&lt;br /&gt;                self.label_two_x.SetForegroundColour("yellow")&lt;br /&gt;            elif hour == 1:&lt;br /&gt;                self.label_one_x.SetForegroundColour("yellow")&lt;br /&gt;            division = minute / 20&lt;br /&gt;            reminder = minute % 20                &lt;br /&gt;            if division == 1 and reminder == 0:&lt;br /&gt;                self.label_twenty.SetForegroundColour("yellow")&lt;br /&gt;            elif division == 1 and reminder != 0:&lt;br /&gt;                self.label_twenty.SetForegroundColour("yellow")&lt;br /&gt;                self.minutes(reminder)&lt;br /&gt;            division = minute / 10&lt;br /&gt;            reminder = minute % 10                &lt;br /&gt;            if division == 1 and reminder == 0:&lt;br /&gt;                self.label_ten.SetForegroundColour("yellow")&lt;br /&gt;            elif division == 1 and reminder != 0:&lt;br /&gt;                self.label_ten.SetForegroundColour("yellow")&lt;br /&gt;                if reminder == 9:&lt;br /&gt;                    self.label_nine.SetForegroundColour("yellow")&lt;br /&gt;                if reminder == 8:&lt;br /&gt;                    self.label_eight.SetForegroundColour("yellow")&lt;br /&gt;                if reminder == 7:&lt;br /&gt;                    self.label_seven.SetForegroundColour("yellow")&lt;br /&gt;                if reminder == 6:&lt;br /&gt;                    self.label_six.SetForegroundColour("yellow")&lt;br /&gt;                if reminder == 5:&lt;br /&gt;                    self.label_ten.SetForegroundColour("gray")&lt;br /&gt;                    self.label_quarter.SetForegroundColour("yellow")&lt;br /&gt;                if reminder == 4:&lt;br /&gt;                    self.label_four.SetForegroundColour("yellow")&lt;br /&gt;                if reminder == 3:&lt;br /&gt;                    self.label_three.SetForegroundColour("yellow")&lt;br /&gt;                if reminder == 2:&lt;br /&gt;                    self.label_ten.SetForegroundColour("gray")&lt;br /&gt;                    self.label_twelve.SetForegroundColour("yellow")&lt;br /&gt;                if reminder == 1:&lt;br /&gt;                    self.label_ten.SetForegroundColour("gray")&lt;br /&gt;                    self.label_eleven.SetForegroundColour("yellow")&lt;br /&gt;            elif division == 0 and reminder != 0:&lt;br /&gt;                if reminder == 9:&lt;br /&gt;                    self.label_nine.SetForegroundColour("yellow")&lt;br /&gt;                if reminder == 8:&lt;br /&gt;                    self.label_eight.SetForegroundColour("yellow")&lt;br /&gt;                if reminder == 7:&lt;br /&gt;                    self.label_seven.SetForegroundColour("yellow")&lt;br /&gt;                if reminder == 6:&lt;br /&gt;                    self.label_six.SetForegroundColour("yellow")&lt;br /&gt;                if reminder == 5:&lt;br /&gt;                    self.label_five.SetForegroundColour("yellow")&lt;br /&gt;                if reminder == 4:&lt;br /&gt;                    self.label_four.SetForegroundColour("yellow")&lt;br /&gt;                if reminder == 3:&lt;br /&gt;                    self.label_three.SetForegroundColour("yellow")&lt;br /&gt;                if reminder == 2:&lt;br /&gt;                    self.label_two.SetForegroundColour("yellow")&lt;br /&gt;                if reminder == 1:&lt;br /&gt;                    self.label_one.SetForegroundColour("yellow")&lt;br /&gt;                        &lt;br /&gt;        elif minute == 30:&lt;br /&gt;            self.hours(hour)&lt;br /&gt;            self.label_half.SetForegroundColour("yellow")&lt;br /&gt;            self.label_past.SetForegroundColour("yellow")&lt;br /&gt;&lt;br /&gt;        elif minute &gt;= 29 and minute &lt;= 59:&lt;br /&gt;            self.label_minutes.SetForegroundColour("yellow")&lt;br /&gt;            minute = 60 - minute&lt;br /&gt;            self.label_to_x.SetForegroundColour("yellow")&lt;br /&gt;            hour = hour + 1&lt;br /&gt;            if hour == 12:&lt;br /&gt;                self.label_twelve_x.SetForegroundColour("yellow")&lt;br /&gt;            elif hour == 11:&lt;br /&gt;                self.label_eleven_x.SetForegroundColour("yellow")&lt;br /&gt;            elif hour == 10:&lt;br /&gt;                self.label_ten_x.SetForegroundColour("yellow")&lt;br /&gt;            elif hour == 9:&lt;br /&gt;                self.label_nine_x.SetForegroundColour("yellow")&lt;br /&gt;            elif hour == 8:&lt;br /&gt;                self.label_eight_x.SetForegroundColour("yellow")&lt;br /&gt;            elif hour == 7:&lt;br /&gt;                self.label_seven_x.SetForegroundColour("yellow")&lt;br /&gt;            elif hour == 6:&lt;br /&gt;                self.label_six_x.SetForegroundColour("yellow")&lt;br /&gt;            elif hour == 5:&lt;br /&gt;                self.label_five_x.SetForegroundColour("yellow")&lt;br /&gt;            elif hour == 4:&lt;br /&gt;                self.label_four_x.SetForegroundColour("yellow")&lt;br /&gt;            elif hour == 3:&lt;br /&gt;                self.label_three_x.SetForegroundColour("yellow")&lt;br /&gt;            elif hour == 2:&lt;br /&gt;                self.label_two_x.SetForegroundColour("yellow")&lt;br /&gt;            elif hour == 1:&lt;br /&gt;                self.label_one_x.SetForegroundColour("yellow")&lt;br /&gt;            division = minute / 20&lt;br /&gt;            reminder = minute % 20                &lt;br /&gt;            if division == 1 and reminder == 0:&lt;br /&gt;                self.label_twenty.SetForegroundColour("yellow")&lt;br /&gt;            elif division == 1 and reminder != 0:&lt;br /&gt;                self.label_twenty.SetForegroundColour("yellow")&lt;br /&gt;                if reminder == 9:&lt;br /&gt;                    self.label_nine.SetForegroundColour("yellow")&lt;br /&gt;                if reminder == 8:&lt;br /&gt;                    self.label_eight.SetForegroundColour("yellow")&lt;br /&gt;                if reminder == 7:&lt;br /&gt;                    self.label_seven.SetForegroundColour("yellow")&lt;br /&gt;                if reminder == 6:&lt;br /&gt;                    self.label_six.SetForegroundColour("yellow")&lt;br /&gt;                if reminder == 5:&lt;br /&gt;                    self.label_five.SetForegroundColour("yellow")&lt;br /&gt;                if reminder == 4:&lt;br /&gt;                    self.label_four.SetForegroundColour("yellow")&lt;br /&gt;                if reminder == 3:&lt;br /&gt;                    self.label_three.SetForegroundColour("yellow")&lt;br /&gt;                if reminder == 2:&lt;br /&gt;                    self.label_two.SetForegroundColour("yellow")&lt;br /&gt;                if reminder == 1:&lt;br /&gt;                    self.label_one.SetForegroundColour("yellow")&lt;br /&gt;            division = minute / 10&lt;br /&gt;            reminder = minute % 10                &lt;br /&gt;            if division == 1 and reminder == 0:&lt;br /&gt;                self.label_ten.SetForegroundColour("yellow")&lt;br /&gt;            elif division == 1 and reminder != 0:&lt;br /&gt;                self.label_ten.SetForegroundColour("yellow")&lt;br /&gt;                if reminder == 9:&lt;br /&gt;                    self.label_nine.SetForegroundColour("yellow")&lt;br /&gt;                if reminder == 8:&lt;br /&gt;                    self.label_eight.SetForegroundColour("yellow")&lt;br /&gt;                if reminder == 7:&lt;br /&gt;                    self.label_seven.SetForegroundColour("yellow")&lt;br /&gt;                if reminder == 6:&lt;br /&gt;                    self.label_six.SetForegroundColour("yellow")&lt;br /&gt;                if reminder == 5:&lt;br /&gt;                    self.label_ten.SetForegroundColour("gray")&lt;br /&gt;                    self.label_quarter.SetForegroundColour("yellow")&lt;br /&gt;                if reminder == 4:&lt;br /&gt;                    self.label_four.SetForegroundColour("yellow")&lt;br /&gt;                if reminder == 3:&lt;br /&gt;                    self.label_three.SetForegroundColour("yellow")&lt;br /&gt;                if reminder == 2:&lt;br /&gt;                    self.label_ten.SetForegroundColour("gray")&lt;br /&gt;                    self.label_twelve.SetForegroundColour("yellow")&lt;br /&gt;                if reminder == 1:&lt;br /&gt;                    self.label_ten.SetForegroundColour("gray")&lt;br /&gt;                    self.label_eleven.SetForegroundColour("yellow")&lt;br /&gt;            elif division == 0 and reminder != 0:&lt;br /&gt;                self.minutes(reminder)    &lt;br /&gt;&lt;br /&gt;if __name__ == "__main__":&lt;br /&gt;    app = MyApp(False)&lt;br /&gt;    app.MainLoop() &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Saludos,&lt;br /&gt;&lt;br /&gt;Blag.&lt;br /&gt;&lt;/DIV&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13698376-2279253580174064218?l=atejada.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atejada.blogspot.com/feeds/2279253580174064218/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13698376&amp;postID=2279253580174064218' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/2279253580174064218'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/2279253580174064218'/><link rel='alternate' type='text/html' href='http://atejada.blogspot.com/2012/01/blags-word-clock.html' title='Blag&apos;s Word Clock'/><author><name>Alvaro "Blag" Tejada Galindo</name><uri>http://www.blogger.com/profile/12061593528820409779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='https://weblogs.sdn.sap.com/images/people/alvaro_tajeda.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-Tga4EXKY5SE/TxayOG9KjmI/AAAAAAAABsk/SsNzwoh-hwA/s72-c/Blag_Word_Clock_000.jpeg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13698376.post-8751605649570921687</id><published>2012-01-14T05:22:00.000-08:00</published><updated>2012-01-14T05:35:45.121-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SAPHANA'/><category scheme='http://www.blogger.com/atom/ns#' term='R'/><title type='text'>Modelo de Prediccion utilizando HANA y R</title><content type='html'>&lt;p&gt;Estos ultimos dias, he estado leyendo y jugando bastante con &lt;a href="http://www.r-project.org/"&gt;R&lt;/a&gt;, y realmente he llegado a adorarlo...desde luego, no tengo ni idea en esas raras funciones estadisticas, pero eso no significa que no pueda usar R e intentar hacer algunas cuantas cosas asombrosas.&lt;/p&gt;&lt;p&gt;Asi que, ayer estaba pensando acerca de hacer integracion entre HANA y R, mis nuevos hijos adoptivos, asi que tuve la idea de hacer un modelo de prediccion para una companhia aerea. Segui estos pasos.&lt;/p&gt;&lt;p&gt;1.- Primero, tenia que escoger una tabla, asi que tome SNVOICE:&lt;/p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-9atMs2wlWdA/TxF_9RLE6fI/AAAAAAAABrw/RsMSrHghoJA/s1600/snvoice.PNG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 397px; height: 202px;" src="http://1.bp.blogspot.com/-9atMs2wlWdA/TxF_9RLE6fI/AAAAAAAABrw/RsMSrHghoJA/s400/snvoice.PNG" border="0" alt=""id="BLOGGER_PHOTO_ID_5697475694158998002" /&gt;&lt;/a&gt;&lt;p&gt;Esta tabla nos ofrece, el Carrier Id, la fecha y el Book Id, lo cual significa el numero de boletos vendidos en un dia en particular. Y de aqui podia hacer unos cuantos calculos y determinar cuantos boletos se vendieron en cada mes en un anho en particular.&lt;/p&gt;&lt;p&gt;2.- Necesitaba una tabla para guardar mi nueva informacion, asi que cree la tabla TICKETS_BY_YEAR:&lt;/p&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-TVj1wlnik3I/TxGAI6NG4dI/AAAAAAAABr8/8VJ4HXWaQO0/s1600/Ticket_by_year.PNG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 133px;" src="http://1.bp.blogspot.com/-TVj1wlnik3I/TxGAI6NG4dI/AAAAAAAABr8/8VJ4HXWaQO0/s400/Ticket_by_year.PNG" border="0" alt=""id="BLOGGER_PHOTO_ID_5697475894151930322" /&gt;&lt;/a&gt;&lt;p&gt;3.- Necesitaba un Procedure para analisar la tabla, determinar el total por dia del mes y luego calcular el gran total por mes.&lt;/p&gt;&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 95%;"&gt;&lt;br /&gt;CREATE PROCEDURE GetTicketsByMonth &lt;br /&gt;(IN var_year NVARCHAR(4),IN var_carrid NVARCHAR(2))&lt;br /&gt;LANGUAGE SQLSCRIPT AS&lt;br /&gt;v_found NVARCHAR(2) := 1;&lt;br /&gt;sum_bookid INT;&lt;br /&gt;v_date NVARCHAR(8) := '';&lt;br /&gt;BEGIN                &lt;br /&gt;TT_MONTH = select fldate, count(bookid) as "BOOKID"&lt;br /&gt;           from sflight.snvoice &lt;br /&gt;           where year(fldate) = VAR_YEAR and carrid = VAR_CARRID&lt;br /&gt;           group by fldate&lt;br /&gt;           order by fldate asc;&lt;br /&gt;v_date := (:var_year * 10000) + 101;&lt;br /&gt;while :v_found &amp;lt;= 12 do &lt;br /&gt;select sum(bookid) into sum_bookid&lt;br /&gt;from :TT_MONTH&lt;br /&gt;where month(fldate) = :v_found;&lt;br /&gt;insert into TICKETS_BY_YEAR&lt;br /&gt;values(v_date,sum_bookid);&lt;br /&gt;v_date := :v_date + 100;&lt;br /&gt;v_found := :v_found + 1;&lt;br /&gt;end while;           &lt;br /&gt;END;&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;4.- Por supuesto...necesitaba llamar a mi Procedure...&lt;/p&gt;&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 95%;"&gt;&lt;br /&gt;CALL P075400.GetTicketsByMonth('2011','''AA''');&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;5.- Una vez terminado, revise mi tabla para estar seguro de que todo funciono como lo esperado...&lt;/p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/--apKKeOZtxk/TxGAauaDpcI/AAAAAAAABsI/kWqJSRJMD4M/s1600/Ticket_by_year_preview.PNG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 273px; height: 308px;" src="http://1.bp.blogspot.com/--apKKeOZtxk/TxGAauaDpcI/AAAAAAAABsI/kWqJSRJMD4M/s400/Ticket_by_year_preview.PNG" border="0" alt=""id="BLOGGER_PHOTO_ID_5697476200222664130" /&gt;&lt;/a&gt;&lt;p&gt;6.- Luego de asegurarme de que mi informacion estaba correcta y limpia, la exporte a un archivo .CSV (Disculpen...pero no hay imagen esta vez...ya la postee antes)&lt;/p&gt;&lt;p&gt;7.- Fui a mi R Studio y empece a programar...&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 95%;"&gt;&lt;br /&gt;Flight_Tickets=read.csv(file="Flight_Tickets.csv",header=TRUE)&lt;br /&gt;period=Flight_Tickets$PERIOD&lt;br /&gt;tickets=Flight_Tickets$TICKETS&lt;br /&gt;var_year=substr(period[1],1,4)&lt;br /&gt;var_year=as.integer(var_year)&lt;br /&gt;var_year=var_year+1&lt;br /&gt;var_year=as.character(var_year)&lt;br /&gt;new_period=gsub("^\\d{4}",var_year,period)&lt;br /&gt;next_year=data.frame(year=new_period,StringsAsFactors=FALSE)&lt;br /&gt;prt.lm=lm(tickets ~ period)&lt;br /&gt;pred=predict(prt.lm,next_year,interval="none")&lt;br /&gt;&lt;br /&gt;plot(tickets,type="b",&lt;br /&gt;     col="red",&lt;br /&gt;     main="Annual Tickets Sale",&lt;br /&gt;     xlab="Months",ylab="Tickets")&lt;br /&gt;lines(pred,type="b",col="blue")&lt;br /&gt;legend("bottomleft",inset=.05,title="Real vs. Predicted",&lt;br /&gt;       c("Real","Predicted"),&lt;br /&gt;       lty=c(1,1),col=c("red","blue"))&lt;br /&gt;&lt;/pre&gt;&lt;/p&gt;&lt;p&gt;8.- Observe my grafico generado mostrando la venta real de tickets versus la venta predecida de tickets. La real es por cada mes de 2011 y la predecida es para cada mes del 2012.&lt;/p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-9Yew7nJVl1A/TxGAmu-RGKI/AAAAAAAABsU/FOhGlP-q448/s1600/Annual_Tickets_Sale.jpeg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 360px;" src="http://3.bp.blogspot.com/-9Yew7nJVl1A/TxGAmu-RGKI/AAAAAAAABsU/FOhGlP-q448/s400/Annual_Tickets_Sale.jpeg" border="0" alt=""id="BLOGGER_PHOTO_ID_5697476406532970658" /&gt;&lt;/a&gt;&lt;p&gt;9.- Nada que hacer aqui...ya esta hecho -:)&lt;/p&gt;&lt;p&gt;10.- Nos vemos la proxima vez, con HANA, R o alguna otra tecnologia.&lt;/p&gt;&lt;br /&gt;Saludos,&lt;br /&gt;&lt;br /&gt;Blag.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13698376-8751605649570921687?l=atejada.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atejada.blogspot.com/feeds/8751605649570921687/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13698376&amp;postID=8751605649570921687' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/8751605649570921687'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/8751605649570921687'/><link rel='alternate' type='text/html' href='http://atejada.blogspot.com/2012/01/modelo-de-prediccion-utilizando-hana-y.html' title='Modelo de Prediccion utilizando HANA y R'/><author><name>Alvaro "Blag" Tejada Galindo</name><uri>http://www.blogger.com/profile/12061593528820409779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='https://weblogs.sdn.sap.com/images/people/alvaro_tajeda.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-9atMs2wlWdA/TxF_9RLE6fI/AAAAAAAABrw/RsMSrHghoJA/s72-c/snvoice.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13698376.post-4681918762661395660</id><published>2012-01-02T11:28:00.000-08:00</published><updated>2012-01-02T11:35:29.244-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SDN'/><category scheme='http://www.blogger.com/atom/ns#' term='SAP'/><title type='text'>Los mejores blogs del 2011 segun Blag</title><content type='html'>&lt;div align="justify"&gt;&lt;br /&gt;&lt;p&gt;Asi que el 2011 ya se fue...fue un buen anho, asi que es momento para continuar con una tradicion que comence hace 4 anhos con el blog &lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/8090" target="_blank"&gt;Blag's best blogs picks from 2007&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Puedo ver con felicidad, que cada anho, mejores blogs estan siendo escritos, y es dificil para mi no incluirlos en la lista, la cual crece cada anho.&lt;/p&gt;&lt;p&gt;Nuevamente, no soy un experto en cada campo, lejos de eso, lo unico que he hecho, como en los anhos anteriores, es navegar en los blogs de cada mes, y tratar de seleccionar los que para mi son los mejores, o simplemente son joyas escondidas....blogs sin comentarios, pero que realmente aportan algo nuevo. Espero que les guste la lista -:) Y si no estas en ella...perdon, pero hacer una lista tan grande como esta es un trabajo muy pesado, asi que seguramente debo haber perdido algunos muy buenos -:(&lt;/p&gt;&lt;br&gt;&lt;p&gt;&lt;strong&gt;ABAP&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/23283" target="_blank"&gt;Don't try to be smart. Be smart.&lt;/a&gt; by&amp;nbsp;&lt;a href="http://www.sdn.sap.com/irj/scn/bc?u=a2W5xJKKHuWj6dlF7kmDbg%3D%3D" target="_blank"&gt;Tobias Trapp&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/23086" target="_blank"&gt;Caffeine in Action&lt;/a&gt; by&amp;nbsp;&lt;a href="http://www.sdn.sap.com/irj/scn/bc?u=bYuRY6po7IU%3D" target="_blank"&gt;Daniel Vocke&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/23738" target="_blank"&gt;ABAP Trapdoors: The Myth of the Instance Constructor&lt;/a&gt; by&amp;nbsp;&lt;a href="http://www.sdn.sap.com/irj/scn/bc?u=Zlx%2BrLx4gEfwn13ROUsJBw%3D%3D" target="_blank"&gt;Volker Wegert&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/26740" target="_blank"&gt;Operations Research &amp;amp; ABAP&lt;/a&gt; by&amp;nbsp;&lt;a href="http://www.sdn.sap.com/irj/scn/bc?u=a2W5xJKKHuWj6dlF7kmDbg%3D%3D" target="_blank"&gt;Tobias Trapp&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Open Source&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/22827" target="_blank"&gt;More Barcodes with Barcode Writer in Pure Postscript&lt;/a&gt; by&amp;nbsp;&lt;a href="http://www.sdn.sap.com/irj/scn/bc?u=rNh0R9PoCSaABbCsUpK8XQ%3D%3D" target="_blank"&gt;Robert Russell&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/27548" target="_blank"&gt;Dealing with R and HANA&lt;/a&gt; by &lt;a href="http://www.sdn.sap.com/irj/scn/bc?u=nkxEgTFlWZE%3D" target="_blank"&gt;Alvaro Tejada Galindo&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/26207" target="_blank"&gt;abap2gapps: is your ABAP ready for the Google cloud?&lt;/a&gt; by&amp;nbsp;&lt;a href="http://www.sdn.sap.com/irj/scn/bc?u=tjFGqAAiIQ4dF1omuFJZcQ%3D%3D" target="_blank"&gt;Ivan Femia&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/26204" target="_blank"&gt;OAuth2: Next generation authentication API&lt;/a&gt; by&amp;nbsp;&lt;a href="http://www.sdn.sap.com/irj/scn/bc?u=tjFGqAAiIQ4dF1omuFJZcQ%3D%3D" target="_blank"&gt;Ivan Femia&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;On Demand and Software as a Services (SaaS)&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/23210" target="_blank"&gt;Why Dick Hirsch is mostly wrong about ByDesign guerilla tactics&lt;/a&gt; by&amp;nbsp;&lt;a href="http://www.sdn.sap.com/irj/scn/bc?u=AfPsNmJJyu0%3D" target="_blank"&gt;Dennis Howlett&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/23200" target="_blank"&gt;Guerrilla Tactics for SAP&amp;rsquo;'s OnDemand 'Go to Market' Strategy&lt;/a&gt; by&amp;nbsp;&lt;a href="http://www.sdn.sap.com/irj/scn/bc?u=PCUWdFESp%2BElgnBu4p6e9A%3D%3D" target="_blank"&gt;Richard Hirsch&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Improving My Experience&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/23203" target="_blank"&gt;Does the SAP SCN community need more achievements and rewards?&lt;/a&gt; by&amp;nbsp;&lt;a href="http://www.sdn.sap.com/irj/scn/bc?u=bpsMP4HBq6QKtEidBmf3ww%3D%3D" target="_blank"&gt;Tom Cenens&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/25848" target="_blank"&gt;"Programmers are lazy" - InnoJam them!&lt;/a&gt; by&amp;nbsp;&lt;a href="http://www.sdn.sap.com/irj/scn/bc?u=366Gzpeb06rPklZfVCxHPQ%3D%3D" target="_blank"&gt;Chris Paine&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/26754" target="_blank"&gt;Download basket approvals gone with the wind&lt;/a&gt; by&amp;nbsp;&lt;a href="http://www.sdn.sap.com/irj/scn/bc?u=bpsMP4HBq6QKtEidBmf3ww%3D%3D" target="_blank"&gt;Tom Cenens&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;SAP Developer Network&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/23133" target="_blank"&gt;16 SAP Mentor Magic Moments 2010&lt;/a&gt; by&amp;nbsp;&lt;a href="http://www.sdn.sap.com/irj/scn/bc?u=G9g0PZYnHCA%3D" target="_blank"&gt;Mark Finnern&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/23089" target="_blank"&gt;SCN Blogs Go Mobile&lt;/a&gt; by&amp;nbsp;&lt;a href="http://www.sdn.sap.com/irj/scn/bc?u=6v4SGATYtPg%3D" target="_blank"&gt;Gali Kling Schneider&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/25529" target="_blank"&gt;SDN Time Capsule : How it all started by Jeff Word&lt;/a&gt; by&amp;nbsp;&lt;a href="http://www.sdn.sap.com/irj/scn/bc?u=ZzFuAxu95pkQfY%2BMPH65%2BQ%3D%3D" target="_blank"&gt;Martin Gillet&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/27089" target="_blank"&gt;Things that drive me crazy on SDN&lt;/a&gt; by&amp;nbsp;&lt;a href="http://www.sdn.sap.com/irj/scn/bc?u=FNU%2Bdd4bfiBn1LqP%2Fo38zg%3D%3D" target="_blank"&gt;Martin Maruskin&lt;/a&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/27705" target="_blank"&gt;Top 25 SCN Blogs of all Time&lt;/a&gt; by&amp;nbsp;&lt;a href="http://www.sdn.sap.com/irj/scn/bc?u=G9g0PZYnHCA%3D" target="_blank"&gt;Mark Finnern&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Web Dynpro&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/23468" target="_blank"&gt;Kiss of Life for ABAP Dynpro &amp;ndash;- It&amp;rsquo;s going to stay, so let&amp;rsquo;s improve the integration&lt;/a&gt; by&amp;nbsp;&lt;a href="http://www.sdn.sap.com/irj/scn/bc?u=FqRXbQSPhnDWyeaOV5QEDA%3D%3D" target="_blank"&gt;Thorsten Franz&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Standards&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/24025" target="_blank"&gt;Sorry Singleton I don't love you anymore.&lt;/a&gt; by&amp;nbsp;&lt;a href="http://www.sdn.sap.com/irj/scn/bc?u=366Gzpeb06rPklZfVCxHPQ%3D%3D" target="_blank"&gt;Chris Paine&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Community Projects&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/23981" target="_blank"&gt;Can the community be improved?&lt;/a&gt; by&amp;nbsp;&lt;a href="http://www.sdn.sap.com/irj/scn/bc?u=AfPsNmJJyu0%3D" target="_blank"&gt;Dennis Howlett&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/26617" target="_blank"&gt;A simple way of giving back to the community&lt;/a&gt; by&amp;nbsp;&lt;a href="http://www.sdn.sap.com/irj/scn/bc?u=r5X3QuIYNeg%3D" target="_blank"&gt;John Astill&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/27225" target="_blank"&gt;Damned If You Do And Damned If You Do Not&lt;/a&gt; by&amp;nbsp;&lt;a href="http://www.sdn.sap.com/irj/scn/bc?u=aEYYjpyVTLA%3D" target="_blank"&gt;Marilyn Pratt&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Governance, Risk and Compliance&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/23734" target="_blank"&gt;Making the case for SAP Mentor alumni program&lt;/a&gt; by&amp;nbsp;&lt;a href="http://www.sdn.sap.com/irj/scn/bc?u=AfPsNmJJyu0%3D" target="_blank"&gt;Dennis Howlett&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Beyond SAP&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/23714" target="_blank"&gt;[Plagiarism] Why thieves from portals like saptechies.com are safe ? Bloggers please help...&lt;/a&gt; by&amp;nbsp;&lt;a href="http://www.sdn.sap.com/irj/scn/bc?u=EjrRW2LHEos%3D" target="_blank"&gt;Michal_Krawczyk_PIXI&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/25212" target="_blank"&gt;OINK OINK! Welcome to the SAP Gamification Cup!&lt;/a&gt; by&amp;nbsp;&lt;a href="http://www.sdn.sap.com/irj/scn/bc?u=y%2FlnOF0w%2FiY%3D" target="_blank"&gt;Mario Herger&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/24886" target="_blank"&gt;Is ABAP for Non-ABAPers (Functionals)?&lt;/a&gt; by&amp;nbsp;&lt;a href="http://www.sdn.sap.com/irj/scn/bc?u=3eSL2fjsuwI%3D" target="_blank"&gt;Fabio Luiz Esperati Pagoti&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/26505" target="_blank"&gt;Not your Grandfather&amp;rsquo;s SAP&lt;/a&gt; (Recommended by &lt;a href="http://www.sdn.sap.com/irj/scn/bc?u=tjFGqAAiIQ4dF1omuFJZcQ%3D%3D" target="_blank"&gt;Ivan Femia&lt;/a&gt;) by&amp;nbsp;&lt;a href="http://www.sdn.sap.com/irj/scn/bc?u=FqRXbQSPhnDWyeaOV5QEDA%3D%3D" target="_blank"&gt;Thorsten Franz&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/26477" target="_blank"&gt;About 'Embracing Inclusion to Drive Innovation'&lt;/a&gt; by&amp;nbsp;&lt;a href="http://www.sdn.sap.com/irj/scn/bc?u=3H8B2h0rfbo%3D" target="_blank"&gt;Matthias Steiner&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/26922" target="_blank"&gt;R.I.P Dennis Ritchie, and thank you !&lt;/a&gt; by&amp;nbsp;&lt;a href="http://www.sdn.sap.com/irj/scn/bc?u=Sfunl3f3bfnC3cCuBDKVoA%3D%3D" target="_blank"&gt;Vijay Vijayasankar&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/26753" target="_blank"&gt;Rest In Peace, Game Changer&lt;/a&gt; by&amp;nbsp;&lt;a href="http://www.sdn.sap.com/irj/scn/bc?u=Sfunl3f3bfnC3cCuBDKVoA%3D%3D" target="_blank"&gt;Vijay Vijayasankar&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/27135" target="_blank"&gt;A word of thanks&lt;/a&gt; by&amp;nbsp;&lt;a href="http://www.sdn.sap.com/irj/scn/bc?u=bpsMP4HBq6QKtEidBmf3ww%3D%3D" target="_blank"&gt;Tom Cenens&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/27017" target="_blank"&gt;Join with SAP and the U.N. as One of the 7 Billion!&lt;/a&gt; by&amp;nbsp;&lt;a href="http://www.sdn.sap.com/irj/scn/bc?u=0j5zMfhYI3E%3D" target="_blank"&gt;Mark Yolton&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Ranting&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/24448" target="_blank"&gt;Bad good, and Great Consultants???&lt;/a&gt; by&amp;nbsp;&lt;a href="http://www.sdn.sap.com/irj/scn/bc?u=XOb%2FeDcTiAVNbm8mmAl4Aw%3D%3D" target="_blank"&gt;Michelle Crapo&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/25465" target="_blank"&gt;Etiquette Versus Netiquette&lt;/a&gt; by&amp;nbsp;&lt;a href="http://www.sdn.sap.com/irj/scn/bc?u=%2B1kmYo%2B1%2B%2F8%3D" target="_blank"&gt;Bala Prabahar&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/27553" target="_blank"&gt;Five signs that the new SCN is dysfunctional&lt;/a&gt; by&amp;nbsp;&lt;a href="http://www.sdn.sap.com/irj/scn/bc?u=UoX1prteXsEbNcWtF6UJ3A%3D%3D" target="_blank"&gt;Jim Spath&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;ERP&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/24277" target="_blank"&gt;Embed an HTML landing page into your SAP GUI home screen&lt;/a&gt; by&amp;nbsp;&lt;a href="http://www.sdn.sap.com/irj/scn/bc?u=V2bTJ9RDryIII%2Fc2V%2B%2FWTQ%3D%3D" target="_blank"&gt;John Moy&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/25357" target="_blank"&gt;Why Workday is a Major Threat to SAP&lt;/a&gt; by&amp;nbsp;&lt;a href="http://www.sdn.sap.com/irj/scn/bc?u=vfvPuzAjRkhmzV%2F9GjunpA%3D%3D" target="_blank"&gt;Jarret Pazahanick&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Business Process Management&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/24131" target="_blank"&gt;SAPMentors + ASUG +VNSG +SAP = #winning!&lt;/a&gt; by&amp;nbsp;&lt;a href="http://www.sdn.sap.com/irj/scn/bc?u=ESYgRt568jE29%2F575tdNRg%3D%3D" target="_blank"&gt;Susan Keohan&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Business Process Expert&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/25862" target="_blank"&gt;Embracing Inclusion &amp;ndash;- Driving Innovation : An Introduction&lt;/a&gt; by&amp;nbsp;&lt;a href="http://www.sdn.sap.com/irj/scn/bc?u=aEYYjpyVTLA%3D" target="_blank"&gt;Marilyn Pratt&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;SAP TechEd&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/25083" target="_blank"&gt;Why I'm excited about the upcoming TechEd in Las Vegas&lt;/a&gt; by&amp;nbsp;&lt;a href="http://www.sdn.sap.com/irj/scn/bc?u=9g7UM6qKyPE%2FLXwxopOn1w%3D%3D" target="_blank"&gt;Matt Harding&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/25339" target="_blank"&gt;Help an SAP Mentor with his travels?&lt;/a&gt; by&amp;nbsp;&lt;a href="http://www.sdn.sap.com/irj/scn/bc?u=UoX1prteXsEbNcWtF6UJ3A%3D%3D" target="_blank"&gt;Jim Spath&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/25807" target="_blank"&gt;SCNotty Goes To Bollywood&lt;/a&gt; by&amp;nbsp;&lt;a href="http://www.sdn.sap.com/irj/scn/bc?u=UoX1prteXsEbNcWtF6UJ3A%3D%3D" target="_blank"&gt;Jim Spath&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/27123" target="_blank"&gt;Design Thinking, Women in technology at Tech-ed BLR 2011 a participant&amp;rsquo;'s view&lt;/a&gt; by&amp;nbsp;&lt;a href="http://www.sdn.sap.com/irj/scn/bc?u=nlsZpkcjXgs%3D" target="_blank"&gt;SINGHKUMUD&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Python&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/25106" target="_blank"&gt;Tasting the mix of Python and SAP&lt;/a&gt; by &lt;a href="http://www.sdn.sap.com/irj/scn/bc?u=nkxEgTFlWZE%3D" target="_blank"&gt;Alvaro Tejada Galindo&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;In-Memory Business Data Management&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/25070" target="_blank"&gt;POV: HANA's impact on ABAP Programming&lt;/a&gt; by&amp;nbsp;&lt;a href="http://www.sdn.sap.com/irj/scn/bc?u=6w3YNRksOGsgP3wUuVWegw%3D%3D" target="_blank"&gt;Ram Batulla&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/26105" target="_blank"&gt;Quick Thoughts about HANA and InMemory Technology&lt;/a&gt; by&amp;nbsp;&lt;a href="http://www.sdn.sap.com/irj/scn/bc?u=lXprLUHXsrAQfY%2BMPH65%2BQ%3D%3D" target="_blank"&gt;Richard Hirsch&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/25872" target="_blank"&gt;Finding SAP HANA Documentation&lt;/a&gt; by&amp;nbsp;&lt;a href="http://www.sdn.sap.com/irj/scn/bc?u=2S35Bjbkoq6bRNXZEM0Mqw%3D%3D" target="_blank"&gt;John Appleby&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/25861" target="_blank"&gt;An InnoJam Experience - with HANA flavour&lt;/a&gt; by&amp;nbsp;&lt;a href="http://www.sdn.sap.com/irj/scn/bc?u=adHsgL3WgV8I6z1bsFYi3w%3D%3D" target="_blank"&gt;Sarat Atluri&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/26657" target="_blank"&gt;Are we putting the cart before the horse?&lt;/a&gt; by&amp;nbsp;&lt;a href="http://www.sdn.sap.com/irj/scn/bc?u=%2B1kmYo%2B1%2B%2F8%3D" target="_blank"&gt;Bala Prabahar&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/26658" target="_blank"&gt;Experience HANA - the wish list&lt;/a&gt; by&amp;nbsp;&lt;a href="http://www.sdn.sap.com/irj/scn/bc?u=Sfunl3f3bfnC3cCuBDKVoA%3D%3D" target="_blank"&gt;Vijay Vijayasankar&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/26606" target="_blank"&gt;How much of the game will HANA change?&lt;/a&gt; by&amp;nbsp;&lt;a href="http://www.sdn.sap.com/irj/scn/bc?u=Sfunl3f3bfnC3cCuBDKVoA%3D%3D" target="_blank"&gt;Vijay Vijayasankar&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/27086" target="_blank"&gt;Why SAP HANA 1.0 SP03 - Project Orange - will be a runaway success&lt;/a&gt; by&amp;nbsp;&lt;a href="http://www.sdn.sap.com/irj/scn/bc?u=2S35Bjbkoq6bRNXZEM0Mqw%3D%3D" target="_blank"&gt;John Appleby&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/26747" target="_blank"&gt;Using Excel on HANA&lt;/a&gt; by&amp;nbsp;&lt;a href="http://www.sdn.sap.com/irj/scn/bc?u=qiBXNO5%2FnR0%3D" target="_blank"&gt;Thomas Zurek&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/26736" target="_blank"&gt;ExaData, ExaLogic, and now ExaLytics? ExaSperating&amp;hellip;&lt;/a&gt; by&amp;nbsp;&lt;a href="http://www.sdn.sap.com/irj/scn/bc?u=Xj97hkg6MkA%3D" target="_blank"&gt;Aiaz Kazi&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Mobile&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/24851" target="_blank"&gt;An Android App for searching HELP.SAP.COM&lt;/a&gt; by&amp;nbsp;&lt;a href="http://www.sdn.sap.com/irj/scn/bc?u=V2bTJ9RDryIII%2Fc2V%2B%2FWTQ%3D%3D" target="_blank"&gt;John Moy&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/25315" target="_blank"&gt;Mobile SAP Applications using DHTMLX Touch&lt;/a&gt; by&amp;nbsp;&lt;a href="http://www.sdn.sap.com/irj/scn/bc?u=0aeaZI0Raf78ddyZtDSc%2BQ%3D%3D" target="_blank"&gt;Brad Pokroy&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/26201" target="_blank"&gt;SAPMentors Outreach iOS App&lt;/a&gt; by&amp;nbsp;&lt;a href="http://www.sdn.sap.com/irj/scn/bc?u=vzbX46DjQAI%3D" target="_blank"&gt;Bjoern Weigand&lt;/a&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/24679" target="_blank"&gt;Proudly Presenting the SAP Mentors Outreach Mobile App for Android &amp;ndash; Connect with SAP Mentors at SAPphireNOW/ASUG Orlando&lt;/a&gt; by&amp;nbsp;&lt;a href="http://www.sdn.sap.com/irj/scn/bc?u=FqRXbQSPhnDWyeaOV5QEDA%3D%3D" target="_blank"&gt;Thorsten Franz&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/27075" target="_blank"&gt;Thoughts on the current debate about the Sybase Unwired Platform and options to energize the mobile development community&lt;/a&gt; by&amp;nbsp;&lt;a href="http://www.sdn.sap.com/irj/scn/bc?u=lXprLUHXsrAQfY%2BMPH65%2BQ%3D%3D" target="_blank"&gt;Richard Hirsch&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/26946" target="_blank"&gt;SAP Mentor Outreach is now available on JQuery Mobile&lt;/a&gt; by&amp;nbsp;&lt;a href="http://www.sdn.sap.com/irj/scn/bc?u=tjFGqAAiIQ4dF1omuFJZcQ%3D%3D" target="_blank"&gt;Ivan Femia&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/27958" target="_blank"&gt;An experiment of Android with HANA In-Memory Database&lt;/a&gt; by&amp;nbsp;&lt;a href="http://www.sdn.sap.com/irj/scn/bc?u=ByrNbt9%2BZgg%3D" target="_blank"&gt;Sudhir Verma&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/28029" target="_blank"&gt;BSP mobile logon screen using jQueryMobile&lt;/a&gt; by&amp;nbsp;&lt;a href="http://www.sdn.sap.com/irj/scn/bc?u=%2BXzjk65ycmk%3D" target="_blank"&gt;Alessandro Spadoni&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;SAP Streamwork&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/25720" target="_blank"&gt;SAP StreamWork: Picking up Steam?&lt;/a&gt; by&amp;nbsp;&lt;a href="http://www.sdn.sap.com/irj/scn/bc?u=V%2F8AqEv21d8X435Mz40ukw%3D%3D" target="_blank"&gt;Tammy Powlas&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Social Media and Social Networks&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/25593" target="_blank"&gt;Why Google+'s rapid adoption doesn't impress me&lt;/a&gt; by&amp;nbsp;&lt;a href="http://www.sdn.sap.com/irj/scn/bc?u=GP%2BAfhbjTXTB7x4BEpNd9g%3D%3D" target="_blank"&gt;Jamie Oswald&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/26083" target="_blank"&gt;8 Ways to Let You Know SCN is Listening (on Twitter)&lt;/a&gt; by&amp;nbsp;&lt;a href="http://www.sdn.sap.com/irj/scn/bc?u=8H3sls8yOX8QfY%2BMPH65%2BQ%3D%3D" target="_blank"&gt;Sylvia Santelli&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/26674" target="_blank"&gt;Confessions of mixed emotions about the coming new SCN&lt;/a&gt; by&amp;nbsp;&lt;a href="http://www.sdn.sap.com/irj/scn/bc?u=8TtZbQd4adcQfY%2BMPH65%2BQ%3D%3D" target="_blank"&gt;Gretchen Y Lindquist&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/27119" target="_blank"&gt;What I Learned About Social Media Marketing from a Webinar on Mobile Marketing&lt;/a&gt; by&amp;nbsp;&lt;a href="http://www.sdn.sap.com/irj/scn/bc?u=sg6eRKnGedUQfY%2BMPH65%2BQ%3D%3D" target="_blank"&gt;Natascha Thomson&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/26993" target="_blank"&gt;How cool is SCN?&lt;/a&gt; by&amp;nbsp;&lt;a href="http://www.sdn.sap.com/irj/scn/bc?u=zcC6OJVd7Gk%3D" target="_blank"&gt;Graham Robinson&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/27426" target="_blank"&gt;What it means to me to be an SAP Mentor&lt;/a&gt; by&amp;nbsp;&lt;a href="http://www.sdn.sap.com/irj/scn/bc?u=sg6eRKnGedUQfY%2BMPH65%2BQ%3D%3D" target="_blank"&gt;Natascha Thomson&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/27253" target="_blank"&gt;12 SAP Troublemakers&lt;/a&gt; by&amp;nbsp;&lt;a href="http://www.sdn.sap.com/irj/scn/bc?u=vfvPuzAjRkhmzV%2F9GjunpA%3D%3D" target="_blank"&gt;Jarret Pazahanick&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/27168" target="_blank"&gt;I'm outta here !!&lt;/a&gt; by&amp;nbsp;&lt;a href="http://www.sdn.sap.com/irj/scn/bc?u=AfPsNmJJyu0%3D" target="_blank"&gt;Dennis Howlett&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/27788" target="_blank"&gt;Unsolicited Advice for Blogging Marketers&lt;/a&gt; by&amp;nbsp;&lt;a href="http://www.sdn.sap.com/irj/scn/bc?u=GP%2BAfhbjTXTB7x4BEpNd9g%3D%3D" target="_blank"&gt;Jamie Oswald&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Emerging Technologies&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/25496" target="_blank"&gt;My first Android Application&lt;/a&gt; by&amp;nbsp;&lt;a href="http://www.sdn.sap.com/irj/scn/bc?u=s00aVP2rZLE%3D" target="_blank"&gt;Girish Kaimal&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Ruby&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/26594" target="_blank"&gt;Ruby, Camping and...Gateway?&lt;/a&gt; by &lt;a href="http://www.sdn.sap.com/irj/scn/bc?u=nkxEgTFlWZE%3D" target="_blank"&gt;Alvaro Tejada Galindo&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/27976" target="_blank"&gt;Building a Cross-Platform Mobile App with rhomobile&lt;/a&gt; by&amp;nbsp;&lt;a href="http://www.sdn.sap.com/irj/scn/bc?u=gyntrY%2F3Z%2BRttQ6oEFYZUw%3D%3D" target="_blank"&gt;Mark Teichmann&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Run SAP&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/26357" target="_blank"&gt;SAP HANA InnoJam Online, SAP's new developer competition&lt;/a&gt; by &lt;a href="http://www.sdn.sap.com/irj/scn/bc?u=Uu5QSjmP9j0%3D" target="_blank"&gt;Anne Hardy&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/26462" target="_blank"&gt;SCN runs SAP!&lt;/a&gt; by&amp;nbsp;&lt;a href="http://www.sdn.sap.com/irj/scn/bc?u=IxQ4wBE1MZM%3D" target="_blank"&gt;Maya Bahar&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;SAP NetWeaver Gateway&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/26943" target="_blank"&gt;Thoughts on NetWeaver Gateway&lt;/a&gt; by&amp;nbsp;&lt;a href="http://www.sdn.sap.com/irj/scn/bc?u=zcC6OJVd7Gk%3D" target="_blank"&gt;Graham Robinson&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/26913" target="_blank"&gt;SAP NetWeaver Gateway: 90-day trial version, train race, webinar, and other news&lt;/a&gt; by&amp;nbsp;&lt;a href="http://www.sdn.sap.com/irj/scn/bc?u=UVKW52l7b0kQfY%2BMPH65%2BQ%3D%3D" target="_blank"&gt;Helena Losada&lt;/a&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/27565" target="_blank"&gt;SAP NetWeaver Gateway: A Poor Man's EDMX Generation Tool&lt;/a&gt; by&amp;nbsp;&lt;a href="http://www.sdn.sap.com/irj/scn/bc?u=2f%2BrrPos4iY%3D" target="_blank"&gt;James Wood&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Community Day&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/26813" target="_blank"&gt;SAP Inside Track Milan 2011 - The reporting&lt;/a&gt; by&amp;nbsp;&lt;a href="http://www.sdn.sap.com/irj/scn/bc?u=tjFGqAAiIQ4dF1omuFJZcQ%3D%3D" target="_blank"&gt;Ivan Femia&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;PHP&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/26866" target="_blank"&gt;Consuming SAP NetWeaver Gateway OData web services using PHP&lt;/a&gt; by&amp;nbsp;&lt;a href="http://www.sdn.sap.com/irj/scn/bc?u=w1lo%2Fi2lT1J%2F9FHI7yV9Lg%3D%3D" target="_blank"&gt;Christopher Reichley&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Visual Composer&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/27231" target="_blank"&gt;Old School UI Modeling - Meet HANA&lt;/a&gt; by&amp;nbsp;&lt;a href="http://www.sdn.sap.com/irj/scn/bc?u=rOwKF5nvl%2FA%3D" target="_blank"&gt;Yariv Zur&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/28023" target="_blank"&gt;Portal Development - Why Web Dynpro Java is replaceable&lt;/a&gt; by&amp;nbsp;&lt;a href="http://www.sdn.sap.com/irj/scn/bc?u=sSuZnA%2F%2FK%2FQ%3D" target="_blank"&gt;Tobias Hofmann&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13698376-4681918762661395660?l=atejada.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atejada.blogspot.com/feeds/4681918762661395660/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13698376&amp;postID=4681918762661395660' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/4681918762661395660'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/4681918762661395660'/><link rel='alternate' type='text/html' href='http://atejada.blogspot.com/2012/01/los-mejores-blogs-del-2011-segun-blag.html' title='Los mejores blogs del 2011 segun Blag'/><author><name>Alvaro "Blag" Tejada Galindo</name><uri>http://www.blogger.com/profile/12061593528820409779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='https://weblogs.sdn.sap.com/images/people/alvaro_tajeda.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13698376.post-6209367800078264331</id><published>2011-12-31T17:49:00.000-08:00</published><updated>2011-12-31T17:52:01.329-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Misc'/><title type='text'>Feliz Anho Nuevo 2012!</title><content type='html'>&lt;DIV ALIGN="JUSTIFY"&gt;&lt;br /&gt;Supongo que este es el momento de hablar de todas las cosas buenas que me pasaron el 2011, y de las cosas buenas que quiero que me pasen el 2012...asi que aqui voy -:)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;2011&lt;/span&gt;&lt;br /&gt;* Entre a SAP&lt;br /&gt;* Aprendi HANA, Gateway y R&lt;br /&gt;* Deje de ser un Consultor ABAP despues de casi 11 anhos&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;2012&lt;/span&gt;&lt;br /&gt;* Escribir mi libro de Python&lt;br /&gt;* Continuar aprendiendo R&lt;br /&gt;* Perder peso&lt;br /&gt;* Darle a mi hija la mejor fiesta de 4 anhos que ha habido jamas&lt;br /&gt;&lt;br /&gt;y de paso...FELIZ ANHO NUEVO 2012!!!&lt;br /&gt;&lt;br /&gt;Saludos,&lt;br /&gt;&lt;br /&gt;Blag.&lt;br /&gt;&lt;/DIV&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13698376-6209367800078264331?l=atejada.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atejada.blogspot.com/feeds/6209367800078264331/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13698376&amp;postID=6209367800078264331' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/6209367800078264331'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/6209367800078264331'/><link rel='alternate' type='text/html' href='http://atejada.blogspot.com/2011/12/feliz-anho-nuevo-2012.html' title='Feliz Anho Nuevo 2012!'/><author><name>Alvaro "Blag" Tejada Galindo</name><uri>http://www.blogger.com/profile/12061593528820409779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='https://weblogs.sdn.sap.com/images/people/alvaro_tajeda.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13698376.post-7862600209816541974</id><published>2011-12-07T20:01:00.000-08:00</published><updated>2011-12-07T20:03:19.047-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='SAP'/><category scheme='http://www.blogger.com/atom/ns#' term='Misc'/><category scheme='http://www.blogger.com/atom/ns#' term='FLEX'/><category scheme='http://www.blogger.com/atom/ns#' term='ABAP'/><title type='text'>Venta de Navidad!</title><content type='html'>&lt;DIV ALIGN="JUSTIFY"&gt;&lt;br /&gt;Nuevamente...hasta el 30% de descuento en mis libros (edicion impresa) en...&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.lulu.com/spotlight/blag"&gt;Libros de Blag en Lulu.com&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Disponible hasta la primera semana de Enero...aprovechen -;)&lt;br /&gt;&lt;br /&gt;Saludos,&lt;br /&gt;&lt;br /&gt;Blag.&lt;br /&gt;&lt;/DIV&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13698376-7862600209816541974?l=atejada.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atejada.blogspot.com/feeds/7862600209816541974/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13698376&amp;postID=7862600209816541974' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/7862600209816541974'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/7862600209816541974'/><link rel='alternate' type='text/html' href='http://atejada.blogspot.com/2011/12/venta-de-navidad.html' title='Venta de Navidad!'/><author><name>Alvaro "Blag" Tejada Galindo</name><uri>http://www.blogger.com/profile/12061593528820409779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='https://weblogs.sdn.sap.com/images/people/alvaro_tajeda.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13698376.post-4287229321312648100</id><published>2011-12-05T10:25:00.000-08:00</published><updated>2011-12-05T10:33:04.393-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='R'/><title type='text'>Decimal a Binario en "R"</title><content type='html'>&lt;DIV ALIGN="JUSTIFY"&gt;&lt;br /&gt;Ultimamente...he estado aprendiendo "R"...ese raro lenguaje de programacion orientado a la programacion Estadistica...y de verdad me gusta...asi que como siempre, necesitaba crear mi propia aplicacion de Decimal a Binario -;)&lt;br /&gt;&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 95%;"&gt;&lt;br /&gt;binary&lt;-function(p_number) {&lt;br /&gt;  bsum&lt;-0&lt;br /&gt;  bexp&lt;-1&lt;br /&gt;  while (p_number &gt; 0) {&lt;br /&gt;     digit&lt;-p_number %% 2&lt;br /&gt;     p_number&lt;-floor(p_number / 2)&lt;br /&gt;     bsum&lt;-bsum + digit * bexp&lt;br /&gt;     bexp&lt;-bexp * 10&lt;br /&gt;  }&lt;br /&gt;  return(bsum)&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;p_number&lt;-readline("Decimal number?: ")&lt;br /&gt;p_number&lt;-as.numeric(p_number)&lt;br /&gt;bsum&lt;-binary(p_number)&lt;br /&gt;cat("Binary: ", bsum)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Para este ejemplo, utilice &lt;a href="http://rstudio.org/"&gt;RStudio&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-raEgYgghXNw/Tt0MCxfyQfI/AAAAAAAABqs/crvVY39XZyc/s1600/RDecToBin.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 360px;" src="http://1.bp.blogspot.com/-raEgYgghXNw/Tt0MCxfyQfI/AAAAAAAABqs/crvVY39XZyc/s400/RDecToBin.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5682711546597360114" /&gt;&lt;/a&gt;&lt;br /&gt;Greetings,&lt;br /&gt;&lt;br /&gt;Blag.&lt;br /&gt;&lt;/DIV&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13698376-4287229321312648100?l=atejada.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atejada.blogspot.com/feeds/4287229321312648100/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13698376&amp;postID=4287229321312648100' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/4287229321312648100'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/4287229321312648100'/><link rel='alternate' type='text/html' href='http://atejada.blogspot.com/2011/12/decimal-binario-en-r.html' title='Decimal a Binario en &quot;R&quot;'/><author><name>Alvaro "Blag" Tejada Galindo</name><uri>http://www.blogger.com/profile/12061593528820409779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='https://weblogs.sdn.sap.com/images/people/alvaro_tajeda.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-raEgYgghXNw/Tt0MCxfyQfI/AAAAAAAABqs/crvVY39XZyc/s72-c/RDecToBin.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13698376.post-7510341999913102511</id><published>2011-12-03T12:02:00.000-08:00</published><updated>2011-12-03T12:28:03.859-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SAPHANA'/><title type='text'>Concurso SAP HANA InnoJam OnLine - Llamada de atencion</title><content type='html'>&lt;DIV ALIGN="JUSTIFY"&gt;&lt;br /&gt;Sabian que hay un Consurso de SAP HANA InnoJam Online? Espero que no, porque lo mas probable...es que no hayan enviado su idea...&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/bc?u=Uu5QSjmP9j0%3D"&gt;Anne Hardy&lt;/a&gt; y &lt;a href="http://www.sdn.sap.com/irj/scn/bc?u=XOb%2FeDcTiAVNbm8mmAl4Aw%3D%3D"&gt;Michelle Crapo&lt;/a&gt; han escrito blogs sobre el concurso...&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/27291"&gt;SAP HANA InnoJam online contest, new start&lt;/a&gt;...&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/27452"&gt;Switching Gears - Have you heard about the Hana Online InnoJam?&lt;/a&gt; pero al parecer dos blogs no son suficientes para enviar un mensaje...&lt;br /&gt;&lt;br /&gt;&lt;a href="http://wiki.sdn.sap.com/wiki/display/~taosz6t"&gt;Karin Schattka&lt;/a&gt; amablemente create creo un WIKI con toda la informacion y el FAQ para este concurso &lt;a href="http://wiki.sdn.sap.com/wiki/display/events/SAP+HANA+InnoJam+Online+2012"&gt;SAP HANA InnoJam Online 2012&lt;/a&gt; asi que no hay mucho que me quede por decir, excepto quizas por darles el enlace a Ideas Place para que pueden enviar su super idea y ganar el concurso -;)&lt;br /&gt;&lt;br /&gt;&lt;a href="https://cw.sdn.sap.com/cw/community/ideas/community_and_services/sap_hana_innojam_online"&gt;sap_hana_innojam_online&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Pero ya me conocen...no puedo limitarme solamente a eso...sabian ustedes que si su idea es aceptada...las 100 primeras van a serlo, van a tener acceso al Sandbox de SAP HANA? Y este sera su espacio para que puedan usar o installar herramientas adicionales que podrian ayudarte, como "R" por ejemplo, o Microsoft Excel y Business Object Explorer.&lt;br /&gt;&lt;br /&gt;Deberia hablar de los premios? No...yo pienso que no...pueden leer eso en otro ado, ademas estoy seguro de que para todos los geeks alla afuera, tener la oportunidad de jugar con SAP HANA es premio suficiente, no? &lt;br /&gt;&lt;br /&gt;Hasta el dia de hoy, solo tenemos 47 ideas enviadas al Ideas Place...lo cual significa que 53 plazas estan disponibles para ser llenadas...asi que apurence! Piensa en tu super idea! Enviala a Ideas Place! Clasifica y desarrolla tu idea utilizando SAP HANA! Llega a las finales! Gana el concurso!&lt;br /&gt;&lt;br /&gt;Reamente espero que luego de leer este blog, envies tu idea...Estare vigilando -;)&lt;br /&gt;&lt;br /&gt;Saludos,&lt;br /&gt;&lt;br /&gt;Blag.&lt;br /&gt;&lt;/DIV&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13698376-7510341999913102511?l=atejada.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atejada.blogspot.com/feeds/7510341999913102511/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13698376&amp;postID=7510341999913102511' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/7510341999913102511'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/7510341999913102511'/><link rel='alternate' type='text/html' href='http://atejada.blogspot.com/2011/12/concurso-sap-hana-innojam-online.html' title='Concurso SAP HANA InnoJam OnLine - Llamada de atencion'/><author><name>Alvaro "Blag" Tejada Galindo</name><uri>http://www.blogger.com/profile/12061593528820409779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='https://weblogs.sdn.sap.com/images/people/alvaro_tajeda.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13698376.post-5307466594021607197</id><published>2011-11-28T19:03:00.000-08:00</published><updated>2011-11-29T02:12:53.960-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SAPHANA'/><category scheme='http://www.blogger.com/atom/ns#' term='R'/><title type='text'>Trabajando con HANA y R</title><content type='html'>&lt;div align="justify"&gt;&lt;br /&gt;&lt;p&gt;Primero lo primero...que es "R"? Poniendolo de una manera simple...es un lenguaje de programacion y entorno de software para graficos y calculo estadisticos. Mas informacion en Wikipedia &lt;a href="http://en.wikipedia.org/wiki/R_(programming_language)" target="_blank"&gt;R on Wikipedia&lt;/a&gt;&lt;/p&gt;&lt;p&gt;He programado en muchos lenguages de programacion, algunos de ellos muy comerciales, y algunos muy poco conocidos, pero debo decir, de todos ellos, "R" es uno de los mas raros e impresionantes lenguages con los que he jugado...y tiene un repositorio impresionante de add-ons customizados.&lt;/p&gt;&lt;p&gt;Si has leido el&amp;nbsp;&lt;a href="https://www.experiencesaphana.com/docs/DOC-1138" target="_blank"&gt;HANA Pocketbook&lt;/a&gt;&amp;nbsp;te habras dado cuenta de que hay una referencia de "R" en la pagina 59. Por el momento, este tipo de integracion entre "R" y HANA no ha sido desarrollada, pero eso no significa que no podamos ensuciarnos las manos haciendo un poco de investigacion y desarollo.&lt;/p&gt;&lt;/p&gt;&lt;p&gt;Lo que hice para este ejemplo, fue simplemente mostrar la informacion de mi Vista Analitica en HANA y exportarla como un archivo CSV. Luego, es muy facil importarla en "R" y comenzar a hacer cosas interesantes. (La idea es que podamos desarrollar en "R" directamente en el entorno de HANA...o por lo menos es como yo pienso que va a ser...)&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-VjKfBn3ha3A/TtRKUpgOf9I/AAAAAAAABpY/Zw5wE2cf3Bc/s1600/HANA_SBOOK_000.PNG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 151px; height: 145px;" src="http://3.bp.blogspot.com/-VjKfBn3ha3A/TtRKUpgOf9I/AAAAAAAABpY/Zw5wE2cf3Bc/s400/HANA_SBOOK_000.PNG" border="0" alt=""id="BLOGGER_PHOTO_ID_5680246748619898834" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-47UV2h_haNA/TtRKbLC38vI/AAAAAAAABpk/I0jklh0nvbo/s1600/HANA_SBOOK_001.PNG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 205px;" src="http://2.bp.blogspot.com/-47UV2h_haNA/TtRKbLC38vI/AAAAAAAABpk/I0jklh0nvbo/s400/HANA_SBOOK_001.PNG" border="0" alt=""id="BLOGGER_PHOTO_ID_5680246860702806770" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-kVvzzjn4RTs/TtRKhEmmHHI/AAAAAAAABpw/D8oH0CfIHdU/s1600/HANA_SBOOK_002.PNG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 380px;" src="http://1.bp.blogspot.com/-kVvzzjn4RTs/TtRKhEmmHHI/AAAAAAAABpw/D8oH0CfIHdU/s400/HANA_SBOOK_002.PNG" border="0" alt=""id="BLOGGER_PHOTO_ID_5680246962052799602" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p&gt;El primer ejemplo que vamos a construir en "R" es un simple grafico de Pie, utilizando la informacion de los campos FORCURAM y CARRNAME.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-OEDt76IJKS4/TtRKwppKUaI/AAAAAAAABp8/nlAOxn3LTa8/s1600/HANA_SBOOK_003.PNG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 207px;" src="http://3.bp.blogspot.com/-OEDt76IJKS4/TtRKwppKUaI/AAAAAAAABp8/nlAOxn3LTa8/s400/HANA_SBOOK_003.PNG" border="0" alt=""id="BLOGGER_PHOTO_ID_5680247229693710754" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p&gt;En este ejemplo, basicamente estamos leyendo el archivo CSV, incluyendo la cabecera. Y haciendo una agregacion de los dos campos con los cuales queremos interactuar. Luego de eso, tan solo debemos pasar los valores, los nombres y llamar al grafico de pie.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-2XKqqZrAuDE/TtRK6yP6S6I/AAAAAAAABqI/gQgNIlEXJBs/s1600/HANA_SBOOK_004.PNG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 366px;" src="http://4.bp.blogspot.com/-2XKqqZrAuDE/TtRK6yP6S6I/AAAAAAAABqI/gQgNIlEXJBs/s400/HANA_SBOOK_004.PNG" border="0" alt=""id="BLOGGER_PHOTO_ID_5680247403802413986" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p&gt;El siguiente ejemplo es un poco mas complicado...y usa un paquete customizado llamado &lt;a href="http://cran.r-project.org/web/packages/wordcloud/index.html" target="_blank"&gt;Word Clouds&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-0kfi4UxE0Ss/TtRLD38KkKI/AAAAAAAABqU/oGihgxu0dpo/s1600/HANA_SBOOK_005.PNG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 230px;" src="http://4.bp.blogspot.com/-0kfi4UxE0Ss/TtRLD38KkKI/AAAAAAAABqU/oGihgxu0dpo/s400/HANA_SBOOK_005.PNG" border="0" alt=""id="BLOGGER_PHOTO_ID_5680247559949029538" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p&gt;Aqui, debemos cargar la librerias requeridas, leer el archivo CSV, hacer la agregacion, crear una matriz con los valores de la agregacion, ordenar la matriz, crear un vector, obtener su longitud, crear un array conteniendo los nombres y finalmente asignar los valores y llamar al metodo grafico wordcloud...&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-XjjTVoxQpVI/TtRLMMODJDI/AAAAAAAABqg/CRRsCfYvzh0/s1600/HANA_SBOOK_006.PNG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 376px;" src="http://2.bp.blogspot.com/-XjjTVoxQpVI/TtRLMMODJDI/AAAAAAAABqg/CRRsCfYvzh0/s400/HANA_SBOOK_006.PNG" border="0" alt=""id="BLOGGER_PHOTO_ID_5680247702831703090" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p&gt;Espero que les haya gustado...y esten pendientes para mas "R"...&lt;/p&gt;&lt;br /&gt;Saludos,&lt;br /&gt;&lt;br /&gt;Blag.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13698376-5307466594021607197?l=atejada.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atejada.blogspot.com/feeds/5307466594021607197/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13698376&amp;postID=5307466594021607197' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/5307466594021607197'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/5307466594021607197'/><link rel='alternate' type='text/html' href='http://atejada.blogspot.com/2011/11/trabajando-con-hana-y-r.html' title='Trabajando con HANA y R'/><author><name>Alvaro "Blag" Tejada Galindo</name><uri>http://www.blogger.com/profile/12061593528820409779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='https://weblogs.sdn.sap.com/images/people/alvaro_tajeda.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-VjKfBn3ha3A/TtRKUpgOf9I/AAAAAAAABpY/Zw5wE2cf3Bc/s72-c/HANA_SBOOK_000.PNG' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13698376.post-5657301517243911134</id><published>2011-11-18T10:15:00.002-08:00</published><updated>2011-11-18T10:20:45.288-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Misc'/><title type='text'>Sigue mis blogs en un solo Feed!</title><content type='html'>&lt;DIV ALIGN="JUSTIFY"&gt;&lt;br /&gt;Gracias a una contribucion de &lt;a href="http://consultoria-sap.blogspot.com/"&gt;Consultoria SAP&lt;/a&gt; ahora pueden seguir mis 2 blogs &lt;a href="http://atejada.blogspot.com"&gt;El Blog Tecnologico de Blag&lt;/a&gt; y &lt;a href="http://blagrants.blogspot.com"&gt;Blag's bag of rants&lt;/a&gt; utilizando un solo feed.&lt;br /&gt;&lt;DIV ALIGN="CENTER"&gt;&lt;p&gt;&lt;a href="http://feeds.feedburner.com/BlagBlogs"&gt;&lt;img src="http://feeds.feedburner.com/~fc/BlagBlogs?bg=99CCFF&amp;amp;fg=444444&amp;amp;anim=0" height="26" width="88" style="border:0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;/DIV&gt;&lt;br /&gt;Saludos,&lt;br /&gt;&lt;br /&gt;Blag.&lt;br /&gt;&lt;/DIV&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13698376-5657301517243911134?l=atejada.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atejada.blogspot.com/feeds/5657301517243911134/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13698376&amp;postID=5657301517243911134' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/5657301517243911134'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/5657301517243911134'/><link rel='alternate' type='text/html' href='http://atejada.blogspot.com/2011/11/gracias-una-contribucion-de-consultoria.html' title='Sigue mis blogs en un solo Feed!'/><author><name>Alvaro "Blag" Tejada Galindo</name><uri>http://www.blogger.com/profile/12061593528820409779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='https://weblogs.sdn.sap.com/images/people/alvaro_tajeda.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13698376.post-5406603482552704089</id><published>2011-11-01T05:00:00.000-07:00</published><updated>2011-11-01T05:03:47.352-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SAP'/><title type='text'>Y ahora...algunas noticias locas...</title><content type='html'>&lt;DIV ALIGN="JUSTIFY"&gt;&lt;br /&gt;Aquellos que me conocen en la vida real, saben que estoy loco por SAP...y lo digo en serio...de verdad amo SAP...&lt;br /&gt;&lt;br /&gt;Asi que...los amo tanto que, que creen? Voy a comenzar a trabajar oficialmente para ellos este 21 de Noviembre -:D&lt;br /&gt;&lt;br /&gt;Voy a tener el puesto de Development Expert en Platform Evangelism and Developer Adoption de SAP Labs.&lt;br /&gt;&lt;br /&gt;Las buenas noticias...voy a estar mas on-line que nunca, lo cual significa que voy a poder postear mas en el blog -:)&lt;br /&gt;&lt;br /&gt;Saludos,&lt;br /&gt;Blag.&lt;br /&gt;&lt;/DIV&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13698376-5406603482552704089?l=atejada.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atejada.blogspot.com/feeds/5406603482552704089/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13698376&amp;postID=5406603482552704089' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/5406603482552704089'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/5406603482552704089'/><link rel='alternate' type='text/html' href='http://atejada.blogspot.com/2011/11/y-ahoraalgunas-noticias-locas.html' title='Y ahora...algunas noticias locas...'/><author><name>Alvaro "Blag" Tejada Galindo</name><uri>http://www.blogger.com/profile/12061593528820409779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='https://weblogs.sdn.sap.com/images/people/alvaro_tajeda.jpg'/></author><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13698376.post-7667444748709801987</id><published>2011-07-15T06:28:00.000-07:00</published><updated>2011-07-15T06:40:10.396-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SAP'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>wxPython y SAP</title><content type='html'>&lt;DIV ALIGN="JUSTIFY"&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Post original: &lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/25483"&gt;Tasting the mix of Python and SAP - Volume 3&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Hola y bienvenidos de vuelta a este pequeño y divertido rincon de Lenguajes Script -:)&lt;br /&gt;&lt;br /&gt;Hoy dia, vamos a ver como podemos utilizar &lt;a href="http://www.wxpython.org/"&gt;wxPython&lt;/a&gt; y SAP para hacer una emulacion de la SE16.&lt;br /&gt;&lt;br /&gt;Asi que, que es wxPython? Es un wrapper en Python del &lt;a href="http://wxwidgets.org/"&gt;wxWidgets&lt;/a&gt; de C++ que nos ayuda a crear aplicaciones GUI enriquecidas.&lt;br /&gt;&lt;br /&gt;Para este blog estuve tentado a utilizar &lt;a href="http://en.wikipedia.org/wiki/Tkinter"&gt;Tkinter&lt;/a&gt; pero debo admitir que me gusta mas el wxPython...puesto que ya lo he utlizado antes para mis proyectos en &lt;a href="http://ruby-lang.org/"&gt;Ruby&lt;/a&gt;. Bueno, en Ruby era un poco mas facil que en Python -:P&lt;br /&gt;&lt;br /&gt;Basta de hablar, vamos al codigo fuente...(Eso se veria bien en un polo, no?)&lt;br /&gt;&lt;br /&gt;Nuevamente, y como siempre en mis proyectos Python/SAP...utilice YAML para guardar los parametros de conexion a SAP.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;sap.yml&lt;/span&gt;&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 95%;"&gt;&lt;br /&gt;ashost: localhost&lt;br /&gt;sysnr: "00"&lt;br /&gt;client: "001"&lt;br /&gt;lang: EN&lt;br /&gt;trace: 1&lt;br /&gt;loglevel: warn&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;SE16_wxPython.py&lt;/span&gt;&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 95%;"&gt;&lt;br /&gt;import wx&lt;br /&gt;import sapnwrfc&lt;br /&gt;import wx.grid as wxGrid&lt;br /&gt;&lt;br /&gt;conn = ""&lt;br /&gt;table = ""&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;class MyApp(wx.App):&lt;br /&gt;&lt;br /&gt;    def OnInit(self):&lt;br /&gt;        self.frame = MyFrame(None, title="Login")&lt;br /&gt;        self.SetTopWindow(self.frame)&lt;br /&gt;        self.frame.Show()&lt;br /&gt;        return True&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;class MyFrame(wx.Frame):&lt;br /&gt;&lt;br /&gt;    def __init__(self, parent, id=wx.ID_ANY, title="",&lt;br /&gt;                 pos=wx.DefaultPosition, size=(210, 150),&lt;br /&gt;                 style=wx.DEFAULT_FRAME_STYLE,&lt;br /&gt;                 name="MyFrame"):&lt;br /&gt;        super(MyFrame, self).__init__(parent, id, title, pos,&lt;br /&gt;                                      size, style, name)&lt;br /&gt;&lt;br /&gt;        self.panel = wx.Panel(self)&lt;br /&gt;        self.text_font = wx.Font(12, wx.DEFAULT, wx.NORMAL, wx.NORMAL)&lt;br /&gt;        self.t_user = wx.StaticText(self.panel, -1, "User", &lt;br /&gt;                                    size=(40, 20), pos=(10, 12))&lt;br /&gt;        self.t_password = wx.StaticText(self.panel, -1, "Password",&lt;br /&gt;        size=(40, 20), pos=(10, 32))&lt;br /&gt;        self.t_user.SetFont(self.text_font)&lt;br /&gt;        self.t_password.SetFont(self.text_font)&lt;br /&gt;        self.user = wx.TextCtrl(self.panel, value="", pos=(90, 10))&lt;br /&gt;        self.password = wx.TextCtrl(self.panel, value="", &lt;br /&gt;                                    pos=(90, 30), &lt;br /&gt;                                    style=wx.TE_PASSWORD)&lt;br /&gt;        self.btnConnect = wx.Button(self.panel, label="Connect", &lt;br /&gt;                                    pos=(70, 80))&lt;br /&gt;&lt;br /&gt;        self.Bind(wx.EVT_BUTTON, self.OnButtonConnect, &lt;br /&gt;                  self.btnConnect)&lt;br /&gt;&lt;br /&gt;    def OnButtonConnect(self, event):&lt;br /&gt;        global conn&lt;br /&gt;        user = self.user.GetValue()&lt;br /&gt;        password = self.password.GetValue()&lt;br /&gt;        sapnwrfc.base.config_location = "sap.yml"&lt;br /&gt;        sapnwrfc.base.load_config()&lt;br /&gt;        conn = sapnwrfc.base.rfc_connect({'user': user, &lt;br /&gt;                                          'passwd': password})&lt;br /&gt;        self.Close()&lt;br /&gt;        myGrid = GridFrame(None, title="SE16 Emulator")&lt;br /&gt;        myGrid.Show()&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;class GridFrame(wx.Frame):&lt;br /&gt;&lt;br /&gt;    def __init__(self, parent, id=wx.ID_ANY, title="",&lt;br /&gt;                 pos=wx.DefaultPosition, size=(600, 400),&lt;br /&gt;                 style=wx.DEFAULT_FRAME_STYLE,&lt;br /&gt;                 name="GridFrame"):&lt;br /&gt;        super(GridFrame, self).__init__(parent, id, title, pos,&lt;br /&gt;                                        size, style, name)&lt;br /&gt;&lt;br /&gt;        self.panel = wx.Panel(self)&lt;br /&gt;        self.text_font = wx.Font(12, wx.DEFAULT, wx.NORMAL, wx.NORMAL)&lt;br /&gt;        self.t_table = wx.StaticText(self.panel, -1, "Table", &lt;br /&gt;                                     size=(40, 20), pos=(180, 12))&lt;br /&gt;        self.t_table.SetFont(self.text_font)&lt;br /&gt;        self.table = wx.TextCtrl(self.panel, value="", pos=(225, 10))&lt;br /&gt;        self.btnShow = wx.Button(self.panel, label="Show Table",&lt;br /&gt;                                 pos=(330, 10))&lt;br /&gt;&lt;br /&gt;        self.Bind(wx.EVT_BUTTON, self.OnButtonShow, self.btnShow)&lt;br /&gt;&lt;br /&gt;    def OnButtonShow(self, event):&lt;br /&gt;        global conn&lt;br /&gt;        table = self.table.GetValue()&lt;br /&gt;        fields = []&lt;br /&gt;        fields_name = []&lt;br /&gt;        func_disc = conn.discover("RFC_READ_TABLE")&lt;br /&gt;        func = func_disc.create_function_call()&lt;br /&gt;        func.QUERY_TABLE(str(table))&lt;br /&gt;        func.DELIMITER("|")&lt;br /&gt;        func.invoke()&lt;br /&gt;        data_fields = func.DATA.value&lt;br /&gt;        data_names = func.FIELDS.value&lt;br /&gt;        long_fields = len(func.DATA())&lt;br /&gt;        long_names = len(func.FIELDS())&lt;br /&gt;&lt;br /&gt;        for line in range(0, long_fields):&lt;br /&gt;            fields.append(data_fields[line]["WA"].strip())&lt;br /&gt;        for line in range(0, long_names):&lt;br /&gt;            fields_name.append(data_names[line]["FIELDNAME"].strip())&lt;br /&gt;&lt;br /&gt;        self.grid = wxGrid.Grid(self.panel, pos=(0, 40), &lt;br /&gt;                                size=(853, 320))&lt;br /&gt;        self.grid.EnableEditing(False)&lt;br /&gt;        self.grid.CreateGrid(long_fields, long_names)&lt;br /&gt;&lt;br /&gt;        for line in range(0, long_names):&lt;br /&gt;            field_name = fields_name[line]&lt;br /&gt;            self.grid.SetColLabelValue(line, field_name)&lt;br /&gt;        for line_f in range(0, long_fields):&lt;br /&gt;            data_split = fields[line_f].split("|")&lt;br /&gt;            for line_n in range(0, long_names):&lt;br /&gt;                self.grid.SetCellValue(line_f, line_n, &lt;br /&gt;                                       data_split[line_n])&lt;br /&gt;&lt;br /&gt;    def onClose(self, event):&lt;br /&gt;        global conn&lt;br /&gt;        conn.close()&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;if __name__ == "__main__":&lt;br /&gt;    app = MyApp(False)&lt;br /&gt;    app.MainLoop() &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Ahora, las imagenes:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-0_-G2mOpWWw/TiA-MKvShjI/AAAAAAAABi0/aTcXC52us-c/s1600/wxPython_01.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 210px; height: 151px;" src="http://1.bp.blogspot.com/-0_-G2mOpWWw/TiA-MKvShjI/AAAAAAAABi0/aTcXC52us-c/s400/wxPython_01.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5629567912975173170" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-56kzujQgHOY/TiA-QpWfRWI/AAAAAAAABi8/5I1B0KBTpQM/s1600/wxPython_02.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 267px;" src="http://4.bp.blogspot.com/-56kzujQgHOY/TiA-QpWfRWI/AAAAAAAABi8/5I1B0KBTpQM/s400/wxPython_02.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5629567989912126818" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-7UQjsNzL1lA/TiA-hNstJFI/AAAAAAAABjE/tDOoBX3qEoQ/s1600/wxPython_03.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 266px;" src="http://4.bp.blogspot.com/-7UQjsNzL1lA/TiA-hNstJFI/AAAAAAAABjE/tDOoBX3qEoQ/s400/wxPython_03.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5629568274546893906" /&gt;&lt;/a&gt;&lt;br /&gt;Asi que, basicamente, lo que tenemos aca es una ventana de Logeo con el Nombre de Usuario y Password y un boton para conectarnos. Cuando nos conectamos a SAP, entonces la ventana desaparece y una nueva ventana aparece. Esta nueva ventana nos pide el nombre de la tabla y nos muestra un Grid conteniendo toda la informacion.&lt;br /&gt;&lt;br /&gt;Nos vemos la proxima vez -;)&lt;br /&gt;&lt;br /&gt;Blag.&lt;br /&gt;&lt;/DIV&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13698376-7667444748709801987?l=atejada.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atejada.blogspot.com/feeds/7667444748709801987/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13698376&amp;postID=7667444748709801987' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/7667444748709801987'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/7667444748709801987'/><link rel='alternate' type='text/html' href='http://atejada.blogspot.com/2011/07/wxpython-y-sap.html' title='wxPython y SAP'/><author><name>Alvaro "Blag" Tejada Galindo</name><uri>http://www.blogger.com/profile/12061593528820409779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='https://weblogs.sdn.sap.com/images/people/alvaro_tajeda.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-0_-G2mOpWWw/TiA-MKvShjI/AAAAAAAABi0/aTcXC52us-c/s72-c/wxPython_01.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13698376.post-1633176493418450471</id><published>2011-07-04T18:46:00.000-07:00</published><updated>2011-07-04T18:59:34.679-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Misc'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>Decimales a Romanos y Numeros LCD en Python</title><content type='html'>&lt;DIV ALIGN="JUSTIFY"&gt;&lt;br /&gt;Como parte de mi aprendizaje de Python, estoy tomando mis viejos codigos de Ruby y convirtiendolos a Python...y creanme...no hay mejor manera de aprender -:)&lt;br /&gt;&lt;br /&gt;El primer programa que tome fue &lt;span style="font-weight:bold;"&gt;Decimales a Romanos&lt;/span&gt;, el cual descubri que no estaba funcionando bien para numeros grandes -:( Luego de unos retoques con Python, esta listo para la accion -;)&lt;br /&gt;&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 95%;"&gt;&lt;br /&gt;Roman_Table = {1000: 'M', 900: 'CM', 500: 'D', 400: 'CD',&lt;br /&gt;               100: 'C', 90: 'XC', 50: 'L', 40: 'XL', &lt;br /&gt;               10: 'X', 9: 'IX', 5: 'V', 4: 'IV', 1: 'I'}&lt;br /&gt;&lt;br /&gt;global result&lt;br /&gt;keys = []&lt;br /&gt;&lt;br /&gt;def reverse_numeric(x, y):&lt;br /&gt;    return y - x&lt;br /&gt;&lt;br /&gt;def Roman_Number(number):&lt;br /&gt;    result = ""&lt;br /&gt;    keys = Roman_Table.keys()&lt;br /&gt;    keys = sorted(keys, cmp=reverse_numeric)&lt;br /&gt;    while number &gt; 0:&lt;br /&gt;        for i in keys:&lt;br /&gt;            if number &gt;= i:&lt;br /&gt;                result += str(Roman_Table.get(i, 0))&lt;br /&gt;                number -= i&lt;br /&gt;                break&lt;br /&gt;    return result&lt;br /&gt;&lt;br /&gt;number = input("\nEnter a number: ")&lt;br /&gt;result = Roman_Number(number)&lt;br /&gt;print ("\n" + result)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-5_WeU5vvN_w/ThJpC2K_czI/AAAAAAAABic/Ha_O-kkn7tw/s1600/Python_Dec_to_Romans.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 91px;" src="http://3.bp.blogspot.com/-5_WeU5vvN_w/ThJpC2K_czI/AAAAAAAABic/Ha_O-kkn7tw/s400/Python_Dec_to_Romans.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5625674382161441586" /&gt;&lt;/a&gt;&lt;br /&gt;El siguiente fue &lt;span style="font-weight:bold;"&gt;Numeros LCD&lt;/span&gt; el cual creanlo o no...logre bajar de las 160 lineas de codigo de Ruby, a solamente 35 lineas...impresionante, no?&lt;br /&gt;&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 95%;"&gt;&lt;br /&gt;global line1, line2, line3&lt;br /&gt;&lt;br /&gt;line1 = ""&lt;br /&gt;line2 = ""&lt;br /&gt;line3 = ""&lt;br /&gt;&lt;br /&gt;zero = {1: ' _  ', 2: '| | ', 3: '|_| '}&lt;br /&gt;one = {1: '  ', 2: '| ', 3: '| '}&lt;br /&gt;two = {1: ' _  ', 2: ' _| ', 3: '|_  '}&lt;br /&gt;three = {1: '_  ', 2: '_| ', 3: '_| '}&lt;br /&gt;four = {1: '    ', 2: '|_| ', 3: '  | '}&lt;br /&gt;five = {1: ' _  ', 2: '|_  ', 3: ' _| '}&lt;br /&gt;six = {1: ' _  ', 2: '|_  ', 3: '|_| '}&lt;br /&gt;seven = {1: '_   ', 2: ' |  ', 3: ' |  '}&lt;br /&gt;eight = {1: ' _  ', 2: '|_| ', 3: '|_| '}&lt;br /&gt;nine = {1: ' _  ', 2: '|_| ', 3: ' _| '}&lt;br /&gt;&lt;br /&gt;num_lines = {0: zero, 1: one, 2: two, 3: three, 4: four,&lt;br /&gt;             5: five, 6: six, 7: seven, 8: eight, 9: nine}&lt;br /&gt;&lt;br /&gt;def Lines(number):&lt;br /&gt;    global line1, line2, line3&lt;br /&gt;    line1 += number.get(1, 0)&lt;br /&gt;    line2 += number.get(2, 0)&lt;br /&gt;    line3 += number.get(3, 0)&lt;br /&gt;&lt;br /&gt;number = str(input("\nEnter a number: "))&lt;br /&gt;length = len(number)&lt;br /&gt;for i in range(0, length):&lt;br /&gt;    Lines(num_lines.get(int(number[i:i+1]), 0))&lt;br /&gt;&lt;br /&gt;print ("\n")&lt;br /&gt;print line1&lt;br /&gt;print line2&lt;br /&gt;print line3&lt;br /&gt;print ("\n")&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-B9XsvBAFty4/ThJqDJeZQXI/AAAAAAAABik/Dbt8RfAn7KU/s1600/Python_LCD_Numbers.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 133px;" src="http://2.bp.blogspot.com/-B9XsvBAFty4/ThJqDJeZQXI/AAAAAAAABik/Dbt8RfAn7KU/s400/Python_LCD_Numbers.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5625675486854726002" /&gt;&lt;/a&gt;&lt;br /&gt;Siento mucha pensa por Ruby, porque aun lo amo mucho...pero Python esta haciendo mucho esfuerzo para convertirse en mi lenguaje script favorito -;)&lt;br /&gt;&lt;br /&gt;Saludos,&lt;br /&gt;&lt;br /&gt;Blag.&lt;br /&gt;&lt;/DIV&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13698376-1633176493418450471?l=atejada.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atejada.blogspot.com/feeds/1633176493418450471/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13698376&amp;postID=1633176493418450471' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/1633176493418450471'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/1633176493418450471'/><link rel='alternate' type='text/html' href='http://atejada.blogspot.com/2011/07/decimales-romanos-y-numeros-lcd-en.html' title='Decimales a Romanos y Numeros LCD en Python'/><author><name>Alvaro "Blag" Tejada Galindo</name><uri>http://www.blogger.com/profile/12061593528820409779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='https://weblogs.sdn.sap.com/images/people/alvaro_tajeda.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-5_WeU5vvN_w/ThJpC2K_czI/AAAAAAAABic/Ha_O-kkn7tw/s72-c/Python_Dec_to_Romans.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13698376.post-821374509896219968</id><published>2011-06-22T07:00:00.000-07:00</published><updated>2011-06-22T07:07:41.263-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SAP'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>Python, EasyGui y SAP</title><content type='html'>&lt;DIV ALIGN="JUSTIFY"&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Post original: &lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/25142"&gt;Tasting the mix of Python and SAP - Volume 2&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;Este post continua con mis aventuras aprendiendo Python, y asi como amo los  Micro Frameworks Web, tambien amo los frameworks graficos simples...esta vez, vamos a utilizar &lt;a href="http://easygui.sourceforge.net/"&gt;EasyGui&lt;/a&gt;, que es un wrapper para &lt;a href="http://tkinter.unpythonic.net/wiki/Tkinter"&gt;Tkinter&lt;/a&gt; que es a su vez una capa para &lt;a href="http://en.wikipedia.org/wiki/Tk_(framework)"&gt;Tk&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Asi que cual el alboroto con EasyGui? Bueno...es una forma facil de hacer GUI's...entienden? Easy-Gui...Gui-Facil.&lt;br /&gt;&lt;br /&gt;Como sea, no es tan completo como TKinter pero de hecho es mas facil de aprender y programar. Basta de hablar...veamos el codigo fuente...&lt;br /&gt;&lt;br /&gt;Primero, use Yaml nuevamente para esconder la mayoria de los parametros de conexion del usuario.&lt;br /&gt;&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 95%;"&gt;&lt;br /&gt;ashost: localhost&lt;br /&gt;sysnr: "00"&lt;br /&gt;client: "001"&lt;br /&gt;lang: EN&lt;br /&gt;trace: 1&lt;br /&gt;loglevel: warn&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;SE16_EasyGui.py&lt;/span&gt;&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 95%;"&gt;&lt;br /&gt;from easygui import *&lt;br /&gt;import sapnwrfc&lt;br /&gt;&lt;br /&gt;TITLE = "Python (Easy Gui) &amp; SAP - SE16 Emulator"&lt;br /&gt;conn = ""&lt;br /&gt;table = ""&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;def Login():&lt;br /&gt;    global conn&lt;br /&gt;    msg = "Python (Easy Gui) &amp; SAP - SE16 Emulator"&lt;br /&gt;    title = "Login"&lt;br /&gt;    fieldNames = ["User", "Passwd"]&lt;br /&gt;    fieldValues = []&lt;br /&gt;    fieldValues = multpasswordbox(msg, title, fieldNames)&lt;br /&gt;    user, passwd = fieldValues[0], fieldValues[1]&lt;br /&gt;    sapnwrfc.base.config_location = "sap.yml"&lt;br /&gt;    sapnwrfc.base.load_config()&lt;br /&gt;    conn = sapnwrfc.base.rfc_connect({'user': user, 'passwd': passwd})&lt;br /&gt;    ChooseTable()&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;def ChooseTable():&lt;br /&gt;    global table&lt;br /&gt;    table = enterbox("Show Table")&lt;br /&gt;    if table != " ":&lt;br /&gt;        ShowTable()&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;def ShowTable():&lt;br /&gt;    global conn, table&lt;br /&gt;    fields = []&lt;br /&gt;    fields_name = []&lt;br /&gt;    fields_length = []&lt;br /&gt;    output = []&lt;br /&gt;    header = ""&lt;br /&gt;    lines = ""&lt;br /&gt;    separator = ""&lt;br /&gt;    counter = 0&lt;br /&gt;    func_disc = conn.discover("RFC_READ_TABLE")&lt;br /&gt;    func = func_disc.create_function_call()&lt;br /&gt;    func.QUERY_TABLE(table)&lt;br /&gt;    func.DELIMITER("|")&lt;br /&gt;    func.invoke()&lt;br /&gt;    data_fields = func.DATA.value&lt;br /&gt;    data_names = func.FIELDS.value&lt;br /&gt;    long_fields = len(func.DATA())&lt;br /&gt;    long_names = len(func.FIELDS())&lt;br /&gt;&lt;br /&gt;    for line in range(0, long_fields):&lt;br /&gt;        fields.append(data_fields[line]["WA"].strip())&lt;br /&gt;    for line in range(0, long_names):&lt;br /&gt;        counter = counter + 1&lt;br /&gt;        fields_name.append(data_names[line]["FIELDNAME"].strip())&lt;br /&gt;        fields_length.append(data_names[line]["LENGTH"].strip())&lt;br /&gt;&lt;br /&gt;    for line in range(0, long_names):&lt;br /&gt;        field_name = fields_name[line]&lt;br /&gt;        field_length = fields_length[line]&lt;br /&gt;        if len(field_name) &amp;gt; field_length:&lt;br /&gt;            field_length = len(field_name)&lt;br /&gt;        field_length = int(field_length) - len(field_name)&lt;br /&gt;        spaces = " " * int(field_length)&lt;br /&gt;        counter = counter + len(field_name) + len(spaces)&lt;br /&gt;        header = header + field_name + spaces + "|"&lt;br /&gt;&lt;br /&gt;    separator = "-" * counter&lt;br /&gt;    output.append(header)&lt;br /&gt;    output.append(separator)&lt;br /&gt;&lt;br /&gt;    for line in range(0, long_fields):&lt;br /&gt;        lines = ""&lt;br /&gt;        field_length = ""&lt;br /&gt;        spaces = ""&lt;br /&gt;        data_split = fields[line].split("|")&lt;br /&gt;        for line in range(0, long_names):&lt;br /&gt;            field_name = fields_name[line]&lt;br /&gt;            field_length = fields_length[line]&lt;br /&gt;            if len(field_name) &amp;gt; int(field_length):&lt;br /&gt;                field_length = len(field_name)&lt;br /&gt;                field_length = int(field_length) - &lt;br /&gt;                               len(data_split[line])&lt;br /&gt;            else:&lt;br /&gt;                field_length = 0&lt;br /&gt;            spaces = " " * int(field_length)&lt;br /&gt;            lines = lines + data_split[line] + spaces + "|"&lt;br /&gt;        output.append(lines)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    codebox("", TITLE, "\n".join(output))&lt;br /&gt;&lt;br /&gt;if __name__ == "__main__":&lt;br /&gt;    Login()&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Ahora, unas imagenes por supuesto -:)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-Rynr5k10V9M/TgHyZqSalpI/AAAAAAAABhk/7_IZlBpgTko/s1600/SE16_EasyGui_01.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 374px; height: 158px;" src="http://4.bp.blogspot.com/-Rynr5k10V9M/TgHyZqSalpI/AAAAAAAABhk/7_IZlBpgTko/s400/SE16_EasyGui_01.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5621040332597270162" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-O3wQ4_3YLGs/TgHyeK-CicI/AAAAAAAABhs/vNEJWpdhYwI/s1600/SE16_EasyGui_02.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 334px; height: 130px;" src="http://2.bp.blogspot.com/-O3wQ4_3YLGs/TgHyeK-CicI/AAAAAAAABhs/vNEJWpdhYwI/s400/SE16_EasyGui_02.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5621040410089654722" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-BufCXMTQTv4/TgHyoj1613I/AAAAAAAABh8/R98t4jGINSA/s1600/SE16_EasyGui_03.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 168px;" src="http://4.bp.blogspot.com/-BufCXMTQTv4/TgHyoj1613I/AAAAAAAABh8/R98t4jGINSA/s400/SE16_EasyGui_03.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5621040588565174130" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Espero que les haya gustado...nos vemos la proxima vez...&lt;br /&gt;&lt;br /&gt;Saludos,&lt;br /&gt;&lt;br /&gt;Blag.&lt;br /&gt;&lt;/DIV&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13698376-821374509896219968?l=atejada.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atejada.blogspot.com/feeds/821374509896219968/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13698376&amp;postID=821374509896219968' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/821374509896219968'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/821374509896219968'/><link rel='alternate' type='text/html' href='http://atejada.blogspot.com/2011/06/python-easygui-y-sap.html' title='Python, EasyGui y SAP'/><author><name>Alvaro "Blag" Tejada Galindo</name><uri>http://www.blogger.com/profile/12061593528820409779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='https://weblogs.sdn.sap.com/images/people/alvaro_tajeda.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-Rynr5k10V9M/TgHyZqSalpI/AAAAAAAABhk/7_IZlBpgTko/s72-c/SE16_EasyGui_01.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13698376.post-1853340113901844505</id><published>2011-06-22T06:49:00.000-07:00</published><updated>2011-06-22T07:00:35.961-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SAP'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>Python, Bottle, Flask y SAP</title><content type='html'>&lt;DIV ALIGN="JUSTIFY"&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Post original: &lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/25106"&gt;Tasting the mix of Python and SAP&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Ha pasado mucho tiempo desde mi ultimo "Tasting the mix of" blog post...pero aqui estamos para cambiar esto -;)&lt;br /&gt;&lt;br /&gt;Ultimamente, he estado aprediendo Python...un lenguaje de programacion sexy, poderoso y facil de aprender...asi que desde luego...cada vez que aprendo algo nuevo, quiero aplicarlo al mundo de SAP...y como tengo mucha suerte, &lt;a href="http://www.piersharding.com/blog/"&gt;Piers Harding&lt;/a&gt; ha creado un conector llamado Python SAPRfc -:D &lt;br /&gt;&lt;br /&gt;Asi que, con todo preparado y trabajando, empeze a trabajar en un emulador de SE16 utilizando una pantalla de DOS...pero luego me di cuenta de que aunque el no creo una SE16, mi buen amigo &lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/u/251752730"&gt;David Hull&lt;/a&gt; ya habia utilizado Python, SAPRfc y una pantalla DOS en su blog titulado &lt;a href="http://pypi.python.org/pypi/sapnwrfc/"&gt;Python and SAP Adventures&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Como ya habia trabajado antes con Micro Frameworks en Ruby, pense que seria una buena idea implementar lo mismo utilizando Python...asi que luego de un poco de investigacion, encontre dos interesantes candidatos (Notese que amo los Micro Frameworks y los Frameworks no tan populares...refiriendome a que no amo, no se y no utilizo Rails o Djanjo...me gusta mantener las cosas simples).&lt;br /&gt;&lt;br /&gt;Estos Micro Frameworks se llaman &lt;a href="http://bottlepy.org/"&gt;Bottle&lt;/a&gt; y &lt;a href="http://flask.pocoo.org/"&gt;Flask&lt;/a&gt; (Nombre raros, no?).&lt;br /&gt;&lt;br /&gt;Asi que para hacer las cosas simples, utilice YAML, donde utilizamos un archivo de configuracion donde vamos a poner nuestras cadenas de conexion...algo asi como el SAPLogon.ini&lt;br /&gt;&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 95%;"&gt;&lt;br /&gt;ashost: localhost&lt;br /&gt;sysnr: "00"&lt;br /&gt;client: "001"&lt;br /&gt;lang: EN&lt;br /&gt;trace: 1&lt;br /&gt;loglevel: warn&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Para los codigo fuentes, empecemos con Bottle.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;SE16_Bottle.py&lt;/span&gt;&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 95%;"&gt;&lt;br /&gt;from bottle import get, post, request, run, redirect, route&lt;br /&gt;import sapnwrfc&lt;br /&gt;&lt;br /&gt;conn = ""&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;@get('/login')&lt;br /&gt;def login_form():&lt;br /&gt;    return '''&amp;lt;DIV ALIGN='CENTER'&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;&lt;br /&gt;                &amp;lt;H1&amp;gt;Python (Bottle) &amp; SAP - SE16 Emulator&amp;lt;/H1&amp;gt;&lt;br /&gt;                &amp;lt;BR&amp;gt;&amp;lt;TABLE BORDER='1' BORDERCOLOR='BLUE' &lt;br /&gt;                     BGCOLOR='WHITE'&amp;gt;&lt;br /&gt;                &amp;lt;FORM METHOD='POST'&amp;gt;&lt;br /&gt;                &amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;User&amp;lt;/TD&amp;gt;&amp;lt;TD&amp;gt;&lt;br /&gt;                &amp;lt;INPUT TYPE='TEXT' NAME='User'&amp;gt;&amp;lt;/TD&amp;gt;&amp;lt;/TR&amp;gt;&lt;br /&gt;                &amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;Password&amp;lt;/TD&amp;gt;&lt;br /&gt;                &amp;lt;TD&amp;gt;&amp;lt;INPUT TYPE='PASSWORD' NAME='Passwd'&amp;gt;&amp;lt;/TD&amp;gt;&amp;lt;/TR&amp;gt;&lt;br /&gt;                &amp;lt;TR&amp;gt;&amp;lt;TD COLSPAN='2' ALIGN='CENTER'&amp;gt;&lt;br /&gt;                &amp;lt;INPUT TYPE='SUBMIT' value='Log In' NAME='LOG_IN'&amp;gt;&lt;br /&gt;                &amp;lt;INPUT TYPE='RESET' value='Clear'&amp;gt;&amp;lt;/TD&amp;gt;&amp;lt;/TR&amp;gt;&lt;br /&gt;                &amp;lt;/FORM&amp;gt;&lt;br /&gt;                &amp;lt;TABLE&amp;gt;&lt;br /&gt;              &amp;lt;/DIV&amp;gt;'''&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;@post('/login')&lt;br /&gt;def login_submit():&lt;br /&gt;    global conn&lt;br /&gt;    user = request.forms.get('User')&lt;br /&gt;    passwd = request.forms.get('Passwd')&lt;br /&gt;    sapnwrfc.base.config_location = "sap.yml"&lt;br /&gt;    sapnwrfc.base.load_config()&lt;br /&gt;    conn = sapnwrfc.base.rfc_connect({'user': user, 'passwd': passwd})&lt;br /&gt;    redirect("/choose")&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;@get('/choose')&lt;br /&gt;def choose_table():&lt;br /&gt;    return '''&amp;lt;CENTER&amp;gt;&lt;br /&gt;                &amp;lt;FORM METHOD='POST'&amp;gt;&lt;br /&gt;                &amp;lt;INPUT TYPE='TEXT' NAME='Table'&amp;gt;&amp;lt;BR&amp;gt;&lt;br /&gt;                &amp;lt;INPUT TYPE='SUBMIT' value='Show Table' &lt;br /&gt;                 NAME='Show_Table'&amp;gt;&lt;br /&gt;                &amp;lt;/FORM&amp;gt;&lt;br /&gt;              &amp;lt;/CENTER&amp;gt;'''&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;@post('/choose')&lt;br /&gt;def show_table():&lt;br /&gt;    global conn&lt;br /&gt;    fields = []&lt;br /&gt;    fields_name = []&lt;br /&gt;    table = request.forms.get('Table')&lt;br /&gt;    func_disc = conn.discover("RFC_READ_TABLE")&lt;br /&gt;    func = func_disc.create_function_call()&lt;br /&gt;    func.QUERY_TABLE(table)&lt;br /&gt;    func.DELIMITER("|")&lt;br /&gt;    func.invoke()&lt;br /&gt;    data_fields = func.DATA.value&lt;br /&gt;    data_names = func.FIELDS.value&lt;br /&gt;    long_fields = len(func.DATA())&lt;br /&gt;    long_names = len(func.FIELDS())&lt;br /&gt;&lt;br /&gt;    for line in range(0, long_fields):&lt;br /&gt;        fields.append(data_fields[line]["WA"].strip())&lt;br /&gt;    for line in range(0, long_names):&lt;br /&gt;        fields_name.append(data_names[line]["FIELDNAME"].strip())&lt;br /&gt;&lt;br /&gt;    output = "&amp;lt;table border='1'&amp;gt;&amp;lt;tr&amp;gt;"&lt;br /&gt;    for line in range(0, long_names):&lt;br /&gt;        field_name = fields_name[line]&lt;br /&gt;        output += "&amp;lt;th&amp;gt; %s &amp;lt;/th&amp;gt;" % field_name&lt;br /&gt;    output += "&amp;lt;/tr&amp;gt;"&lt;br /&gt;    for line in range(0, long_fields):&lt;br /&gt;        output += "&amp;lt;tr&amp;gt;"&lt;br /&gt;        data_split = fields[line].split("|")&lt;br /&gt;        for line in range(0, long_names):&lt;br /&gt;            output += "&amp;lt;td&amp;gt; %s &amp;lt;/td&amp;gt;" % data_split[line]&lt;br /&gt;        output += "&amp;lt;/tr&amp;gt;"&lt;br /&gt;    output += "&amp;lt;/table&amp;gt;"&lt;br /&gt;    return output&lt;br /&gt;    conn.close()&lt;br /&gt;&lt;br /&gt;run(host='localhost', port=8080)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-JfnjC_Rwhfg/TgHs1bb_1pI/AAAAAAAABg0/lIhY8LSIHbw/s1600/Bottle_SAP_01.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 270px;" src="http://4.bp.blogspot.com/-JfnjC_Rwhfg/TgHs1bb_1pI/AAAAAAAABg0/lIhY8LSIHbw/s400/Bottle_SAP_01.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5621034212577498770" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-5i_NZ6nqjmg/TgHs9XeoeSI/AAAAAAAABg8/rbPWD0dA_ZM/s1600/Bottle_SAP_02.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 270px;" src="http://1.bp.blogspot.com/-5i_NZ6nqjmg/TgHs9XeoeSI/AAAAAAAABg8/rbPWD0dA_ZM/s400/Bottle_SAP_02.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5621034348953762082" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-mRaWg5Bnlms/TgHtJIXfiMI/AAAAAAAABhE/RrEelGn5CF0/s1600/Bottle_SAP_03.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 270px;" src="http://3.bp.blogspot.com/-mRaWg5Bnlms/TgHtJIXfiMI/AAAAAAAABhE/RrEelGn5CF0/s400/Bottle_SAP_03.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5621034551055714498" /&gt;&lt;/a&gt;&lt;br /&gt;Ahora, continuemos con Flask:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;SE16_Flask.py&lt;/span&gt;&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 95%;"&gt;&lt;br /&gt;from flask import Flask, redirect, request&lt;br /&gt;import sapnwrfc&lt;br /&gt;app = Flask(__name__)&lt;br /&gt;&lt;br /&gt;conn = ""&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;@app.route("/")&lt;br /&gt;def login():&lt;br /&gt;    return '''&amp;lt;DIV ALIGN='CENTER'&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;&lt;br /&gt;                &amp;lt;H1&amp;gt;Python (Flask) &amp; SAP - SE16 Emulator&amp;lt;/H1&amp;gt;&lt;br /&gt;                &amp;lt;BR&amp;gt;&amp;lt;TABLE BORDER='1' BORDERCOLOR='BLUE' &lt;br /&gt;                     BGCOLOR='WHITE'&amp;gt;&lt;br /&gt;                &amp;lt;FORM ACTION='/login_submit' METHOD='POST'&amp;gt;&lt;br /&gt;                &amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;User&amp;lt;/TD&amp;gt;&amp;lt;TD&amp;gt;&lt;br /&gt;                &amp;lt;INPUT TYPE='TEXT' NAME='User'&amp;gt;&amp;lt;/TD&amp;gt;&amp;lt;/TR&amp;gt;&lt;br /&gt;                &amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;Password&amp;lt;/TD&amp;gt;&lt;br /&gt;                &amp;lt;TD&amp;gt;&amp;lt;INPUT TYPE='PASSWORD' NAME='Passwd'&amp;gt;&amp;lt;/TD&amp;gt;&amp;lt;/TR&amp;gt;&lt;br /&gt;                &amp;lt;TR&amp;gt;&amp;lt;TD COLSPAN='2' ALIGN='CENTER'&amp;gt;&lt;br /&gt;                &amp;lt;INPUT TYPE='SUBMIT' value='Log In' NAME='LOG_IN'&amp;gt;&lt;br /&gt;                &amp;lt;INPUT TYPE='RESET' value='Clear'&amp;gt;&amp;lt;/TD&amp;gt;&amp;lt;/TR&amp;gt;&lt;br /&gt;                &amp;lt;/FORM&amp;gt;&lt;br /&gt;                &amp;lt;TABLE&amp;gt;&lt;br /&gt;              &amp;lt;/DIV&amp;gt;'''&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;@app.route("/login_submit", methods=['GET', 'POST'])&lt;br /&gt;def login_submit():&lt;br /&gt;    global conn&lt;br /&gt;    if request.method == 'POST':&lt;br /&gt;        user = request.form['User']&lt;br /&gt;        passwd = request.form['Passwd']&lt;br /&gt;        sapnwrfc.base.config_location = "sap.yml"&lt;br /&gt;        sapnwrfc.base.load_config()&lt;br /&gt;        conn = sapnwrfc.base.rfc_connect({'user': user, &lt;br /&gt;                                          'passwd': passwd})&lt;br /&gt;        return redirect("/choose")&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;@app.route("/choose")&lt;br /&gt;def choose_table():&lt;br /&gt;    return '''&amp;lt;CENTER&amp;gt;&lt;br /&gt;                &amp;lt;FORM ACTION='/show' METHOD='POST'&amp;gt;&lt;br /&gt;                &amp;lt;INPUT TYPE='TEXT' NAME='Table'&amp;gt;&amp;lt;BR&amp;gt;&lt;br /&gt;                &amp;lt;INPUT TYPE='SUBMIT' value='Show Table' &lt;br /&gt;                 NAME='Show_Table'&amp;gt;&lt;br /&gt;                &amp;lt;/FORM&amp;gt;&lt;br /&gt;              &amp;lt;/CENTER&amp;gt;'''&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;@app.route("/show", methods=['GET', 'POST'])&lt;br /&gt;def show_table():&lt;br /&gt;    global conn&lt;br /&gt;    if request.method == 'POST':&lt;br /&gt;        fields = []&lt;br /&gt;        fields_name = []&lt;br /&gt;        table = str(request.form['Table'])&lt;br /&gt;        func_disc = conn.discover("RFC_READ_TABLE")&lt;br /&gt;        func = func_disc.create_function_call()&lt;br /&gt;        func.QUERY_TABLE(table)&lt;br /&gt;        func.DELIMITER("|")&lt;br /&gt;        func.invoke()&lt;br /&gt;        data_fields = func.DATA.value&lt;br /&gt;        data_names = func.FIELDS.value&lt;br /&gt;        long_fields = len(func.DATA())&lt;br /&gt;        long_names = len(func.FIELDS())&lt;br /&gt;&lt;br /&gt;        for line in range(0, long_fields):&lt;br /&gt;            fields.append(data_fields[line]["WA"].strip())&lt;br /&gt;        for line in range(0, long_names):&lt;br /&gt;            fields_name.append(data_names[line]["FIELDNAME"].strip())&lt;br /&gt;&lt;br /&gt;        output = "&amp;lt;table border='1'&amp;gt;&amp;lt;tr&amp;gt;"&lt;br /&gt;        for line in range(0, long_names):&lt;br /&gt;            field_name = fields_name[line]&lt;br /&gt;            output += "&amp;lt;th&amp;gt; %s &amp;lt;/th&amp;gt;" % field_name&lt;br /&gt;        output += "&amp;lt;/tr&amp;gt;"&lt;br /&gt;        for line in range(0, long_fields):&lt;br /&gt;            output += "&amp;lt;tr&amp;gt;"&lt;br /&gt;            data_split = fields[line].split("|")&lt;br /&gt;            for line in range(0, long_names):&lt;br /&gt;                output += "&amp;lt;td&amp;gt; %s &amp;lt;/td&amp;gt;" % data_split[line]&lt;br /&gt;            output += "&amp;lt;/tr&amp;gt;"&lt;br /&gt;        output += "&amp;lt;/table&amp;gt;"&lt;br /&gt;        return output&lt;br /&gt;        conn.close()&lt;br /&gt;&lt;br /&gt;if __name__ == "__main__":&lt;br /&gt;    app.run()&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-Bqvrn5eGkJ4/TgHwusK_kvI/AAAAAAAABhM/T3ul5XYA718/s1600/Flask_SAP_01.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 270px;" src="http://1.bp.blogspot.com/-Bqvrn5eGkJ4/TgHwusK_kvI/AAAAAAAABhM/T3ul5XYA718/s400/Flask_SAP_01.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5621038494857007858" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-AguYclRf8vY/TgHwzeDYJhI/AAAAAAAABhU/yDAmAy9t61k/s1600/Flask_SAP_02.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 270px;" src="http://1.bp.blogspot.com/-AguYclRf8vY/TgHwzeDYJhI/AAAAAAAABhU/yDAmAy9t61k/s400/Flask_SAP_02.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5621038576966313490" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-HQkAgJM5aWM/TgHw4L3_ELI/AAAAAAAABhc/Mv6RFLyYgCI/s1600/Flask_SAP_03.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 270px;" src="http://3.bp.blogspot.com/-HQkAgJM5aWM/TgHw4L3_ELI/AAAAAAAABhc/Mv6RFLyYgCI/s400/Flask_SAP_03.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5621038657986039986" /&gt;&lt;/a&gt;&lt;br /&gt;Mismo resultado, diferentes Micro Frameworks...excelente, no?&lt;br /&gt;&lt;br /&gt;Nos vemos pronto con otra receta para el "Tasting the mix of..."&lt;br /&gt;&lt;br /&gt;Saludos,&lt;br /&gt;&lt;br /&gt;Blag.&lt;br /&gt;&lt;/DIV&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13698376-1853340113901844505?l=atejada.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atejada.blogspot.com/feeds/1853340113901844505/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13698376&amp;postID=1853340113901844505' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/1853340113901844505'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/1853340113901844505'/><link rel='alternate' type='text/html' href='http://atejada.blogspot.com/2011/06/python-bottle-flask-y-sap.html' title='Python, Bottle, Flask y SAP'/><author><name>Alvaro "Blag" Tejada Galindo</name><uri>http://www.blogger.com/profile/12061593528820409779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='https://weblogs.sdn.sap.com/images/people/alvaro_tajeda.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-JfnjC_Rwhfg/TgHs1bb_1pI/AAAAAAAABg0/lIhY8LSIHbw/s72-c/Bottle_SAP_01.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13698376.post-2501253753245400159</id><published>2011-05-25T13:15:00.000-07:00</published><updated>2011-05-25T13:24:19.154-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Misc'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>Tic-Tac-Toe - Un juego en Python</title><content type='html'>&lt;DIV ALIGN="JUSTIFY"&gt;&lt;br /&gt;Python? Es un los mejores lenguajes de programacion? Si que lo es -:)&lt;br /&gt;Asi es, comence a aprender Python hace un par de semanas...un mes quizas...asi que como empece?&lt;br /&gt;&lt;br /&gt;Ya conocia Python por nombre desde hace mucho tiempo...haciendo cosas en Ruby sabia que Ruby hereda muchas cosas de Python (y de Perl tambien), pero nunca le di mucha importancia.&lt;br /&gt;&lt;br /&gt;Un dia, me dije a mi mismo...tienes que aprender Python! se ve como un buen lenguaje...asi que me embarque en el viaje de aprender un nuevo lenguaje de programacion.&lt;br /&gt;La mayoria de gente que usa Python dice "Python es facil de aprender, es sexy, te hace escribir codigo bonito"...y saben que? Es totalmente cierto -:)&lt;br /&gt;&lt;br /&gt;Asi que, como parte de mi proceso de aprendizaje tome un Tic-Tac-Toe que hice en Ruby 5 anhos atras y lo converti a Python...creanlo o no...el codigo es mas robusto y logre reducir el codigo en 38 lineas menos...excelente, no?&lt;br /&gt;&lt;br /&gt;Asi que aqui esta el codigo...y recuerden que soy un novato en Python...asi que no vengan con su "Oh, si fueras un verdadero Pythonista, harias las cosas asi"...porque no soy un Pythonista...por lo menos no todavia -;) Soy un &lt;a href="http://en.wikipedia.org/wiki/Abap"&gt;ABAPista&lt;/a&gt; -:P&lt;br /&gt;&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 95%;"&gt;&lt;br /&gt;#TIC_TAC_TOE&lt;br /&gt;#Made by Blag - 2011&lt;br /&gt;&lt;br /&gt;game = False&lt;br /&gt;coordenates = ""&lt;br /&gt;player_won = ""&lt;br /&gt;player_turn = "1"&lt;br /&gt;line1 = ""&lt;br /&gt;line2 = ""&lt;br /&gt;line3 = ""&lt;br /&gt;line4 = ""&lt;br /&gt;line5 = ""&lt;br /&gt;&lt;br /&gt;board_array = [" ", " ", " ", " ", " ", " ", " ", " ", " "]&lt;br /&gt;played_moves = [" ", " ", " ", " ", " ", " ", " ", " ", " "]&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;def clean_lines():&lt;br /&gt;    line1 = " "&lt;br /&gt;    line2 = " "&lt;br /&gt;    line3 = " "&lt;br /&gt;    line4 = " "&lt;br /&gt;    line5 = " "&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;def initial_board():&lt;br /&gt;    clean_lines()&lt;br /&gt;    line1 = "   |   |   "&lt;br /&gt;    line2 = "---+---+---"&lt;br /&gt;    line3 = "   |   |   "&lt;br /&gt;    line4 = "---+---+---"&lt;br /&gt;    line5 = "   |   |   "&lt;br /&gt;&lt;br /&gt;    print "\n"&lt;br /&gt;    print (line1)&lt;br /&gt;    print (line2)&lt;br /&gt;    print (line3)&lt;br /&gt;    print (line4)&lt;br /&gt;    print (line5)&lt;br /&gt;    print "\n"&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;def board(coordenates, player):&lt;br /&gt;    clean_lines()&lt;br /&gt;&lt;br /&gt;    if board_array[coordenates] == " ":&lt;br /&gt;        board_array[coordenates] = player&lt;br /&gt;    else:&lt;br /&gt;        cheat = True&lt;br /&gt;&lt;br /&gt;    Move_1 = board_array[0]&lt;br /&gt;    Move_2 = board_array[1]&lt;br /&gt;    Move_3 = board_array[2]&lt;br /&gt;    Move_4 = board_array[3]&lt;br /&gt;    Move_5 = board_array[4]&lt;br /&gt;    Move_6 = board_array[5]&lt;br /&gt;    Move_7 = board_array[6]&lt;br /&gt;    Move_8 = board_array[7]&lt;br /&gt;    Move_9 = board_array[8]&lt;br /&gt;&lt;br /&gt;    print "\n"&lt;br /&gt;    print " %s | %s | %s " % (Move_1, Move_2, Move_3)&lt;br /&gt;    print "---+---+---"&lt;br /&gt;    print " %s | %s | %s " % (Move_4, Move_5, Move_6)&lt;br /&gt;    print "---+---+--- "&lt;br /&gt;    print " %s | %s | %s " % (Move_7, Move_8, Move_9)&lt;br /&gt;    print "\n\n"&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;def print_winner(player):&lt;br /&gt;    print "Player ", player, " won\n\n"&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;def check_who_wins():&lt;br /&gt;    game = False&lt;br /&gt;    if (board_array[0] != " " and board_array[0] == board_array[1] and&lt;br /&gt;        board_array[1] == board_array[2]):&lt;br /&gt;        game = True&lt;br /&gt;        if board_array[0] == "*":&lt;br /&gt;            print_winner(1)&lt;br /&gt;        else:&lt;br /&gt;            print_winner(2)&lt;br /&gt;&lt;br /&gt;    if (board_array[3] != " " and board_array[3] == board_array[4] and&lt;br /&gt;        board_array[4] == board_array[5]):&lt;br /&gt;        game = True&lt;br /&gt;        if board_array[3] == "*":&lt;br /&gt;            print_winner(1)&lt;br /&gt;        else:&lt;br /&gt;            print_winner(2)&lt;br /&gt;&lt;br /&gt;    if (board_array[0] != " " and board_array[0] == board_array[3] and&lt;br /&gt;        board_array[3] == board_array[6]):&lt;br /&gt;        game = True&lt;br /&gt;        if board_array[0] == "*":&lt;br /&gt;            print_winner(1)&lt;br /&gt;        else:&lt;br /&gt;            print_winner(2)&lt;br /&gt;&lt;br /&gt;    if (board_array[1] != " " and board_array[1] == board_array[4] and&lt;br /&gt;        board_array[4] == board_array[7]):&lt;br /&gt;        game = True&lt;br /&gt;        if board_array[1] == "*":&lt;br /&gt;            print_winner(1)&lt;br /&gt;        else:&lt;br /&gt;            print_winner(2)&lt;br /&gt;&lt;br /&gt;    if (board_array[2] != " " and board_array[2] == board_array[5] and&lt;br /&gt;        board_array[5] == board_array[8]):&lt;br /&gt;        game = True&lt;br /&gt;&lt;br /&gt;        if board_array[2] == "*":&lt;br /&gt;            print_winner(1)&lt;br /&gt;        else:&lt;br /&gt;            print_winner(2)&lt;br /&gt;&lt;br /&gt;    if (board_array[0] != " " and board_array[0] == board_array[4] and&lt;br /&gt;        board_array[4] == board_array[8]):&lt;br /&gt;        game = True&lt;br /&gt;        if board_array[0] == "*":&lt;br /&gt;            print_winner(1)&lt;br /&gt;        else:&lt;br /&gt;            print_winner(2)&lt;br /&gt;&lt;br /&gt;    if (board_array[2] != " " and board_array[2] == board_array[4] and&lt;br /&gt;        board_array[4] == board_array[6]):&lt;br /&gt;        game = True&lt;br /&gt;        if board_array[2] == "*":&lt;br /&gt;            print_winner(1)&lt;br /&gt;        else:&lt;br /&gt;            print_winner(2)&lt;br /&gt;&lt;br /&gt;    wins = 0&lt;br /&gt;&lt;br /&gt;    for board in board_array:&lt;br /&gt;        if board != " ":&lt;br /&gt;            wins += 1&lt;br /&gt;&lt;br /&gt;    if wins == 9:&lt;br /&gt;        game = True&lt;br /&gt;        print "It's a Tie'.\n\n"&lt;br /&gt;&lt;br /&gt;    return game&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;def make_move(player_turn, game, coordenates):&lt;br /&gt;    index_coordenates = 0&lt;br /&gt;    if game == False:&lt;br /&gt;        cheat = False&lt;br /&gt;        if player_turn == "1":&lt;br /&gt;            coordenates = input("Player 1: ")&lt;br /&gt;            coordenates = coordenates&lt;br /&gt;            if coordenates &amp;lt;= 0 or coordenates &amp;gt; 9:&lt;br /&gt;                print "Please, only values from 1 to 9\n"&lt;br /&gt;                make_move(player_turn, game, coordenates)&lt;br /&gt;            for moves in played_moves:&lt;br /&gt;                if moves == coordenates:&lt;br /&gt;                    cheat = True&lt;br /&gt;            if cheat == True:&lt;br /&gt;                cheat = False&lt;br /&gt;                print "That move was already made!\n"&lt;br /&gt;                make_move(player_turn, game, coordenates)&lt;br /&gt;            index_coordenates = coordenates - 1&lt;br /&gt;            played_moves[index_coordenates] = coordenates&lt;br /&gt;            player = "*"&lt;br /&gt;            board(index_coordenates, player)&lt;br /&gt;            game = check_who_wins()&lt;br /&gt;&lt;br /&gt;    if game == False:&lt;br /&gt;        cheat = False&lt;br /&gt;        player_turn = "2"&lt;br /&gt;        if player_turn == "2":&lt;br /&gt;            coordenates = input("Player 2: ")&lt;br /&gt;            coordenates = coordenates&lt;br /&gt;            if coordenates &amp;lt;= 0 or coordenates &amp;gt; 9:&lt;br /&gt;                print "Please, only values from 1 to 9\n"&lt;br /&gt;                make_move(player_turn, game, coordenates)&lt;br /&gt;&lt;br /&gt;            for moves in played_moves:&lt;br /&gt;                if moves == coordenates:&lt;br /&gt;                    cheat = True&lt;br /&gt;&lt;br /&gt;            if cheat == True:&lt;br /&gt;                cheat = False&lt;br /&gt;                print "That move was already made!\n"&lt;br /&gt;                make_move(player_turn, game, coordenates)&lt;br /&gt;&lt;br /&gt;            index_coordenates = coordenates - 1&lt;br /&gt;            played_moves[index_coordenates] = coordenates&lt;br /&gt;            player = "O"&lt;br /&gt;            board(index_coordenates, player)&lt;br /&gt;            game = check_who_wins()&lt;br /&gt;            player_turn = "1"&lt;br /&gt;    return game&lt;br /&gt;&lt;br /&gt;initial_board()&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;while(game == False):&lt;br /&gt;    game = make_move(player_turn, game, coordenates)&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-5TQ_tVye9yc/TdZgUG11EpI/AAAAAAAABfc/vDGuiSS6xI8/s1600/Python_Tic_Tac_Toe_01.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 314px; height: 362px;" src="http://2.bp.blogspot.com/-5TQ_tVye9yc/TdZgUG11EpI/AAAAAAAABfc/vDGuiSS6xI8/s400/Python_Tic_Tac_Toe_01.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5608776284486570642" /&gt;&lt;/a&gt;&lt;br /&gt;Saludos,&lt;br /&gt;&lt;br /&gt;Blag.&lt;br /&gt;&lt;/DIV&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13698376-2501253753245400159?l=atejada.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atejada.blogspot.com/feeds/2501253753245400159/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13698376&amp;postID=2501253753245400159' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/2501253753245400159'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/2501253753245400159'/><link rel='alternate' type='text/html' href='http://atejada.blogspot.com/2011/05/tic-tac-toe-un-juego-en-python.html' title='Tic-Tac-Toe - Un juego en Python'/><author><name>Alvaro "Blag" Tejada Galindo</name><uri>http://www.blogger.com/profile/12061593528820409779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='https://weblogs.sdn.sap.com/images/people/alvaro_tajeda.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-5TQ_tVye9yc/TdZgUG11EpI/AAAAAAAABfc/vDGuiSS6xI8/s72-c/Python_Tic_Tac_Toe_01.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13698376.post-7518682494226914278</id><published>2010-12-02T12:23:00.000-08:00</published><updated>2010-12-03T06:41:51.776-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Non_Sense'/><category scheme='http://www.blogger.com/atom/ns#' term='ABAP'/><title type='text'>Programming non-sense #2</title><content type='html'>&lt;DIV ALIGN="JUSTIFY"&gt;&lt;br /&gt;Uno de mis hobbies es hacer que el ABAP haga cosas para las que no ha sido exactamente diseñando...asi que cuando aprendi a poner color a las celdas del ALV...siempre tuve la idea de hacer algo con eso...entonces, se me ocurrio hacer una especie de Paint.&lt;br /&gt;&lt;br /&gt;En este caso, tenemos 4 colores disponibles, lo cuales se activan haciendo doble click en cada una de las celdas...si la celda esta en blanco y hacemos doble click...cambia de color, si volvemos a hacer doble click, cambia nuevamente...y asi hasta que regresa a blanco y continua.&lt;br /&gt;&lt;br /&gt;Esta es la imagen para que se hagan una idea...&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_eKAKUbdu3CI/TPgBdN3gDKI/AAAAAAAABZo/vTXTgLkCyA0/s1600/ALV_Paiting.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 170px;" src="http://3.bp.blogspot.com/_eKAKUbdu3CI/TPgBdN3gDKI/AAAAAAAABZo/vTXTgLkCyA0/s400/ALV_Paiting.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5546184542557047970" /&gt;&lt;/a&gt;&lt;br /&gt;Y este el codigo fuente...espero que les guste -;)&lt;br /&gt;&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 95%;"&gt;&lt;br /&gt;REPORT zalv_painting NO STANDARD PAGE HEADING.&lt;br /&gt;&lt;br /&gt;TYPE-POOLS: abap.&lt;br /&gt;CLASS lcl_event_receiver DEFINITION DEFERRED.&lt;br /&gt;&lt;br /&gt;DATA: it_fieldcatalog TYPE lvc_t_fcat,&lt;br /&gt;      wa_fcat TYPE lvc_s_fcat,&lt;br /&gt;      dataref TYPE REF TO data,&lt;br /&gt;      new_line TYPE REF TO data,&lt;br /&gt;      l_fieldname TYPE string,&lt;br /&gt;      data_catalog TYPE REF TO data,&lt;br /&gt;      t_stable TYPE STANDARD TABLE OF&lt;br /&gt;      lvc_s_stbl WITH HEADER LINE,&lt;br /&gt;      ct_fieldcat TYPE lvc_t_fcat,&lt;br /&gt;      gs_layout TYPE lvc_s_layo,&lt;br /&gt;      gs_variant TYPE disvariant,&lt;br /&gt;      custom_container TYPE REF TO&lt;br /&gt;      cl_gui_custom_container,&lt;br /&gt;      it_color TYPE TABLE OF lvc_s_scol,&lt;br /&gt;      it_color_aux TYPE TABLE OF lvc_s_scol,&lt;br /&gt;      wa_color_aux TYPE lvc_s_scol,&lt;br /&gt;      it_celltab TYPE lvc_t_styl,&lt;br /&gt;      event_receiver TYPE REF TO lcl_event_receiver,&lt;br /&gt;      grid1 TYPE REF TO cl_gui_alv_grid,&lt;br /&gt;      mycontainer TYPE scrfname VALUE 'CUSTOM_ALV',&lt;br /&gt;      ls_celltab TYPE lvc_s_styl,&lt;br /&gt;      wa_color TYPE lvc_s_scol,&lt;br /&gt;      l_color TYPE lvc_col,&lt;br /&gt;      l_tabix(2) TYPE c,&lt;br /&gt;      ok_code TYPE sy-ucomm,&lt;br /&gt;      x_save.&lt;br /&gt;&lt;br /&gt;FIELD-SYMBOLS: &amp;lt;row&amp;gt; TYPE table,&lt;br /&gt;               &amp;lt;l_line&amp;gt; TYPE ANY,&lt;br /&gt;               &amp;lt;l_field&amp;gt; TYPE ANY,&lt;br /&gt;               &amp;lt;fs_catalog&amp;gt; TYPE lvc_s_fcat,&lt;br /&gt;               &amp;lt;fs_color&amp;gt; LIKE LINE OF it_color,&lt;br /&gt;               &amp;lt;fs_color_aux&amp;gt; LIKE LINE OF it_color_aux,&lt;br /&gt;               &amp;lt;ct_fieldcat&amp;gt; LIKE LINE OF ct_fieldcat.&lt;br /&gt;&lt;br /&gt;*-----------------------------------------------------*&lt;br /&gt;* CLASS LCL_EVENT_RECEIVER DEFINITION                 *&lt;br /&gt;*-----------------------------------------------------*&lt;br /&gt;CLASS lcl_event_receiver DEFINITION.&lt;br /&gt;  PUBLIC SECTION.&lt;br /&gt;    METHODS: handle_double_click&lt;br /&gt;             FOR EVENT double_click OF cl_gui_alv_grid&lt;br /&gt;             IMPORTING e_row e_column.&lt;br /&gt;ENDCLASS. "LCL_EVENT_RECEIVER DEFINITION&lt;br /&gt;&lt;br /&gt;*-----------------------------------------------------*&lt;br /&gt;* CLASS lcl_event_receiver IMPLEMENTATION             *&lt;br /&gt;*-----------------------------------------------------*&lt;br /&gt;CLASS lcl_event_receiver IMPLEMENTATION.&lt;br /&gt;  METHOD handle_double_click.&lt;br /&gt;    PERFORM paint_cell USING e_row e_column.&lt;br /&gt;  ENDMETHOD.                    "handle_double_click&lt;br /&gt;ENDCLASS. "LCL_EVENT_RECEIVER IMPLEMENTATION&lt;br /&gt;&lt;br /&gt;*=====================================================*&lt;br /&gt;* START-OF-SELECTION                                  *&lt;br /&gt;*=====================================================*&lt;br /&gt;START-OF-SELECTION.&lt;br /&gt;  PERFORM create_structure.&lt;br /&gt;  PERFORM fill_layout.&lt;br /&gt;  PERFORM generate_alv_catalog.&lt;br /&gt;  PERFORM call_alv.&lt;br /&gt;  CALL SCREEN 0100.&lt;br /&gt;&lt;br /&gt;*&amp;----------------------------------------------------*&lt;br /&gt;*&amp;      Form  CREATE_STRUCTURE                        *&lt;br /&gt;*&amp;----------------------------------------------------*&lt;br /&gt;FORM create_structure.&lt;br /&gt;&lt;br /&gt;  DO 20 TIMES.&lt;br /&gt;    l_tabix = l_tabix + 1.&lt;br /&gt;    CONCATENATE 'FIELD' l_tabix INTO l_fieldname.&lt;br /&gt;    wa_fcat-fieldname = l_fieldname.&lt;br /&gt;    wa_fcat-ref_table = 'PERF_STRING_STRUCT'.&lt;br /&gt;    wa_fcat-ref_field = 'DATA'.&lt;br /&gt;    APPEND wa_fcat TO it_fieldcatalog.&lt;br /&gt;  ENDDO.&lt;br /&gt;&lt;br /&gt;  wa_fcat-fieldname     = 'COLOR'.&lt;br /&gt;  wa_fcat-ref_table     = 'PERF_STRING_STRUCT'.&lt;br /&gt;  wa_fcat-ref_field     = 'DATA'.&lt;br /&gt;  APPEND wa_fcat TO it_fieldcatalog.&lt;br /&gt;&lt;br /&gt;  wa_fcat-fieldname     = 'COLOR_CELL'.&lt;br /&gt;  wa_fcat-ref_table     = 'RESC_DEFAULT_ALV_FIELDS'.&lt;br /&gt;  wa_fcat-ref_field     = 'COLORTAB'.&lt;br /&gt;  APPEND wa_fcat TO it_fieldcatalog.&lt;br /&gt;&lt;br /&gt;  CALL METHOD cl_alv_table_create=&amp;gt;create_dynamic_table&lt;br /&gt;    EXPORTING&lt;br /&gt;      it_fieldcatalog           = it_fieldcatalog&lt;br /&gt;    IMPORTING&lt;br /&gt;      ep_table                  = dataref&lt;br /&gt;    EXCEPTIONS&lt;br /&gt;      generate_subpool_dir_full = 1&lt;br /&gt;      OTHERS                    = 2.&lt;br /&gt;&lt;br /&gt;  ASSIGN dataref-&amp;gt;* TO &amp;lt;row&amp;gt;.&lt;br /&gt;  CREATE DATA new_line LIKE LINE OF &amp;lt;row&amp;gt;.&lt;br /&gt;  ASSIGN new_line-&amp;gt;* TO &amp;lt;l_line&amp;gt;.&lt;br /&gt;&lt;br /&gt;  DO 40 TIMES.&lt;br /&gt;    INSERT &amp;lt;l_line&amp;gt; INTO TABLE &amp;lt;row&amp;gt;.&lt;br /&gt;  ENDDO.&lt;br /&gt;&lt;br /&gt;ENDFORM.                    " CREATE_STRUCTURE&lt;br /&gt;&lt;br /&gt;*&amp;----------------------------------------------------*&lt;br /&gt;*&amp;      Form  FILL_LAYOUT                             *&lt;br /&gt;*&amp;----------------------------------------------------*&lt;br /&gt;FORM fill_layout.&lt;br /&gt;&lt;br /&gt;  gs_layout-sel_mode = 'A'.&lt;br /&gt;  gs_layout-ctab_fname = 'COLOR_CELL'.&lt;br /&gt;&lt;br /&gt;ENDFORM.                    " FILL_LAYOUT&lt;br /&gt;&lt;br /&gt;*&amp;-----------------------------------------------------*&lt;br /&gt;*&amp;      Form  GENERATE_ALV_CATALOG                     *&lt;br /&gt;*&amp;-----------------------------------------------------*&lt;br /&gt;FORM generate_alv_catalog.&lt;br /&gt;&lt;br /&gt;  CREATE DATA data_catalog TYPE lvc_s_fcat.&lt;br /&gt;  ASSIGN data_catalog-&amp;gt;* TO &amp;lt;fs_catalog&amp;gt;.&lt;br /&gt;&lt;br /&gt;  CLEAR l_tabix.&lt;br /&gt;&lt;br /&gt;  DO 20 TIMES.&lt;br /&gt;    l_tabix = l_tabix + 1.&lt;br /&gt;    CONCATENATE 'FIELD' l_tabix INTO l_fieldname.&lt;br /&gt;    APPEND INITIAL LINE TO ct_fieldcat&lt;br /&gt;    ASSIGNING &amp;lt;ct_fieldcat&amp;gt;.&lt;br /&gt;    &amp;lt;ct_fieldcat&amp;gt;-fieldname = l_fieldname.&lt;br /&gt;  ENDDO.&lt;br /&gt;&lt;br /&gt;ENDFORM.                    " GENERATE_ALV_CATALOG&lt;br /&gt;&lt;br /&gt;*&amp;------------------------------------------------------*&lt;br /&gt;*&amp;      Form  CALL_ALV                                  *&lt;br /&gt;*&amp;------------------------------------------------------*&lt;br /&gt;FORM call_alv.&lt;br /&gt;&lt;br /&gt;  IF custom_container IS INITIAL.&lt;br /&gt;    CREATE OBJECT custom_container&lt;br /&gt;      EXPORTING&lt;br /&gt;        container_name              = mycontainer&lt;br /&gt;      EXCEPTIONS&lt;br /&gt;        cntl_error                  = 1&lt;br /&gt;        cntl_system_error           = 2&lt;br /&gt;        create_error                = 3&lt;br /&gt;        lifetime_error              = 4&lt;br /&gt;        lifetime_dynpro_dynpro_link = 5.&lt;br /&gt;  ENDIF.&lt;br /&gt;&lt;br /&gt;  CREATE OBJECT grid1&lt;br /&gt;    EXPORTING&lt;br /&gt;      i_parent = custom_container.&lt;br /&gt;&lt;br /&gt;  CREATE OBJECT event_receiver.&lt;br /&gt;&lt;br /&gt;  SET HANDLER event_receiver-&amp;gt;handle_double_click FOR grid1.&lt;br /&gt;&lt;br /&gt;  CALL METHOD grid1-&amp;gt;set_table_for_first_display&lt;br /&gt;    EXPORTING&lt;br /&gt;      is_variant      = gs_variant&lt;br /&gt;      i_save          = x_save&lt;br /&gt;      i_default       = 'X'&lt;br /&gt;      is_layout       = gs_layout&lt;br /&gt;    CHANGING&lt;br /&gt;      it_fieldcatalog = ct_fieldcat&lt;br /&gt;      it_outtab       = &amp;lt;row&amp;gt;.&lt;br /&gt;&lt;br /&gt;ENDFORM.                    " CALL_ALV&lt;br /&gt;&lt;br /&gt;*&amp;----------------------------------------------------*&lt;br /&gt;*&amp;      Module  STATUS_0100  OUTPUT                   *&lt;br /&gt;*&amp;----------------------------------------------------*&lt;br /&gt;MODULE status_0100 OUTPUT.&lt;br /&gt;&lt;br /&gt;  SET PF-STATUS '0100'.&lt;br /&gt;  SET TITLEBAR 'TITLE'.&lt;br /&gt;&lt;br /&gt;ENDMODULE.                 " STATUS_0100  OUTPUT&lt;br /&gt;&lt;br /&gt;*&amp;----------------------------------------------------*&lt;br /&gt;*&amp;      Module  USER_COMMAND_0100  INPUT              *&lt;br /&gt;*&amp;----------------------------------------------------*&lt;br /&gt;MODULE user_command_0100 INPUT.&lt;br /&gt;&lt;br /&gt;  ok_code = sy-ucomm.&lt;br /&gt;&lt;br /&gt;  CASE ok_code.&lt;br /&gt;    WHEN 'BACK' OR 'STOP' OR 'CANCEL'.&lt;br /&gt;      SET SCREEN 0.&lt;br /&gt;      LEAVE SCREEN.&lt;br /&gt;  ENDCASE.&lt;br /&gt;&lt;br /&gt;ENDMODULE.                 " USER_COMMAND_0100  INPUT&lt;br /&gt;&lt;br /&gt;*&amp;----------------------------------------------------*&lt;br /&gt;*&amp;      Form  PAINT_CELL                              *&lt;br /&gt;*&amp;----------------------------------------------------*&lt;br /&gt;FORM paint_cell USING p_row&lt;br /&gt;                      p_column.&lt;br /&gt;&lt;br /&gt;  READ TABLE &amp;lt;row&amp;gt; ASSIGNING &amp;lt;l_line&amp;gt;&lt;br /&gt;  INDEX p_row.&lt;br /&gt;  IF sy-subrc EQ 0 AND &amp;lt;l_line&amp;gt; IS ASSIGNED.&lt;br /&gt;    ASSIGN COMPONENT 22 OF STRUCTURE &amp;lt;l_line&amp;gt; TO &amp;lt;l_field&amp;gt;.&lt;br /&gt;    it_color[] = &amp;lt;l_field&amp;gt;.&lt;br /&gt;    READ TABLE it_color ASSIGNING &amp;lt;fs_color&amp;gt;&lt;br /&gt;    WITH KEY fname = p_column.&lt;br /&gt;    IF sy-subrc EQ 0 AND &amp;lt;fs_color&amp;gt; IS ASSIGNED.&lt;br /&gt;      CASE &amp;lt;fs_color&amp;gt;-color-col.&lt;br /&gt;        WHEN space or 2.&lt;br /&gt;          l_color = 1.&lt;br /&gt;        WHEN 1.&lt;br /&gt;          l_color = 4.&lt;br /&gt;        WHEN 4.&lt;br /&gt;          l_color = 5.&lt;br /&gt;        WHEN 5.&lt;br /&gt;          l_color = 6.&lt;br /&gt;        WHEN 6.&lt;br /&gt;          l_color = 2. "White&lt;br /&gt;      ENDCASE.&lt;br /&gt;&lt;br /&gt;      MOVE l_color TO &amp;lt;fs_color&amp;gt;-color-col.&lt;br /&gt;      MOVE p_column TO &amp;lt;fs_color&amp;gt;-fname.&lt;br /&gt;    ELSE.&lt;br /&gt;      l_color = 1.&lt;br /&gt;      MOVE l_color TO wa_color-color-col.&lt;br /&gt;      MOVE p_column TO wa_color-fname.&lt;br /&gt;      APPEND wa_color TO it_color.&lt;br /&gt;    ENDIF.&lt;br /&gt;&lt;br /&gt;    ASSIGN COMPONENT 22 OF STRUCTURE &amp;lt;l_line&amp;gt; TO &amp;lt;l_field&amp;gt;.&lt;br /&gt;    &amp;lt;l_field&amp;gt; = it_color[].&lt;br /&gt;&lt;br /&gt;    CALL METHOD grid1-&amp;gt;refresh_table_display&lt;br /&gt;      EXPORTING&lt;br /&gt;        is_stable = t_stable.&lt;br /&gt;  ENDIF.&lt;br /&gt;&lt;br /&gt;ENDFORM.                    " PAINT_CELL&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Saludos,&lt;br /&gt;&lt;br /&gt;Blag.&lt;br /&gt;&lt;/DIV&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13698376-7518682494226914278?l=atejada.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atejada.blogspot.com/feeds/7518682494226914278/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13698376&amp;postID=7518682494226914278' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/7518682494226914278'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/7518682494226914278'/><link rel='alternate' type='text/html' href='http://atejada.blogspot.com/2010/12/programming-non-sense-2.html' title='Programming non-sense #2'/><author><name>Alvaro "Blag" Tejada Galindo</name><uri>http://www.blogger.com/profile/12061593528820409779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='https://weblogs.sdn.sap.com/images/people/alvaro_tajeda.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_eKAKUbdu3CI/TPgBdN3gDKI/AAAAAAAABZo/vTXTgLkCyA0/s72-c/ALV_Paiting.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13698376.post-2778409573793267670</id><published>2010-11-30T08:34:00.000-08:00</published><updated>2010-11-30T08:36:54.040-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='Misc'/><category scheme='http://www.blogger.com/atom/ns#' term='FLEX'/><category scheme='http://www.blogger.com/atom/ns#' term='ABAP'/><title type='text'>Venta navideña!</title><content type='html'>&lt;DIV ALIGN="JUSTIFY"&gt;&lt;br /&gt;Empezando desde hoy y por todo el mes de Diciembre...obten un 25% de descuento en todos mis libros!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://lulu.com/Blag"&gt;Blag en Lulu.com&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Aprovecha esta excelente oferta!&lt;br /&gt;&lt;br /&gt;Saludos,&lt;br /&gt;&lt;br /&gt;Blag.&lt;br /&gt;&lt;/DIV&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13698376-2778409573793267670?l=atejada.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atejada.blogspot.com/feeds/2778409573793267670/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13698376&amp;postID=2778409573793267670' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/2778409573793267670'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/2778409573793267670'/><link rel='alternate' type='text/html' href='http://atejada.blogspot.com/2010/11/venta-navidena.html' title='Venta navideña!'/><author><name>Alvaro "Blag" Tejada Galindo</name><uri>http://www.blogger.com/profile/12061593528820409779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='https://weblogs.sdn.sap.com/images/people/alvaro_tajeda.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13698376.post-6623695216349671012</id><published>2010-11-10T16:25:00.000-08:00</published><updated>2010-11-10T17:41:10.534-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ABAP'/><title type='text'>XML y RegEx otra vez...</title><content type='html'>&lt;DIV ALIGN="JUSTIFY"&gt;&lt;br /&gt;En blog anterior &lt;a href="http://atejada.blogspot.com/2010/10/tres-son-multitudxml-regex-y.html#links"&gt;Tres son multitud...XML, RegEx y Programación Dinámica&lt;/a&gt; hablamos de como leer un archivo XML utilizando RegEx y Programación Dinámica...entonces hoy dia estuve pensando que si podemos leer un XML utilizando RegEx...tambien podemos crearlo...claro, esta no es para nada la mejor manera, puesto que podemos hacer lo mismo utilizando Simple Transformations, XLST Transformation y XML DOM.&lt;br /&gt;&lt;br /&gt;Como siempre...este código fue muy divertido de hacer -;)&lt;br /&gt;&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 95%;"&gt;&lt;br /&gt;TYPES: BEGIN OF TY_XML,&lt;br /&gt;       FIELD TYPE STRING,&lt;br /&gt;       END OF TY_XML.&lt;br /&gt;&lt;br /&gt;DATA: T_DD03P_TAB  TYPE STANDARD TABLE OF DD03P,&lt;br /&gt;      T_FILETAB TYPE FILETABLE,&lt;br /&gt;      T_XML TYPE STANDARD TABLE OF TY_XML.&lt;br /&gt;&lt;br /&gt;DATA: L_FLAG TYPE C,&lt;br /&gt;      L_AUX TYPE STRING,&lt;br /&gt;      L_STRING TYPE STRING,&lt;br /&gt;      L_XML_LINE TYPE STRING,&lt;br /&gt;      DATA_TAB TYPE REF TO DATA,&lt;br /&gt;      SIZE TYPE I,&lt;br /&gt;      W_SUBRC TYPE SY-SUBRC,&lt;br /&gt;      W_FILE_OUT TYPE STRING.&lt;br /&gt;&lt;br /&gt;FIELD-SYMBOLS: &lt;DATA_TAB&gt; TYPE STANDARD TABLE,&lt;br /&gt;               &lt;DATA_LINE&gt; TYPE ANY,&lt;br /&gt;               &lt;FIELD&gt; TYPE ANY,&lt;br /&gt;               &lt;FS_XML&gt; LIKE LINE OF T_XML,&lt;br /&gt;               &lt;FS_DD03P&gt; LIKE LINE OF T_DD03P_TAB,&lt;br /&gt;               &lt;FS_FILETAB&gt; LIKE LINE OF T_FILETAB.&lt;br /&gt;&lt;br /&gt;SELECTION-SCREEN BEGIN OF BLOCK TEST WITH FRAME.&lt;br /&gt;PARAMETERS:&lt;br /&gt;           TABNAME TYPE DD02L-TABNAME,&lt;br /&gt;           FILE_OUT LIKE RLGRAP-FILENAME.&lt;br /&gt;SELECTION-SCREEN END OF BLOCK TEST.&lt;br /&gt;&lt;br /&gt;START-OF-SELECTION.&lt;br /&gt;  PERFORM VALIDATE_TABLE USING TABNAME&lt;br /&gt;                         CHANGING L_FLAG.&lt;br /&gt;  IF L_FLAG EQ SPACE.&lt;br /&gt;    PERFORM LOAD_TABLE_STRUCT USING TABNAME.&lt;br /&gt;    PERFORM LOAD_TABLE_INFO USING TABNAME.&lt;br /&gt;    PERFORM CREATE_XML.&lt;br /&gt;    PERFORM DOWNLOAD_XML.&lt;br /&gt;  ENDIF.&lt;br /&gt;&lt;br /&gt;AT SELECTION-SCREEN ON VALUE-REQUEST FOR FILE_OUT.&lt;br /&gt;  CALL METHOD CL_GUI_FRONTEND_SERVICES=&gt;FILE_OPEN_DIALOG&lt;br /&gt;    EXPORTING&lt;br /&gt;      WINDOW_TITLE     = 'Seleccionar archivo'&lt;br /&gt;      DEFAULT_FILENAME = '*.xml'&lt;br /&gt;      FILE_FILTER      = '*.xml'&lt;br /&gt;    CHANGING&lt;br /&gt;      FILE_TABLE       = T_FILETAB&lt;br /&gt;      RC               = W_SUBRC.&lt;br /&gt;&lt;br /&gt;  READ TABLE T_FILETAB INDEX 1&lt;br /&gt;  ASSIGNING &lt;FS_FILETAB&gt;.&lt;br /&gt;  FILE_OUT = &lt;FS_FILETAB&gt;.&lt;br /&gt;  W_FILE_OUT = FILE_OUT.&lt;br /&gt;&lt;br /&gt;  IF FILE_OUT IS INITIAL.&lt;br /&gt;    EXIT.&lt;br /&gt;  ENDIF.&lt;br /&gt;&lt;br /&gt;*&amp;------------------------------------------------------*&lt;br /&gt;*&amp;      Form  VALIDATE_TABLE                            *&lt;br /&gt;*&amp;------------------------------------------------------*&lt;br /&gt;FORM VALIDATE_TABLE USING P_TABNAME&lt;br /&gt;                    CHANGING P_FLAG.&lt;br /&gt;&lt;br /&gt;  SELECT SINGLE TABNAME&lt;br /&gt;  INTO P_TABNAME&lt;br /&gt;  FROM DD02L&lt;br /&gt;  WHERE TABNAME EQ P_TABNAME.&lt;br /&gt;  IF SY-SUBRC NE 0.&lt;br /&gt;    P_FLAG = 'X'.&lt;br /&gt;  ELSE.&lt;br /&gt;    CLEAR P_FLAG.&lt;br /&gt;  ENDIF.&lt;br /&gt;&lt;br /&gt;ENDFORM.                    " VALIDATE_TABLE&lt;br /&gt;&lt;br /&gt;*&amp;------------------------------------------------------*&lt;br /&gt;*&amp;      Form  LOAD_TABLE_STRUCT                         *&lt;br /&gt;*&amp;------------------------------------------------------*&lt;br /&gt;FORM LOAD_TABLE_STRUCT USING P_TABNAME.&lt;br /&gt;&lt;br /&gt;  CALL FUNCTION 'DDIF_TABL_GET'&lt;br /&gt;    EXPORTING&lt;br /&gt;      NAME          = P_TABNAME&lt;br /&gt;    TABLES&lt;br /&gt;      DD03P_TAB     = T_DD03P_TAB&lt;br /&gt;    EXCEPTIONS&lt;br /&gt;      ILLEGAL_INPUT = 1&lt;br /&gt;      OTHERS        = 2.&lt;br /&gt;&lt;br /&gt;ENDFORM.                    " LOAD_TABLE_STRUCT&lt;br /&gt;&lt;br /&gt;*&amp;------------------------------------------------------*&lt;br /&gt;*&amp;      Form  LOAD_TABLE_INFO                           *&lt;br /&gt;*&amp;------------------------------------------------------*&lt;br /&gt;FORM LOAD_TABLE_INFO USING P_TABNAME.&lt;br /&gt;&lt;br /&gt;  CREATE DATA DATA_TAB TYPE STANDARD TABLE OF (P_TABNAME).&lt;br /&gt;  ASSIGN DATA_TAB-&gt;* TO &lt;DATA_TAB&gt;.&lt;br /&gt;  SELECT *&lt;br /&gt;  FROM (P_TABNAME)&lt;br /&gt;  INTO TABLE &lt;DATA_TAB&gt;.&lt;br /&gt;&lt;br /&gt;ENDFORM.                    " LOAD_TABLE_INFO&lt;br /&gt;&lt;br /&gt;*&amp;------------------------------------------------------*&lt;br /&gt;*&amp;      Form  CREATE_XML                                *&lt;br /&gt;*&amp;------------------------------------------------------*&lt;br /&gt;FORM CREATE_XML.&lt;br /&gt;&lt;br /&gt;  APPEND INITIAL LINE TO T_XML ASSIGNING &lt;FS_XML&gt;.&lt;br /&gt;  &lt;FS_XML&gt;-FIELD = '&lt;?xml version="1.0"?&gt;'.&lt;br /&gt;  APPEND INITIAL LINE TO T_XML ASSIGNING &lt;FS_XML&gt;.&lt;br /&gt;  &lt;FS_XML&gt;-FIELD = '&lt;ROWSET&gt;'.&lt;br /&gt;*XML Logic here!&lt;br /&gt;  LOOP AT &lt;DATA_TAB&gt; ASSIGNING &lt;DATA_LINE&gt;.&lt;br /&gt;    L_XML_LINE = '&lt;ROW&gt;'.&lt;br /&gt;    LOOP AT T_DD03P_TAB ASSIGNING &lt;FS_DD03P&gt;.&lt;br /&gt;      ASSIGN COMPONENT &lt;FS_DD03P&gt;-FIELDNAME OF&lt;br /&gt;      STRUCTURE &lt;DATA_LINE&gt; TO &lt;FIELD&gt;.&lt;br /&gt;      L_AUX = &lt;FIELD&gt;.&lt;br /&gt;      CONDENSE L_AUX NO-GAPS.&lt;br /&gt;      CONCATENATE &lt;FS_DD03P&gt;-FIELDNAME '/' L_AUX&lt;br /&gt;      INTO L_STRING.&lt;br /&gt;      REPLACE REGEX '(\w+)[\/](\w+)' IN L_STRING&lt;br /&gt;      WITH '&lt;$1&gt;$2&lt;/$1&gt;'.&lt;br /&gt;      CONCATENATE L_XML_LINE L_STRING INTO L_XML_LINE.&lt;br /&gt;    ENDLOOP.&lt;br /&gt;    APPEND INITIAL LINE TO T_XML ASSIGNING &lt;FS_XML&gt;.&lt;br /&gt;    &lt;FS_XML&gt;-FIELD = L_XML_LINE.&lt;br /&gt;    CONCATENATE &lt;FS_XML&gt;-FIELD '&lt;/ROW&gt;'&lt;br /&gt;    INTO &lt;FS_XML&gt;-FIELD.&lt;br /&gt;  ENDLOOP.&lt;br /&gt;*XML Logic here!&lt;br /&gt;  APPEND INITIAL LINE TO T_XML ASSIGNING &lt;FS_XML&gt;.&lt;br /&gt;  &lt;FS_XML&gt;-FIELD = '&lt;/ROWSET&gt;'.&lt;br /&gt;&lt;br /&gt;ENDFORM.                    " CREATE_XML&lt;br /&gt;&lt;br /&gt;*&amp;------------------------------------------------------*&lt;br /&gt;*&amp;      Form  DOWNLOAD_XML                              *&lt;br /&gt;*&amp;------------------------------------------------------*&lt;br /&gt;FORM DOWNLOAD_XML.&lt;br /&gt;&lt;br /&gt;  CALL METHOD CL_GUI_FRONTEND_SERVICES=&gt;GUI_DOWNLOAD&lt;br /&gt;    EXPORTING&lt;br /&gt;      BIN_FILESIZE = SIZE&lt;br /&gt;      FILENAME     = W_FILE_OUT&lt;br /&gt;      FILETYPE     = 'DAT'&lt;br /&gt;    CHANGING&lt;br /&gt;      DATA_TAB     = T_XML.&lt;br /&gt;&lt;br /&gt;ENDFORM.                    " DOWNLOAD_XML&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_eKAKUbdu3CI/TNtHaoaJLwI/AAAAAAAABY8/s5VNw7C5F4Q/s1600/XML_Regex_01.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 153px;" src="http://1.bp.blogspot.com/_eKAKUbdu3CI/TNtHaoaJLwI/AAAAAAAABY8/s5VNw7C5F4Q/s400/XML_Regex_01.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5538098689631399682" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_eKAKUbdu3CI/TNtHgv-sAgI/AAAAAAAABZE/USP1ApjyggQ/s1600/XML_Regex_02.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 191px;" src="http://4.bp.blogspot.com/_eKAKUbdu3CI/TNtHgv-sAgI/AAAAAAAABZE/USP1ApjyggQ/s400/XML_Regex_02.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5538098794742940162" /&gt;&lt;/a&gt;&lt;br /&gt;Saludos,&lt;br /&gt;&lt;br /&gt;Blag.&lt;br /&gt;&lt;/DIV&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13698376-6623695216349671012?l=atejada.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atejada.blogspot.com/feeds/6623695216349671012/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13698376&amp;postID=6623695216349671012' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/6623695216349671012'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/6623695216349671012'/><link rel='alternate' type='text/html' href='http://atejada.blogspot.com/2010/11/xml-y-regex-otra-vez.html' title='XML y RegEx otra vez...'/><author><name>Alvaro "Blag" Tejada Galindo</name><uri>http://www.blogger.com/profile/12061593528820409779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='https://weblogs.sdn.sap.com/images/people/alvaro_tajeda.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_eKAKUbdu3CI/TNtHaoaJLwI/AAAAAAAABY8/s5VNw7C5F4Q/s72-c/XML_Regex_01.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13698376.post-3109378220040772146</id><published>2010-11-03T19:30:00.000-07:00</published><updated>2010-11-03T19:44:00.508-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Non_Sense'/><category scheme='http://www.blogger.com/atom/ns#' term='ABAP'/><title type='text'>Programming non-sense #1</title><content type='html'>&lt;DIV ALIGN="JUSTIFY"&gt;&lt;br /&gt;Con este post, quiero iniciar una pequeña serie de posts sobre programas en ABAP que no sirven para nada pero que son divertidos de hacer -:) Considero programar en ABAP divertido...aunque no lo crean...&lt;br /&gt;&lt;br /&gt;En fin...mi primer código, que dicho sea de paso no funciona de la mejor manera, es un reloj...simplemente leemos la hora del sistema y la mostramos en forma digital...luego, activamos un temporizador que va a ejecutarse cada segundo y nuevamente va a leer la hora del sistema y mostrarla en formato digital...por supuesto, ya que no contamos en ABAP con un CLRSCR(); o un CLS, debemos leer cada linea y modificar el contenido.&lt;br /&gt;&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 95%;"&gt;&lt;br /&gt;DATA: temporizador TYPE REF TO cl_gui_timer,&lt;br /&gt;      hour(2) TYPE c,&lt;br /&gt;      minute(2) TYPE c,&lt;br /&gt;      second(2) TYPE c,&lt;br /&gt;      one(1) TYPE c,&lt;br /&gt;      two(1) TYPE c,&lt;br /&gt;      line1 TYPE string,&lt;br /&gt;      line2 TYPE string,&lt;br /&gt;      line3 TYPE string.&lt;br /&gt;&lt;br /&gt;*----------------------------------------------------------------------*&lt;br /&gt;*       CLASS clock DEFINITION                                         *&lt;br /&gt;*----------------------------------------------------------------------*&lt;br /&gt;CLASS clock DEFINITION.&lt;br /&gt;  PUBLIC SECTION.&lt;br /&gt;    METHODS: zero IMPORTING line TYPE string,&lt;br /&gt;             one IMPORTING line TYPE string,&lt;br /&gt;             two IMPORTING line TYPE string,&lt;br /&gt;             three IMPORTING line TYPE string,&lt;br /&gt;             four IMPORTING line TYPE string,&lt;br /&gt;             five IMPORTING line TYPE string,&lt;br /&gt;             six IMPORTING line TYPE string,&lt;br /&gt;             seven IMPORTING line TYPE string,&lt;br /&gt;             eight IMPORTING line TYPE string,&lt;br /&gt;             nine IMPORTING line TYPE string,&lt;br /&gt;             periods IMPORTING line TYPE string,&lt;br /&gt;             show IMPORTING number TYPE c.&lt;br /&gt;ENDCLASS.                    "clock DEFINITION&lt;br /&gt;&lt;br /&gt;*----------------------------------------------------------------------*&lt;br /&gt;*       CLASS clock IMPLEMENTATION                                     *&lt;br /&gt;*----------------------------------------------------------------------*&lt;br /&gt;CLASS clock IMPLEMENTATION.&lt;br /&gt;  METHOD zero.&lt;br /&gt;    CASE line.&lt;br /&gt;      WHEN 1.&lt;br /&gt;        CONCATENATE line1 ' _ ' INTO line1 SEPARATED BY space RESPECTING BLANKS.&lt;br /&gt;      WHEN 2.&lt;br /&gt;        CONCATENATE line2 '| |' INTO line2 SEPARATED BY space RESPECTING BLANKS.&lt;br /&gt;      WHEN 3.&lt;br /&gt;        CONCATENATE line3 '|_|' INTO line3 SEPARATED BY space RESPECTING BLANKS.&lt;br /&gt;    ENDCASE.&lt;br /&gt;  ENDMETHOD.                    "zero&lt;br /&gt;  METHOD one.&lt;br /&gt;    CASE line.&lt;br /&gt;      WHEN 1.&lt;br /&gt;        CONCATENATE line1 '  ' INTO line1 SEPARATED BY space RESPECTING BLANKS.&lt;br /&gt;      WHEN 2.&lt;br /&gt;        CONCATENATE line2 ' |' INTO line2 SEPARATED BY space RESPECTING BLANKS.&lt;br /&gt;      WHEN 3.&lt;br /&gt;        CONCATENATE line3 ' |' INTO line3 SEPARATED BY space RESPECTING BLANKS.&lt;br /&gt;    ENDCASE.&lt;br /&gt;  ENDMETHOD.                    "one&lt;br /&gt;  METHOD two.&lt;br /&gt;    CASE line.&lt;br /&gt;      WHEN 1.&lt;br /&gt;        CONCATENATE line1 ' _ ' INTO line1 SEPARATED BY space RESPECTING BLANKS.&lt;br /&gt;      WHEN 2.&lt;br /&gt;        CONCATENATE line2 ' _|' INTO line2 SEPARATED BY space RESPECTING BLANKS.&lt;br /&gt;      WHEN 3.&lt;br /&gt;        CONCATENATE line3 '|_ ' INTO line3 SEPARATED BY space RESPECTING BLANKS.&lt;br /&gt;    ENDCASE.&lt;br /&gt;  ENDMETHOD.                    "two&lt;br /&gt;  METHOD three.&lt;br /&gt;    CASE line.&lt;br /&gt;      WHEN 1.&lt;br /&gt;        CONCATENATE line1 ' _ ' INTO line1 SEPARATED BY space RESPECTING BLANKS.&lt;br /&gt;      WHEN 2.&lt;br /&gt;        CONCATENATE line2 ' _|' INTO line2 SEPARATED BY space RESPECTING BLANKS.&lt;br /&gt;      WHEN 3.&lt;br /&gt;        CONCATENATE line3 ' _|' INTO line3 SEPARATED BY space RESPECTING BLANKS.&lt;br /&gt;    ENDCASE.&lt;br /&gt;  ENDMETHOD.                    "three&lt;br /&gt;  METHOD four.&lt;br /&gt;    CASE line.&lt;br /&gt;      WHEN 1.&lt;br /&gt;        CONCATENATE line1 '   ' INTO line1 SEPARATED BY space RESPECTING BLANKS.&lt;br /&gt;      WHEN 2.&lt;br /&gt;        CONCATENATE line2 '|_|' INTO line2 SEPARATED BY space RESPECTING BLANKS.&lt;br /&gt;      WHEN 3.&lt;br /&gt;        CONCATENATE line3 '  |' INTO line3 SEPARATED BY space RESPECTING BLANKS.&lt;br /&gt;    ENDCASE.&lt;br /&gt;  ENDMETHOD.                    "four&lt;br /&gt;  METHOD five.&lt;br /&gt;    CASE line.&lt;br /&gt;      WHEN 1.&lt;br /&gt;        CONCATENATE line1 ' _ ' INTO line1 SEPARATED BY space RESPECTING BLANKS.&lt;br /&gt;      WHEN 2.&lt;br /&gt;        CONCATENATE line2 '|_ ' INTO line2 SEPARATED BY space RESPECTING BLANKS.&lt;br /&gt;      WHEN 3.&lt;br /&gt;        CONCATENATE line3 ' _|' INTO line3 SEPARATED BY space RESPECTING BLANKS.&lt;br /&gt;    ENDCASE.&lt;br /&gt;  ENDMETHOD.                    "five&lt;br /&gt;  METHOD six.&lt;br /&gt;    CASE line.&lt;br /&gt;      WHEN 1.&lt;br /&gt;        CONCATENATE line1 ' _ ' INTO line1 SEPARATED BY space RESPECTING BLANKS.&lt;br /&gt;      WHEN 2.&lt;br /&gt;        CONCATENATE line2 '|_ ' INTO line2 SEPARATED BY space RESPECTING BLANKS.&lt;br /&gt;      WHEN 3.&lt;br /&gt;        CONCATENATE line3 '|_|' INTO line3 SEPARATED BY space RESPECTING BLANKS.&lt;br /&gt;    ENDCASE.&lt;br /&gt;  ENDMETHOD.                    "six&lt;br /&gt;  METHOD seven.&lt;br /&gt;    CASE line.&lt;br /&gt;      WHEN 1.&lt;br /&gt;        CONCATENATE line1 '_  ' INTO line1 SEPARATED BY space RESPECTING BLANKS.&lt;br /&gt;      WHEN 2.&lt;br /&gt;        CONCATENATE line2 ' | ' INTO line2 SEPARATED BY space RESPECTING BLANKS.&lt;br /&gt;      WHEN 3.&lt;br /&gt;        CONCATENATE line3 ' | ' INTO line3 SEPARATED BY space RESPECTING BLANKS.&lt;br /&gt;    ENDCASE.&lt;br /&gt;  ENDMETHOD.                    "seven&lt;br /&gt;  METHOD eight.&lt;br /&gt;    CASE line.&lt;br /&gt;      WHEN 1.&lt;br /&gt;        CONCATENATE line1 ' _ ' INTO line1 SEPARATED BY space RESPECTING BLANKS.&lt;br /&gt;      WHEN 2.&lt;br /&gt;        CONCATENATE line2 '|_|' INTO line2 SEPARATED BY space RESPECTING BLANKS.&lt;br /&gt;      WHEN 3.&lt;br /&gt;        CONCATENATE line3 '|_|' INTO line3 SEPARATED BY space RESPECTING BLANKS.&lt;br /&gt;    ENDCASE.&lt;br /&gt;  ENDMETHOD.                    "eight&lt;br /&gt;  METHOD nine.&lt;br /&gt;    CASE line.&lt;br /&gt;      WHEN 1.&lt;br /&gt;        CONCATENATE line1 ' _ ' INTO line1 SEPARATED BY space RESPECTING BLANKS.&lt;br /&gt;      WHEN 2.&lt;br /&gt;        CONCATENATE line2 '|_|' INTO line2 SEPARATED BY space RESPECTING BLANKS.&lt;br /&gt;      WHEN 3.&lt;br /&gt;        CONCATENATE line3 ' _|' INTO line3 SEPARATED BY space RESPECTING BLANKS.&lt;br /&gt;    ENDCASE.&lt;br /&gt;  ENDMETHOD.                    "nine&lt;br /&gt;  METHOD periods.&lt;br /&gt;    CASE line.&lt;br /&gt;      WHEN 1.&lt;br /&gt;        CONCATENATE line1 '   ' INTO line1 SEPARATED BY space RESPECTING BLANKS.&lt;br /&gt;      WHEN 2.&lt;br /&gt;        CONCATENATE line2 ' * ' INTO line2 SEPARATED BY space RESPECTING BLANKS.&lt;br /&gt;      WHEN 3.&lt;br /&gt;        CONCATENATE line3 ' * ' INTO line3 SEPARATED BY space RESPECTING BLANKS.&lt;br /&gt;    ENDCASE.&lt;br /&gt;  ENDMETHOD.                    "periods&lt;br /&gt;  METHOD show.&lt;br /&gt;    CASE number.&lt;br /&gt;      WHEN 0.&lt;br /&gt;        zero( EXPORTING line = '1' ).&lt;br /&gt;        zero( EXPORTING line = '2' ).&lt;br /&gt;        zero( EXPORTING line = '3' ).&lt;br /&gt;      WHEN 1.&lt;br /&gt;        one( EXPORTING line = '1' ).&lt;br /&gt;        one( EXPORTING line = '2' ).&lt;br /&gt;        one( EXPORTING line = '3' ).&lt;br /&gt;      WHEN 2.&lt;br /&gt;        two( EXPORTING line = '1' ).&lt;br /&gt;        two( EXPORTING line = '2' ).&lt;br /&gt;        two( EXPORTING line = '3' ).&lt;br /&gt;      WHEN 3.&lt;br /&gt;        three( EXPORTING line = '1' ).&lt;br /&gt;        three( EXPORTING line = '2' ).&lt;br /&gt;        three( EXPORTING line = '3' ).&lt;br /&gt;      WHEN 4.&lt;br /&gt;        four( EXPORTING line = '1' ).&lt;br /&gt;        four( EXPORTING line = '2' ).&lt;br /&gt;        four( EXPORTING line = '3' ).&lt;br /&gt;      WHEN   5.&lt;br /&gt;        five( EXPORTING line = '1' ).&lt;br /&gt;        five( EXPORTING line = '2' ).&lt;br /&gt;        five( EXPORTING line = '3' ).&lt;br /&gt;      WHEN 6.&lt;br /&gt;        six( EXPORTING line = '1' ).&lt;br /&gt;        six( EXPORTING line = '2' ).&lt;br /&gt;        six( EXPORTING line = '3' ).&lt;br /&gt;      WHEN 7.&lt;br /&gt;        seven( EXPORTING line = '1' ).&lt;br /&gt;        seven( EXPORTING line = '2' ).&lt;br /&gt;        seven( EXPORTING line = '3' ).&lt;br /&gt;      WHEN 8.&lt;br /&gt;        eight( EXPORTING line = '1' ).&lt;br /&gt;        eight( EXPORTING line = '2' ).&lt;br /&gt;        eight( EXPORTING line = '3' ).&lt;br /&gt;      WHEN 9.&lt;br /&gt;        nine( EXPORTING line = '1' ).&lt;br /&gt;        nine( EXPORTING line = '2' ).&lt;br /&gt;        nine( EXPORTING line = '3' ).&lt;br /&gt;    ENDCASE.&lt;br /&gt;  ENDMETHOD.                    "show&lt;br /&gt;ENDCLASS.                    "clock IMPLEMENTATION&lt;br /&gt;&lt;br /&gt;*----------------------------------------------------------------------*&lt;br /&gt;*       CLASS lcl_event_handler DEFINITION                             *&lt;br /&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.                    "lcl_event_handler DEFINITION&lt;br /&gt;&lt;br /&gt;*----------------------------------------------------------------------*&lt;br /&gt;*       CLASS lcl_event_handler IMPLEMENTATION                         * &lt;br /&gt;*----------------------------------------------------------------------*&lt;br /&gt;CLASS lcl_event_handler IMPLEMENTATION.&lt;br /&gt;  METHOD on_timer.&lt;br /&gt;    DATA: g_clock TYPE REF TO clock.&lt;br /&gt;&lt;br /&gt;    IF NOT g_clock IS BOUND.&lt;br /&gt;      CREATE OBJECT g_clock.&lt;br /&gt;    ENDIF.&lt;br /&gt;&lt;br /&gt;    CLEAR: line1, line2, line3.&lt;br /&gt;&lt;br /&gt;    hour = sy-uzeit+0(2).&lt;br /&gt;    one = hour+0(1).&lt;br /&gt;    g_clock-&gt;show( EXPORTING number = one ).&lt;br /&gt;    two = hour+1(1).&lt;br /&gt;    g_clock-&gt;show( EXPORTING number = two ).&lt;br /&gt;    g_clock-&gt;periods( EXPORTING line = '1' ).&lt;br /&gt;    g_clock-&gt;periods( EXPORTING line = '2' ).&lt;br /&gt;    g_clock-&gt;periods( EXPORTING line = '3' ).&lt;br /&gt;    minute = sy-uzeit+2(2).&lt;br /&gt;    one = minute+0(1).&lt;br /&gt;    g_clock-&gt;show( EXPORTING number = one ).&lt;br /&gt;    two = minute+1(1).&lt;br /&gt;    g_clock-&gt;show( EXPORTING number = two ).&lt;br /&gt;    g_clock-&gt;periods( EXPORTING line = '1' ).&lt;br /&gt;    g_clock-&gt;periods( EXPORTING line = '2' ).&lt;br /&gt;    g_clock-&gt;periods( EXPORTING line = '3' ).&lt;br /&gt;    second = sy-uzeit+4(2).&lt;br /&gt;    one = second+0(1).&lt;br /&gt;    g_clock-&gt;show( EXPORTING number = one ).&lt;br /&gt;    two = second+1(1).&lt;br /&gt;    g_clock-&gt;show( EXPORTING number = two ).&lt;br /&gt;&lt;br /&gt;    READ LINE 1.&lt;br /&gt;    MODIFY LINE 1 FIELD VALUE line1 FROM line1.&lt;br /&gt;    READ LINE 2.&lt;br /&gt;    MODIFY LINE 2 FIELD VALUE line2 FROM line2.&lt;br /&gt;    READ LINE 3.&lt;br /&gt;    MODIFY LINE 3 FIELD VALUE line3 FROM line3.&lt;br /&gt;&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 = 1.&lt;br /&gt;  temporizador-&gt;run( ).&lt;br /&gt;&lt;br /&gt;  DATA: g_clock TYPE REF TO clock.&lt;br /&gt;  CREATE OBJECT g_clock.&lt;br /&gt;&lt;br /&gt;  hour = sy-uzeit+0(2).&lt;br /&gt;  one = hour+0(1).&lt;br /&gt;  g_clock-&gt;show( EXPORTING number = one ).&lt;br /&gt;  two = hour+1(1).&lt;br /&gt;  g_clock-&gt;show( EXPORTING number = two ).&lt;br /&gt;  g_clock-&gt;periods( EXPORTING line = '1' ).&lt;br /&gt;  g_clock-&gt;periods( EXPORTING line = '2' ).&lt;br /&gt;  g_clock-&gt;periods( EXPORTING line = '3' ).&lt;br /&gt;  minute = sy-uzeit+2(2).&lt;br /&gt;  one = minute+0(1).&lt;br /&gt;  g_clock-&gt;show( EXPORTING number = one ).&lt;br /&gt;  two = minute+1(1).&lt;br /&gt;  g_clock-&gt;show( EXPORTING number = two ).&lt;br /&gt;  g_clock-&gt;periods( EXPORTING line = '1' ).&lt;br /&gt;  g_clock-&gt;periods( EXPORTING line = '2' ).&lt;br /&gt;  g_clock-&gt;periods( EXPORTING line = '3' ).&lt;br /&gt;  second = sy-uzeit+4(2).&lt;br /&gt;  one = second+0(1).&lt;br /&gt;  g_clock-&gt;show( EXPORTING number = one ).&lt;br /&gt;  two = second+1(1).&lt;br /&gt;  g_clock-&gt;show( EXPORTING number = two ).&lt;br /&gt;&lt;br /&gt;  WRITE:/ line1.&lt;br /&gt;  WRITE:/ line2.&lt;br /&gt;  WRITE:/ line3.&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_eKAKUbdu3CI/TNIdlLya4cI/AAAAAAAABYc/tj4OdE2Ffj4/s1600/ABAP_Clock.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 280px; height: 153px;" src="http://3.bp.blogspot.com/_eKAKUbdu3CI/TNIdlLya4cI/AAAAAAAABYc/tj4OdE2Ffj4/s400/ABAP_Clock.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5535519416648393154" /&gt;&lt;/a&gt;&lt;br /&gt;Saludos,&lt;br /&gt;&lt;br /&gt;Blag.&lt;br /&gt;&lt;/DIV&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13698376-3109378220040772146?l=atejada.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atejada.blogspot.com/feeds/3109378220040772146/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13698376&amp;postID=3109378220040772146' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/3109378220040772146'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/3109378220040772146'/><link rel='alternate' type='text/html' href='http://atejada.blogspot.com/2010/11/programming-non-sense-1.html' title='Programming non-sense #1'/><author><name>Alvaro "Blag" Tejada Galindo</name><uri>http://www.blogger.com/profile/12061593528820409779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='https://weblogs.sdn.sap.com/images/people/alvaro_tajeda.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_eKAKUbdu3CI/TNIdlLya4cI/AAAAAAAABYc/tj4OdE2Ffj4/s72-c/ABAP_Clock.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13698376.post-2667031515931557169</id><published>2010-10-16T18:22:00.001-07:00</published><updated>2010-10-16T18:43:08.172-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ABAP'/><title type='text'>Tres son multitud...XML, RegEx y Programación Dinámica</title><content type='html'>&lt;DIV ALIGN="JUSTIFY"&gt;&lt;br /&gt;Como dije...aqui esta mi primer post sobre ABAP luego de mucho tiempo -:)&lt;br /&gt;&lt;br /&gt;Como ya saben...soy un fanatico del RegEx o Expresiones Regulares y trato de utilizarlos cada vez que puedo. &lt;a href="http://atejada.blogspot.com/2009/12/herramienta-matematica-con-regex-y.html"&gt;Herramienta matemática con RegEx y JavaScript&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Hace un par de semanas tuve que rehacer un programa hecho por otra persona, que leia un XML y creaba IDOCs con esa informacion...al ser un XML simple, pense que era un buen candidato para RegEx...asi que puse manos a la obra y el programa quedo excelente -;)&lt;br /&gt;&lt;br /&gt;Claro, para efectos del blog tuve que crear un ejemplo nuevo que reflejara todos los componentes que utilice.&lt;br /&gt;&lt;br /&gt;Entonces, lo primero es que crear un XML con este formato...&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_eKAKUbdu3CI/TLpSG1k3erI/AAAAAAAABXE/wErljfntaCo/s1600/XML_RegEx.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 72px;" src="http://3.bp.blogspot.com/_eKAKUbdu3CI/TLpSG1k3erI/AAAAAAAABXE/wErljfntaCo/s400/XML_RegEx.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5528821769965107890" /&gt;&lt;/a&gt;&lt;br /&gt;Luego, aqui tenemos el codigo fuente...&lt;br /&gt;&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 95%;"&gt;&lt;br /&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*&amp; Report  ZDUMMY                                                      *&lt;br /&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;REPORT ZDUMMY NO STANDARD PAGE HEADING.&lt;br /&gt;&lt;br /&gt;*=====================================================*&lt;br /&gt;* DECLARACION DE TYPES                                *&lt;br /&gt;*=====================================================*&lt;br /&gt;TYPES: BEGIN OF TY_FIELDS,&lt;br /&gt;       FIELD TYPE STRING,&lt;br /&gt;       END OF TY_FIELDS.&lt;br /&gt;&lt;br /&gt;*=====================================================*&lt;br /&gt;* DECLARACION DE VARIABLES                            *&lt;br /&gt;*=====================================================*&lt;br /&gt;DATA: DATA_TAB TYPE TABLE_OF_STRINGS,&lt;br /&gt;      T_FILETAB TYPE FILETABLE,&lt;br /&gt;      W_FILE_IN TYPE STRING,&lt;br /&gt;      RESULT_TAB TYPE MATCH_RESULT_TAB,&lt;br /&gt;      T_RESULTS TYPE MATCH_RESULT_TAB,&lt;br /&gt;      W_SUBRC TYPE SY-SUBRC,&lt;br /&gt;      SIZE TYPE I,&lt;br /&gt;      AUX TYPE STRING,&lt;br /&gt;      OFF TYPE I,&lt;br /&gt;      LEN TYPE I,&lt;br /&gt;      L_TABIX TYPE SY-TABIX,&lt;br /&gt;      L_LINES TYPE I,&lt;br /&gt;      L_STRING TYPE STRING,&lt;br /&gt;      T_FIELDS TYPE STANDARD TABLE OF TY_FIELDS,&lt;br /&gt;      DATAREF TYPE REF TO DATA,&lt;br /&gt;      NEW_LINE TYPE REF TO DATA,&lt;br /&gt;      IT_FIELDCATALOG TYPE LVC_T_FCAT,&lt;br /&gt;      WA_FCAT TYPE LVC_S_FCAT.&lt;br /&gt;&lt;br /&gt;FIELD-SYMBOLS: &amp;lt;FS_FILETAB&amp;gt; LIKE LINE OF T_FILETAB,&lt;br /&gt;               &amp;lt;FS_RESULT_TAB&amp;gt; LIKE LINE OF RESULT_TAB,&lt;br /&gt;               &amp;lt;FS_RESULTS&amp;gt; LIKE LINE OF T_RESULTS,&lt;br /&gt;               &amp;lt;FS_DATA_TAB&amp;gt; LIKE LINE OF DATA_TAB,&lt;br /&gt;               &amp;lt;FS_FIELDS&amp;gt; LIKE LINE OF T_FIELDS,&lt;br /&gt;               &amp;lt;ROW&amp;gt; TYPE TABLE,&lt;br /&gt;               &amp;lt;FS_ROW&amp;gt; TYPE ANY,&lt;br /&gt;               &amp;lt;FS_ANY&amp;gt; TYPE ANY,&lt;br /&gt;               &amp;lt;L_LINE&amp;gt; TYPE ANY.&lt;br /&gt;&lt;br /&gt;*=====================================================*&lt;br /&gt;* SELECTION-SCREEN                                    *&lt;br /&gt;*=====================================================*&lt;br /&gt;SELECTION-SCREEN BEGIN OF BLOCK TEST WITH FRAME.&lt;br /&gt;PARAMETERS:&lt;br /&gt;           FILE_IN LIKE RLGRAP-FILENAME.&lt;br /&gt;SELECTION-SCREEN END OF BLOCK TEST.&lt;br /&gt;&lt;br /&gt;AT SELECTION-SCREEN ON VALUE-REQUEST FOR FILE_IN.&lt;br /&gt;  CALL METHOD CL_GUI_FRONTEND_SERVICES=&amp;gt;FILE_OPEN_DIALOG&lt;br /&gt;    EXPORTING&lt;br /&gt;      WINDOW_TITLE     = 'Seleccionar archivo'&lt;br /&gt;      DEFAULT_FILENAME = '*.*'&lt;br /&gt;      FILE_FILTER      = '*.*'&lt;br /&gt;    CHANGING&lt;br /&gt;      FILE_TABLE       = T_FILETAB&lt;br /&gt;      RC               = W_SUBRC.&lt;br /&gt;&lt;br /&gt;  READ TABLE T_FILETAB INDEX 1&lt;br /&gt;  ASSIGNING &amp;lt;FS_FILETAB&amp;gt;.&lt;br /&gt;  FILE_IN = &amp;lt;FS_FILETAB&amp;gt;.&lt;br /&gt;  W_FILE_IN = FILE_IN.&lt;br /&gt;&lt;br /&gt;  IF FILE_IN IS INITIAL.&lt;br /&gt;    EXIT.&lt;br /&gt;  ENDIF.&lt;br /&gt;&lt;br /&gt;  CLEAR T_FILETAB.&lt;br /&gt;  REFRESH T_FILETAB.&lt;br /&gt;&lt;br /&gt;*=====================================================*&lt;br /&gt;* START-OF-SELECTION                                  *&lt;br /&gt;*=====================================================*&lt;br /&gt;START-OF-SELECTION.&lt;br /&gt;&lt;br /&gt;  CALL METHOD CL_GUI_FRONTEND_SERVICES=&amp;gt;GUI_UPLOAD&lt;br /&gt;    EXPORTING&lt;br /&gt;      FILENAME   = W_FILE_IN&lt;br /&gt;      FILETYPE   = 'DAT'&lt;br /&gt;    IMPORTING&lt;br /&gt;      FILELENGTH = SIZE&lt;br /&gt;    CHANGING&lt;br /&gt;      DATA_TAB   = DATA_TAB.&lt;br /&gt;&lt;br /&gt;  LOOP AT DATA_TAB ASSIGNING &amp;lt;FS_DATA_TAB&amp;gt;.&lt;br /&gt;    FIND REGEX '&amp;lt;[a-zA-Z][^&amp;gt;]*&amp;gt;\S' IN &amp;lt;FS_DATA_TAB&amp;gt;.&lt;br /&gt;    IF SY-SUBRC NE 0.&lt;br /&gt;      CONTINUE.&lt;br /&gt;    ENDIF.&lt;br /&gt;    FIND ALL OCCURRENCES OF REGEX '&amp;lt;[^&amp;gt;]+&amp;gt;[^&amp;lt;]*&amp;lt;/[^&amp;gt;]+&amp;gt;' IN &amp;lt;FS_DATA_TAB&amp;gt; RESULTS T_RESULTS.&lt;br /&gt;    LOOP AT T_RESULTS ASSIGNING &amp;lt;FS_RESULTS&amp;gt;.&lt;br /&gt;      AUX = &amp;lt;FS_DATA_TAB&amp;gt;+&amp;lt;FS_RESULTS&amp;gt;-OFFSET(&amp;lt;FS_RESULTS&amp;gt;-LENGTH).&lt;br /&gt;      FIND REGEX '[a-zA-Z\/][^&amp;gt;]*' IN AUX MATCH OFFSET OFF MATCH LENGTH LEN.&lt;br /&gt;      READ TABLE T_FIELDS ASSIGNING &amp;lt;FS_FIELDS&amp;gt;&lt;br /&gt;      WITH KEY FIELD = AUX+OFF(LEN).&lt;br /&gt;      IF SY-SUBRC NE 0 OR NOT &amp;lt;FS_FIELDS&amp;gt; IS ASSIGNED.&lt;br /&gt;        APPEND INITIAL LINE TO T_FIELDS ASSIGNING &amp;lt;FS_FIELDS&amp;gt;.&lt;br /&gt;        &amp;lt;FS_FIELDS&amp;gt;-FIELD = AUX+OFF(LEN).&lt;br /&gt;      ENDIF.&lt;br /&gt;    ENDLOOP.&lt;br /&gt;  ENDLOOP.&lt;br /&gt;&lt;br /&gt;  LOOP AT T_FIELDS ASSIGNING &amp;lt;FS_FIELDS&amp;gt;.&lt;br /&gt;    WA_FCAT-FIELDNAME = &amp;lt;FS_FIELDS&amp;gt;-FIELD.&lt;br /&gt;    WA_FCAT-REF_TABLE = 'PERF_STRING_STRUCT'.&lt;br /&gt;    WA_FCAT-REF_FIELD = 'DATA'.&lt;br /&gt;    APPEND WA_FCAT TO IT_FIELDCATALOG.&lt;br /&gt;  ENDLOOP.&lt;br /&gt;&lt;br /&gt;  CALL METHOD CL_ALV_TABLE_CREATE=&amp;gt;CREATE_DYNAMIC_TABLE&lt;br /&gt;    EXPORTING&lt;br /&gt;      IT_FIELDCATALOG           = IT_FIELDCATALOG&lt;br /&gt;    IMPORTING&lt;br /&gt;      EP_TABLE                  = DATAREF&lt;br /&gt;    EXCEPTIONS&lt;br /&gt;      GENERATE_SUBPOOL_DIR_FULL = 1&lt;br /&gt;      OTHERS                    = 2.&lt;br /&gt;&lt;br /&gt;  ASSIGN DATAREF-&amp;gt;* TO &amp;lt;ROW&amp;gt;.&lt;br /&gt;  CREATE DATA NEW_LINE LIKE LINE OF &amp;lt;ROW&amp;gt;.&lt;br /&gt;  ASSIGN NEW_LINE-&amp;gt;* TO &amp;lt;L_LINE&amp;gt;.&lt;br /&gt;&lt;br /&gt;  LOOP AT DATA_TAB ASSIGNING &amp;lt;FS_DATA_TAB&amp;gt;.&lt;br /&gt;    FIND REGEX '&amp;lt;[a-zA-Z][^&amp;gt;]*&amp;gt;\S' IN &amp;lt;FS_DATA_TAB&amp;gt;.&lt;br /&gt;    IF SY-SUBRC NE 0.&lt;br /&gt;      CONTINUE.&lt;br /&gt;    ENDIF.&lt;br /&gt;    FIND ALL OCCURRENCES OF REGEX '&amp;lt;[^&amp;gt;]+&amp;gt;[^&amp;lt;]*&amp;lt;/[^&amp;gt;]+&amp;gt;' IN &amp;lt;FS_DATA_TAB&amp;gt; RESULTS T_RESULTS.&lt;br /&gt;    LOOP AT T_RESULTS ASSIGNING &amp;lt;FS_RESULTS&amp;gt;.&lt;br /&gt;      AUX = &amp;lt;FS_DATA_TAB&amp;gt;+&amp;lt;FS_RESULTS&amp;gt;-OFFSET(&amp;lt;FS_RESULTS&amp;gt;-LENGTH).&lt;br /&gt;      FIND REGEX '[a-zA-Z\/][^&amp;gt;]*' IN AUX MATCH OFFSET OFF MATCH LENGTH LEN.&lt;br /&gt;      CONCATENATE '&amp;lt;L_LINE&amp;gt;-' AUX+OFF(LEN) INTO L_STRING.&lt;br /&gt;      REPLACE ALL OCCURRENCES OF REGEX '&amp;lt;[a-zA-Z\/][^&amp;gt;]*&amp;gt;' IN AUX WITH SPACE.&lt;br /&gt;      ASSIGN (L_STRING) TO &amp;lt;FS_ANY&amp;gt;.&lt;br /&gt;      &amp;lt;FS_ANY&amp;gt; = AUX.&lt;br /&gt;    ENDLOOP.&lt;br /&gt;    INSERT &amp;lt;L_LINE&amp;gt; INTO TABLE &amp;lt;ROW&amp;gt;.&lt;br /&gt;  ENDLOOP.&lt;br /&gt;&lt;br /&gt;  DESCRIBE TABLE IT_FIELDCATALOG LINES L_LINES.&lt;br /&gt;&lt;br /&gt;  LOOP AT &amp;lt;ROW&amp;gt; ASSIGNING &amp;lt;L_LINE&amp;gt;.&lt;br /&gt;    CLEAR L_TABIX.&lt;br /&gt;    DO L_LINES TIMES.&lt;br /&gt;      L_TABIX = L_TABIX + 1.&lt;br /&gt;      ASSIGN COMPONENT L_TABIX OF STRUCTURE &amp;lt;L_LINE&amp;gt; TO &amp;lt;FS_ROW&amp;gt;.&lt;br /&gt;      WRITE:/ &amp;lt;FS_ROW&amp;gt;.&lt;br /&gt;    ENDDO.&lt;br /&gt;    SKIP 1.&lt;br /&gt;  ENDLOOP.&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;El resultado seria...&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_eKAKUbdu3CI/TLpTBeBFFhI/AAAAAAAABXM/qy-mDxEfGx4/s1600/XML_RegEx_2.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 353px; height: 388px;" src="http://3.bp.blogspot.com/_eKAKUbdu3CI/TLpTBeBFFhI/AAAAAAAABXM/qy-mDxEfGx4/s400/XML_RegEx_2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5528822777253271058" /&gt;&lt;/a&gt;&lt;br /&gt;Ahora...una pequenha explicacion...&lt;br /&gt;&lt;br /&gt;* Utilizo el RegEx para poder leer los campos del XML y generar una tabla interna dinamica.&lt;br /&gt;* Utilizo el RegEx nuevamente para poder llenar la tabla interna dinamica con los valores de los campos del XML.&lt;br /&gt;* Utilizo programacion dinamica para poder imprimir los valores que hemos leido del XML.&lt;br /&gt;&lt;br /&gt;Para que despues no vayan a criticarme...el XML tiene que tener un formato como el que puesto en el ejemplo...si tiene otro formato (cada TAG en una linea), este codigo no va a funcionar...habria que modificar el codigo un poco...asi que no...el codigo no sirve para leer cualquier XML que tengan en frente...sino como dije al inicio, para leer XML's simples y concretos.&lt;br /&gt;&lt;br /&gt;Saludos,&lt;br /&gt;&lt;br /&gt;Blag.&lt;br /&gt;&lt;br /&gt;&lt;/DIV&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13698376-2667031515931557169?l=atejada.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atejada.blogspot.com/feeds/2667031515931557169/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13698376&amp;postID=2667031515931557169' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/2667031515931557169'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/2667031515931557169'/><link rel='alternate' type='text/html' href='http://atejada.blogspot.com/2010/10/tres-son-multitudxml-regex-y.html' title='Tres son multitud...XML, RegEx y Programación Dinámica'/><author><name>Alvaro "Blag" Tejada Galindo</name><uri>http://www.blogger.com/profile/12061593528820409779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='https://weblogs.sdn.sap.com/images/people/alvaro_tajeda.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_eKAKUbdu3CI/TLpSG1k3erI/AAAAAAAABXE/wErljfntaCo/s72-c/XML_RegEx.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13698376.post-2680591600614404421</id><published>2010-10-14T05:40:00.000-07:00</published><updated>2010-10-14T05:47:35.868-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Misc'/><title type='text'>Como pasa el tiempo...</title><content type='html'>&lt;DIV ALIGN="JUSTIFY"&gt;&lt;br /&gt;Recien ayer me di cuenta de que no posteo desde el anho pasado (Disculpen que no escriba bien, pero con teclado en ingles hay letras que no salen).&lt;br /&gt;&lt;br /&gt;Para los que siguen mis otros blogs, o mis updates en &lt;a href="http://www.twitter.com/Blag"&gt;Twitter&lt;/a&gt;, sabran que desde hace unos 5 meses estoy viviendo en Montreal, Canada con mi esposa y mi hija y estoy trabajando en &lt;a href="http://www.beyondtechnologies.ca"&gt;Beyond Technologies&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;La vida en Montreal es bastante tranquila...uno trabaja para vivir, y no vive para trabajar como en el Peru...aqui se respetan las 8 horas laborales y las horas extras son muy bien pagadas...claro, no todo es color de rosa, puesto que los impuestos son ridiculamente altos, pero en lineas generales, me encanta vivir aca -:)&lt;br /&gt;&lt;br /&gt;Este anho, como comprenderan, no voy a ir al TechEd en Las Vegas, puesto que no puedo dejar a mi familia sola durante una semana en un pais nuevo...aunque si me escape al Inside Track Newton Square en Philadelphia, que duro 1 dia.&lt;br /&gt;&lt;br /&gt;No puedo garantizar que voy a escribir muchos posts, puesto que ya lo he dicho antes, pero no siempre alcanza el tiempo y con mis otros blogs y proyectos personales, es un poco complicado...lo que si, voy a tratar de postear algo...jejeje...&lt;br /&gt;&lt;br /&gt;Mi proximo blog, que estara listo yo asumo el fin de semana, sera como leer un archivo XML utilizando Expresiones Regulares...espero que les guste y es bueno estar de vuelta -;)&lt;br /&gt;&lt;br /&gt;P.D: Gracias a todos mis lectores! Ya sobrepasamos las 100,000 visitas!!! Todo un mega logro para un humilde blog como este -:)&lt;br /&gt;&lt;br /&gt;Saludos,&lt;br /&gt;&lt;br /&gt;Blag. &lt;br /&gt;&lt;/DIV&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13698376-2680591600614404421?l=atejada.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atejada.blogspot.com/feeds/2680591600614404421/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13698376&amp;postID=2680591600614404421' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/2680591600614404421'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/2680591600614404421'/><link rel='alternate' type='text/html' href='http://atejada.blogspot.com/2010/10/como-pasa-el-tiempo.html' title='Como pasa el tiempo...'/><author><name>Alvaro "Blag" Tejada Galindo</name><uri>http://www.blogger.com/profile/12061593528820409779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='https://weblogs.sdn.sap.com/images/people/alvaro_tajeda.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13698376.post-1771663908967674768</id><published>2009-12-23T08:18:00.000-08:00</published><updated>2009-12-23T08:20:29.996-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Misc'/><title type='text'>Feliz Navidad 2009!</title><content type='html'>&lt;DIV ALIGN="JUSTIFY"&gt;&lt;br /&gt;Se nos acaba el año 2009...es por eso que es tiempo de desearles una...&lt;br /&gt;&lt;br /&gt;FELIZ NAVIDAD Y PRÓSPERO AÑO NUEVO!!!&lt;br /&gt;&lt;br /&gt;Que este año 2010, sea excelente para todos nosotros, que podamos alcanzar todas nuestras metas y seguir siendo tan Geeks como podemos serlo -;)&lt;br /&gt;&lt;br /&gt;Saludos,&lt;br /&gt;&lt;br /&gt;Blag.&lt;br /&gt;&lt;/DIV&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13698376-1771663908967674768?l=atejada.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atejada.blogspot.com/feeds/1771663908967674768/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13698376&amp;postID=1771663908967674768' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/1771663908967674768'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/1771663908967674768'/><link rel='alternate' type='text/html' href='http://atejada.blogspot.com/2009/12/feliz-navidad-2009.html' title='Feliz Navidad 2009!'/><author><name>Alvaro "Blag" Tejada Galindo</name><uri>http://www.blogger.com/profile/12061593528820409779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='https://weblogs.sdn.sap.com/images/people/alvaro_tajeda.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13698376.post-415483062599326691</id><published>2009-12-15T03:26:00.000-08:00</published><updated>2009-12-15T03:44:02.382-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AIR'/><category scheme='http://www.blogger.com/atom/ns#' term='FLEX'/><title type='text'>Edita tus fotos a la AIR</title><content type='html'>&lt;DIV ALIGN="JUSTIFY"&gt;&lt;br /&gt;El otro día estaba revisando la página de mi amigo &lt;a href="http://www.myspace.com/22ndcentury"&gt;Duane "Chaos" Nickull&lt;/a&gt; llamada &lt;a href="http://technoracle.blogspot.com"&gt;Technoracle(a.k.a "Duane's World")&lt;/a&gt; y encontré que está dando gratis &lt;a href="http://technoracle.blogspot.com/2009/12/50-free-citrify-licenses.html"&gt;50 licencias para Citrify &lt;/a&gt;. Por supuesto...me arriesgué y felizmente fuí uno de los elegidos -:) Ahora soy un usuario de &lt;a href="http://www.citrify.com/"&gt;Citrify&lt;/a&gt; -;)&lt;br /&gt;&lt;br /&gt;Pero...que es &lt;a href="http://www.citrify.com/"&gt;Citrify&lt;/a&gt;? Es una aplicación en Adobe AIR que se usa para editar las fotos en una forma fácil y divertida.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_eKAKUbdu3CI/SyTvy3fMMkI/AAAAAAAABQ8/vcAvVN-udnQ/s1600-h/Citrify01.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 280px;" src="http://2.bp.blogspot.com/_eKAKUbdu3CI/SyTvy3fMMkI/AAAAAAAABQ8/vcAvVN-udnQ/s400/Citrify01.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5414716309173449282" /&gt;&lt;/a&gt;&lt;br /&gt;Escoge una imagen...&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_eKAKUbdu3CI/SyTwLqNF3WI/AAAAAAAABRE/XFPrRXGM0EE/s1600-h/Citrify02.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 280px;" src="http://2.bp.blogspot.com/_eKAKUbdu3CI/SyTwLqNF3WI/AAAAAAAABRE/XFPrRXGM0EE/s400/Citrify02.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5414716735104605538" /&gt;&lt;/a&gt;&lt;br /&gt;Puedes ajustar el Brightness (Brillo), Contrast (Contraste), Hue (Matiz), Saturation (Saturación), Resize (Tamaño), Rotate (Rotación) and Sharpen (Enfoque).&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_eKAKUbdu3CI/SyTxFBID36I/AAAAAAAABRM/bFSs7I4J2B8/s1600-h/Citrify03.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 280px;" src="http://2.bp.blogspot.com/_eKAKUbdu3CI/SyTxFBID36I/AAAAAAAABRM/bFSs7I4J2B8/s400/Citrify03.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5414717720510062498" /&gt;&lt;/a&gt;&lt;br /&gt;También pueden hacer retoques con with Airbrush (Aerógrafo), Blemish (Mancha), Glare (Luminosidad), Redeye (Ojo rojo), Toothbrush (Cepillo de dientes) and Wrinkle (Arruga).&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_eKAKUbdu3CI/SyTxrasD37I/AAAAAAAABRU/ZP4WCYpSbmw/s1600-h/Citrify04.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 280px;" src="http://3.bp.blogspot.com/_eKAKUbdu3CI/SyTxrasD37I/AAAAAAAABRU/ZP4WCYpSbmw/s400/Citrify04.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5414718380206972850" /&gt;&lt;/a&gt;&lt;br /&gt;Por supuesto...no se olviden de los efectos, pueden utilizar Halftone (Medio tono), Flashback (Retrospectiva), Watercolor (Acuarela), Hulkify (Hulkificar), Obamify (Obamizar), Sepia (Sepia), Black &amp; White (Blanco y negro) and Pencil sketch (Dibujo a lápiz).&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_eKAKUbdu3CI/SyT0coAVENI/AAAAAAAABRc/GDfxvOX8_ro/s1600-h/Citrify05.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 280px;" src="http://2.bp.blogspot.com/_eKAKUbdu3CI/SyT0coAVENI/AAAAAAAABRc/GDfxvOX8_ro/s400/Citrify05.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5414721424618492114" /&gt;&lt;/a&gt;&lt;br /&gt;Jugando un poco con estos efectos y ajustes, puedes hacer que las fotos se vean muy extrañas, como esta -:)&lt;br /&gt;&lt;br /&gt;Realmente recomiendo este software...fácil de usar, construído con Adobe AIR...qué mas pueden pedir?&lt;br /&gt;&lt;br /&gt;Saludos,&lt;br /&gt;&lt;br /&gt;Blag.&lt;br /&gt;&lt;/DIV&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13698376-415483062599326691?l=atejada.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atejada.blogspot.com/feeds/415483062599326691/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13698376&amp;postID=415483062599326691' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/415483062599326691'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/415483062599326691'/><link rel='alternate' type='text/html' href='http://atejada.blogspot.com/2009/12/edita-tus-fotos-la-air.html' title='Edita tus fotos a la AIR'/><author><name>Alvaro "Blag" Tejada Galindo</name><uri>http://www.blogger.com/profile/12061593528820409779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='https://weblogs.sdn.sap.com/images/people/alvaro_tajeda.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_eKAKUbdu3CI/SyTvy3fMMkI/AAAAAAAABQ8/vcAvVN-udnQ/s72-c/Citrify01.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13698376.post-3360744346267759777</id><published>2009-12-13T04:42:00.001-08:00</published><updated>2009-12-13T05:16:09.055-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='FLEX'/><category scheme='http://www.blogger.com/atom/ns#' term='GAMES'/><title type='text'>ChessJam - Ajedrez en línea</title><content type='html'>&lt;DIV&gt;&lt;br /&gt;Debo admitir que soy muy malo en Ajedrez...pero eso no significa que no me guste -;)&lt;br /&gt;Así que cuando estaba navegando en mi RSS Reader, encontré &lt;a href="http://www.chessjam.com"&gt;ChessJam&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.chessjam.com"&gt;ChessJam&lt;/a&gt; es una aplicación construida con Adobe Flex y ColdFusion corriendo en Adobe AIR.&lt;br /&gt;&lt;br /&gt;Pero se estarán preguntando...porque tanta conmoción por un juego de Ajedrez? Fácil...puedes jugar contra robots o contra gente de cualquier lugar del mundo...chat incluido...para mi...eso es asombroso -:)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_eKAKUbdu3CI/SyTOCJzkIkI/AAAAAAAABQE/99GoZKV5TVI/s1600-h/ChessJam01.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 272px;" src="http://3.bp.blogspot.com/_eKAKUbdu3CI/SyTOCJzkIkI/AAAAAAAABQE/99GoZKV5TVI/s400/ChessJam01.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5414679188393435714" /&gt;&lt;/a&gt;&lt;br /&gt;Debemos crear una cuenta y luego logearnos.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_eKAKUbdu3CI/SyTOxhfLBiI/AAAAAAAABQM/fYnWjU2ZJfE/s1600-h/ChessJam02.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 272px;" src="http://4.bp.blogspot.com/_eKAKUbdu3CI/SyTOxhfLBiI/AAAAAAAABQM/fYnWjU2ZJfE/s400/ChessJam02.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5414680002204206626" /&gt;&lt;/a&gt;&lt;br /&gt;Podemos escoger entre un juego simple of chatear y retar a otros jugadores....&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_eKAKUbdu3CI/SyTPyyVX26I/AAAAAAAABQU/J8uLwJQviRY/s1600-h/ChessJam03.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 272px;" src="http://1.bp.blogspot.com/_eKAKUbdu3CI/SyTPyyVX26I/AAAAAAAABQU/J8uLwJQviRY/s400/ChessJam03.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5414681123418004386" /&gt;&lt;/a&gt;&lt;br /&gt;Podemos escoger varios tipos de juegos (Dependiendo del tiempo de duración) o entrar en un Torneo.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_eKAKUbdu3CI/SyTQ63UlgCI/AAAAAAAABQc/okeSXwctNCI/s1600-h/ChessJam04.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 273px;" src="http://3.bp.blogspot.com/_eKAKUbdu3CI/SyTQ63UlgCI/AAAAAAAABQc/okeSXwctNCI/s400/ChessJam04.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5414682361707462690" /&gt;&lt;/a&gt;&lt;br /&gt;Tenemos muchas oportunidades para decidir si queremos jugar con un robot o con otro ser humano.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_eKAKUbdu3CI/SyTRtjLlN9I/AAAAAAAABQk/Eygs9LTJYsQ/s1600-h/ChessJam05.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 271px;" src="http://2.bp.blogspot.com/_eKAKUbdu3CI/SyTRtjLlN9I/AAAAAAAABQk/Eygs9LTJYsQ/s400/ChessJam05.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5414683232474314706" /&gt;&lt;/a&gt;&lt;br /&gt;Podemos escoger entre una vista 3D...&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_eKAKUbdu3CI/SyTSlV4eXSI/AAAAAAAABQs/Yr0ISzZszz8/s1600-h/ChessJam06.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 271px;" src="http://2.bp.blogspot.com/_eKAKUbdu3CI/SyTSlV4eXSI/AAAAAAAABQs/Yr0ISzZszz8/s400/ChessJam06.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5414684190977187106" /&gt;&lt;/a&gt;&lt;br /&gt;o una clásica vista 2D...&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_eKAKUbdu3CI/SyTTQPz3B1I/AAAAAAAABQ0/wbk2uRa5bHo/s1600-h/ChessJam07.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 272px;" src="http://2.bp.blogspot.com/_eKAKUbdu3CI/SyTTQPz3B1I/AAAAAAAABQ0/wbk2uRa5bHo/s400/ChessJam07.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5414684928081594194" /&gt;&lt;/a&gt;&lt;br /&gt;Cuando te inscribes...debes indicar tu país de residencia...para que el sistema pueda correr algunas interesantes estadísticas.&lt;br /&gt;&lt;br /&gt;Así que...porque no lo dan a este juego una oportunidad? Juegenlo...disfrutenlo y pasenselo a sus amigos -;)&lt;br /&gt;&lt;br /&gt;Saludos,&lt;br /&gt;&lt;br /&gt;Blag.&lt;br /&gt;&lt;/DIV&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13698376-3360744346267759777?l=atejada.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atejada.blogspot.com/feeds/3360744346267759777/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13698376&amp;postID=3360744346267759777' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/3360744346267759777'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/3360744346267759777'/><link rel='alternate' type='text/html' href='http://atejada.blogspot.com/2009/12/chessjam-ajedrez-en-linea.html' title='ChessJam - Ajedrez en línea'/><author><name>Alvaro "Blag" Tejada Galindo</name><uri>http://www.blogger.com/profile/12061593528820409779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='https://weblogs.sdn.sap.com/images/people/alvaro_tajeda.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_eKAKUbdu3CI/SyTOCJzkIkI/AAAAAAAABQE/99GoZKV5TVI/s72-c/ChessJam01.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13698376.post-139002438968477069</id><published>2009-12-12T03:10:00.000-08:00</published><updated>2009-12-12T03:35:37.822-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SDN'/><category scheme='http://www.blogger.com/atom/ns#' term='ABAP'/><title type='text'>Herramienta matemática con RegEx y JavaScript</title><content type='html'>&lt;DIV ALIGN="JUSTIFY"&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Post original "&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/17090"&gt;RegEx and JavaScript Mathematical Tool&lt;/a&gt;".&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Si me conocen...ya saben que amo los nuevos lenguajes de programación y las herramientas. Aunque las Expresiones Regulares y el JavaScript no son exactamente nuevos, no han sido explotados en ABAP, es por eso que quiero que este blog muestre todo lo que podemos lograr utilizándo cualquiera de estas dos adiciones al lenguaje.&lt;br /&gt;&lt;br /&gt;La historia en resumen, es así...Estaba revisándo mi Google Reader como todas la mañanas, cuando vi este excelente y muy gracioso comic de  &lt;a href="http://xkcd.com/208/"&gt;XKCD&lt;/a&gt;...&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_eKAKUbdu3CI/SyN7ELOJlkI/AAAAAAAABPU/uUl--_03-Lg/s1600-h/regular_expressions.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 395px; height: 400px;" src="http://3.bp.blogspot.com/_eKAKUbdu3CI/SyN7ELOJlkI/AAAAAAAABPU/uUl--_03-Lg/s400/regular_expressions.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5414306488691299906" /&gt;&lt;/a&gt;&lt;br /&gt;Supe que era la hora de intentar convertirme en un heroe del RegEx...&lt;br /&gt;&lt;br /&gt;Debo admitir que el RegEx no es fácil...a veces es complejo y avaro...pero creánme...llegas a amarlo (Ok...no todo el mundo lo ama...)&lt;br /&gt;&lt;br /&gt;Así que, supe que era hora de que construyera una pequeña herramienta utilizándo mis nuevas habilidades. Así que construí una pequeña herramienta matemática, utilizándo tanto RegEx como JavaScript...y lo gracioso aquí es que mientras me rompía la cabeza con RegEx, recordé que utilizándo JavaScript tenía el trabajo prácticamente hecho...pero como soy un Geek...no podía simplemente tomar el camino fácil...seguí luchando hasta que mi RegEx funcionó, pero dejé mi JavaScript como una manera de decir..."Hay más de una manera de hacer que las cosas funcionen...".&lt;br /&gt;&lt;br /&gt;Dejenme mostrarles algunas imagenes primero, y luego les muestro el código fuente...&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_eKAKUbdu3CI/SyN8jT-uIFI/AAAAAAAABPc/az-z0COu1OU/s1600-h/RegEx1.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 167px;" src="http://1.bp.blogspot.com/_eKAKUbdu3CI/SyN8jT-uIFI/AAAAAAAABPc/az-z0COu1OU/s400/RegEx1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5414308123130077266" /&gt;&lt;/a&gt;&lt;br /&gt;Podemos pasar una expresión muy simple...&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_eKAKUbdu3CI/SyN8wgYCg_I/AAAAAAAABPk/SoqrSL7fFNg/s1600-h/RegEx2.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 283px; height: 192px;" src="http://2.bp.blogspot.com/_eKAKUbdu3CI/SyN8wgYCg_I/AAAAAAAABPk/SoqrSL7fFNg/s400/RegEx2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5414308349795795954" /&gt;&lt;/a&gt;&lt;br /&gt;O una expresión muy compleja...&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_eKAKUbdu3CI/SyN88cVF3NI/AAAAAAAABPs/GGc_638FZww/s1600-h/RegEx3.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 166px;" src="http://4.bp.blogspot.com/_eKAKUbdu3CI/SyN88cVF3NI/AAAAAAAABPs/GGc_638FZww/s400/RegEx3.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5414308554868120786" /&gt;&lt;/a&gt;&lt;br /&gt;Y probarlas ya sea con RegEx o con JavaScript...&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_eKAKUbdu3CI/SyN9JqK0Z0I/AAAAAAAABP0/Uu6BauG9xqY/s1600-h/RegEx4.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 285px; height: 190px;" src="http://4.bp.blogspot.com/_eKAKUbdu3CI/SyN9JqK0Z0I/AAAAAAAABP0/Uu6BauG9xqY/s400/RegEx4.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5414308781921429314" /&gt;&lt;/a&gt;&lt;br /&gt;Ahora el código fuente...&lt;br /&gt;&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 95%;"&gt;&lt;br /&gt;*&amp;-----------------------------------------------------------*&lt;br /&gt;*&amp; Report  ZDUMMY_SANDBOX                                    *&lt;br /&gt;*&amp;-----------------------------------------------------------*&lt;br /&gt;*&amp; Sandbox application only for testing porpouses.           *&lt;br /&gt;*&amp;-----------------------------------------------------------*&lt;br /&gt;REPORT zdummy_sandbox.&lt;br /&gt;&lt;br /&gt;*INTERNAL TABLES&lt;br /&gt;DATA: message TYPE string,&lt;br /&gt;      t_results TYPE match_result_tab,&lt;br /&gt;      t_precedence TYPE match_result_tab,&lt;br /&gt;      t_operations TYPE match_result_tab.&lt;br /&gt;&lt;br /&gt;*VARIABLES&lt;br /&gt;DATA: g_number TYPE string,&lt;br /&gt;      g_sum TYPE i,&lt;br /&gt;      g_sum_text TYPE string,&lt;br /&gt;      g_operator TYPE string,&lt;br /&gt;      g_string TYPE string,&lt;br /&gt;      source TYPE string,&lt;br /&gt;      return_value TYPE string,&lt;br /&gt;      js_processor TYPE REF TO cl_java_script.&lt;br /&gt;&lt;br /&gt;*CONSTANTS&lt;br /&gt;CONSTANTS: c_operator TYPE string VALUE '+*/-%'.&lt;br /&gt;&lt;br /&gt;*FIELD-SYMBOLS&lt;br /&gt;FIELD-SYMBOLS: &amp;lt;fs_results&amp;gt; LIKE LINE OF t_results,&lt;br /&gt;               &amp;lt;fs_precedence&amp;gt; LIKE LINE OF t_precedence,&lt;br /&gt;               &amp;lt;fs_operations&amp;gt; LIKE LINE OF t_operations.&lt;br /&gt;&lt;br /&gt;*SELECTION-SCREEN&lt;br /&gt;SELECTION-SCREEN BEGIN OF BLOCK b01 WITH FRAME.&lt;br /&gt;PARAMETERS:&lt;br /&gt;           p_msg TYPE string OBLIGATORY,&lt;br /&gt;           p_js RADIOBUTTON GROUP sa DEFAULT 'X',&lt;br /&gt;           p_re RADIOBUTTON GROUP sa.&lt;br /&gt;SELECTION-SCREEN END OF BLOCK b01.&lt;br /&gt;&lt;br /&gt;*START-OF-SELECTION&lt;br /&gt;START-OF-SELECTION.&lt;br /&gt;&lt;br /&gt;  message = p_msg.&lt;br /&gt;&lt;br /&gt;  IF p_re EQ 'X'.&lt;br /&gt;*REGULAR EXPRESSIONS&lt;br /&gt;    WHILE sy-subrc EQ 0.&lt;br /&gt;&lt;br /&gt;      FIND REGEX '[^\+\-]\*.*' IN message RESULTS t_precedence.&lt;br /&gt;      IF sy-subrc EQ 0.&lt;br /&gt;        READ TABLE t_precedence INDEX 1 ASSIGNING &amp;lt;fs_precedence&amp;gt;.&lt;br /&gt;        g_string = message+&amp;lt;fs_precedence&amp;gt;-offset(&amp;lt;fs_precedence&amp;gt;-length).&lt;br /&gt;        CONCATENATE '(' g_string ')' INTO g_string.&lt;br /&gt;        REPLACE REGEX '[^\+\-]\*.*' IN message WITH g_string.&lt;br /&gt;        CONDENSE g_string.&lt;br /&gt;      ENDIF.&lt;br /&gt;&lt;br /&gt;      FIND REGEX '\(([0-9]{0,9}|[\* \+ \- \/])+\)' IN message RESULTS t_results.&lt;br /&gt;      READ TABLE t_results INDEX 1 ASSIGNING &amp;lt;fs_results&amp;gt;.&lt;br /&gt;      IF sy-subrc NE 0 AND &amp;lt;fs_results&amp;gt; IS NOT ASSIGNED.&lt;br /&gt;        EXIT.&lt;br /&gt;      ENDIF.&lt;br /&gt;      g_string = message+&amp;lt;fs_results&amp;gt;-offset(&amp;lt;fs_results&amp;gt;-length).&lt;br /&gt;      CONDENSE g_string.&lt;br /&gt;      FIND ALL OCCURRENCES OF REGEX '([\(]|[0-9]{0,9}|[\* \+ \- \/]|[\)])'&lt;br /&gt;      IN g_string RESULTS t_operations.&lt;br /&gt;&lt;br /&gt;      LOOP AT t_operations ASSIGNING &amp;lt;fs_operations&amp;gt;.&lt;br /&gt;        g_number = g_string+&amp;lt;fs_operations&amp;gt;-offset(&amp;lt;fs_operations&amp;gt;-length).&lt;br /&gt;        IF g_number EQ '(' OR g_number EQ ')'.&lt;br /&gt;          CONTINUE.&lt;br /&gt;        ENDIF.&lt;br /&gt;        IF g_sum EQ space.&lt;br /&gt;          g_sum = g_number.&lt;br /&gt;        ENDIF.&lt;br /&gt;        IF g_number CA c_operator.&lt;br /&gt;          g_operator = g_number.&lt;br /&gt;          CONTINUE.&lt;br /&gt;        ENDIF.&lt;br /&gt;        CASE g_operator.&lt;br /&gt;          WHEN '+'.&lt;br /&gt;            g_sum = g_sum + g_number.&lt;br /&gt;            CLEAR g_operator.&lt;br /&gt;          WHEN '-'.&lt;br /&gt;            g_sum = g_sum - g_number.&lt;br /&gt;            CLEAR g_operator.&lt;br /&gt;          WHEN '*'.&lt;br /&gt;            g_sum = g_sum * g_number.&lt;br /&gt;            CLEAR g_operator.&lt;br /&gt;          WHEN '/'.&lt;br /&gt;            g_sum = g_sum / g_number.&lt;br /&gt;            CLEAR g_operator.&lt;br /&gt;          WHEN '%'.&lt;br /&gt;            g_sum = g_sum MOD g_number.&lt;br /&gt;            CLEAR g_operator.&lt;br /&gt;        ENDCASE.&lt;br /&gt;      ENDLOOP.&lt;br /&gt;&lt;br /&gt;      g_sum_text = g_sum.&lt;br /&gt;      REPLACE REGEX '\(([0-9]{0,9}|[\* \+ \- \/])+\)' IN message &lt;br /&gt;      WITH g_sum_text.&lt;br /&gt;&lt;br /&gt;      FIND REGEX '[^\+\-]\*.*' IN message RESULTS t_precedence.&lt;br /&gt;      IF sy-subrc EQ 0.&lt;br /&gt;        READ TABLE t_precedence INDEX 1 ASSIGNING &amp;lt;fs_precedence&amp;gt;.&lt;br /&gt;        g_string = message+&amp;lt;fs_precedence&amp;gt;-offset(&amp;lt;fs_precedence&amp;gt;-length).&lt;br /&gt;        CONCATENATE '(' g_string ')' INTO g_string.&lt;br /&gt;        REPLACE REGEX '[^\+\-]\*.*' IN message WITH g_string.&lt;br /&gt;        CONDENSE g_string.&lt;br /&gt;      ENDIF.&lt;br /&gt;&lt;br /&gt;      CLEAR: g_sum,g_operator,g_number.&lt;br /&gt;    ENDWHILE.&lt;br /&gt;&lt;br /&gt;    FIND ALL OCCURRENCES OF REGEX '([\(]|[0-9]{0,9}|[\* \+ \- \/]|[\)])'&lt;br /&gt;    IN message RESULTS t_operations.&lt;br /&gt;    LOOP AT t_operations ASSIGNING &amp;lt;fs_operations&amp;gt;.&lt;br /&gt;      g_number = message+&amp;lt;fs_operations&amp;gt;-offset(&amp;lt;fs_operations&amp;gt;-length).&lt;br /&gt;      IF g_number EQ '(' OR g_number EQ ')'.&lt;br /&gt;        CONTINUE.&lt;br /&gt;      ENDIF.&lt;br /&gt;      IF g_sum EQ space.&lt;br /&gt;        g_sum = g_number.&lt;br /&gt;      ENDIF.&lt;br /&gt;      IF g_number CA c_operator.&lt;br /&gt;        g_operator = g_number.&lt;br /&gt;        CONTINUE.&lt;br /&gt;      ENDIF.&lt;br /&gt;      CASE g_operator.&lt;br /&gt;        WHEN '+'.&lt;br /&gt;          g_sum = g_sum + g_number.&lt;br /&gt;          CLEAR g_operator.&lt;br /&gt;        WHEN '-'.&lt;br /&gt;          g_sum = g_sum - g_number.&lt;br /&gt;          CLEAR g_operator.&lt;br /&gt;        WHEN '*'.&lt;br /&gt;          g_sum = g_sum * g_number.&lt;br /&gt;          CLEAR g_operator.&lt;br /&gt;        WHEN '/'.&lt;br /&gt;          g_sum = g_sum / g_number.&lt;br /&gt;          CLEAR g_operator.&lt;br /&gt;        WHEN '%'.&lt;br /&gt;          g_sum = g_sum MOD g_number.&lt;br /&gt;          CLEAR g_operator.&lt;br /&gt;      ENDCASE.&lt;br /&gt;    ENDLOOP.&lt;br /&gt;&lt;br /&gt;    WRITE:/ 'The result is:', g_sum.&lt;br /&gt;&lt;br /&gt;  ELSE.&lt;br /&gt;*JAVASCRIPT&lt;br /&gt;    js_processor = cl_java_script=&amp;gt;create( ).&lt;br /&gt;    CONCATENATE&lt;br /&gt;      'var string = ' message ';'&lt;br /&gt;      'function Set_String()                          '&lt;br /&gt;      '  { string = eval(string);                     '&lt;br /&gt;      '  }                                            '&lt;br /&gt;      'Set_String();                                  '&lt;br /&gt;      'string;                                        '&lt;br /&gt;        INTO source SEPARATED BY cl_abap_char_utilities=&amp;gt;cr_lf.&lt;br /&gt;&lt;br /&gt;    return_value = js_processor-&amp;gt;evaluate( source ).&lt;br /&gt;&lt;br /&gt;    WRITE:/ 'The result is:', return_value.&lt;br /&gt;  ENDIF.&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Utilicé RegEx para extraer las operaciones dentro de los parentesis y  para construir la precedencia de operadores.&lt;br /&gt;&lt;br /&gt;Si encuentran algún bug (Realmente espero que no), no duden en decirmelo -:)&lt;br /&gt;&lt;br /&gt;Si quieren más información sobre RegEx por favor lean esto en el &lt;a href="http://sdn.sap.com"&gt;SCN&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/15768"&gt;ABAP Geek 14 - Regular Expressions Made Easy&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/index?rid=/library/uuid/03a52be5-0901-0010-9da4-e9d5f8c5ce1c"&gt;Express Yourself Regularly with SAP NetWeaver 7.0, Part 1 &lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/index?rid=/library/uuid/9222ea17-0a01-0010-4a85-a71ba4284b9d"&gt;Express Yourself Regularly with SAP NetWeaver 7.0, Part 2&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/index?rid=/library/uuid/c924b874-0a01-0010-9192-b31f007a14ce"&gt;Express Yourself Even More Regularly&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Saludos,&lt;br /&gt;&lt;br /&gt;Blag.&lt;br /&gt;&lt;/DIV&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13698376-139002438968477069?l=atejada.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atejada.blogspot.com/feeds/139002438968477069/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13698376&amp;postID=139002438968477069' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/139002438968477069'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/139002438968477069'/><link rel='alternate' type='text/html' href='http://atejada.blogspot.com/2009/12/herramienta-matematica-con-regex-y.html' title='Herramienta matemática con RegEx y JavaScript'/><author><name>Alvaro "Blag" Tejada Galindo</name><uri>http://www.blogger.com/profile/12061593528820409779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='https://weblogs.sdn.sap.com/images/people/alvaro_tajeda.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_eKAKUbdu3CI/SyN7ELOJlkI/AAAAAAAABPU/uUl--_03-Lg/s72-c/regular_expressions.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13698376.post-2339108302759469025</id><published>2009-11-16T13:31:00.002-08:00</published><updated>2009-11-16T13:39:33.234-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='TechEd_2009'/><category scheme='http://www.blogger.com/atom/ns#' term='SAP'/><category scheme='http://www.blogger.com/atom/ns#' term='Misc'/><category scheme='http://www.blogger.com/atom/ns#' term='ABAP'/><title type='text'>Donde me había metido?</title><content type='html'>&lt;DIV ALIGN="JUSTIFY"&gt;&lt;br /&gt;Se que hace varios meses no posteo nada en el blog -:( Lo que pasa es que he estado bastante ocupado con mis nuevas funciones de Project Manager, el &lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/16347"&gt;SAP TechEd de Phoenix&lt;/a&gt; y un proyecto que estoy haciendo para mi compañía (Una vez Geek...siempre Geek)...&lt;br /&gt;&lt;br /&gt;No voy a decir "Ahora voy a postear como antes!" porque no creo que sea verdad...para ser sinceros...espero podear postear por lo menos una vez a la semana -:)&lt;br /&gt;&lt;br /&gt;Eso si...estoy pensando sacar la segunda edición de mi libro &lt;a href="http://www.lulu.com/content/hardcover-book/el-arte-de-programar-sap-netweaver/1190485"&gt;El Arte de Programar NetWeaver&lt;/a&gt;, así que estén atentos -;)&lt;br /&gt;&lt;br /&gt;Saludos,&lt;br /&gt;&lt;br /&gt;Blag.&lt;br /&gt;&lt;/DIV&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13698376-2339108302759469025?l=atejada.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atejada.blogspot.com/feeds/2339108302759469025/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13698376&amp;postID=2339108302759469025' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/2339108302759469025'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/2339108302759469025'/><link rel='alternate' type='text/html' href='http://atejada.blogspot.com/2009/11/donde-me-habia-metido.html' title='Donde me había metido?'/><author><name>Alvaro "Blag" Tejada Galindo</name><uri>http://www.blogger.com/profile/12061593528820409779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='https://weblogs.sdn.sap.com/images/people/alvaro_tajeda.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13698376.post-5594879899493151492</id><published>2009-08-24T14:30:00.000-07:00</published><updated>2009-08-24T14:36:40.733-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SAP'/><category scheme='http://www.blogger.com/atom/ns#' term='ABAP'/><title type='text'>Biz Partner - Servicios de Consultoría SAP</title><content type='html'>&lt;DIV ALIGN="JUSTIFY"&gt;&lt;br /&gt;Normalmente no escribiría esto en mi blog, pero dado que ahora mi función es de Project Manager y encargado del Área Comercial...&lt;br /&gt;&lt;br /&gt;La empresa donde trabajo &lt;a href="http://www.bizpartner.biz/"&gt;Biz Partner&lt;/a&gt; ofrece servicios de consultoría tanto a nivel técnico (ABAP, BSP, WebDynpro) como a nivel funcional (FI, SD, MM) entre muchos otros. Así como servicios de Implementación, Roll-Out y Mejora continua.&lt;br /&gt;&lt;br /&gt;Pueden contactarme directamente en: &lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Alvaro Tejada Galindo&lt;br /&gt;Project Manager - SAP Mentor&lt;br /&gt;Biz Partner.&lt;br /&gt;atejada@bizpartner.biz&lt;br /&gt;(511)-6280214&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Saludos,&lt;br /&gt;&lt;br /&gt;Blag.&lt;br /&gt;&lt;/DIV&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13698376-5594879899493151492?l=atejada.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atejada.blogspot.com/feeds/5594879899493151492/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13698376&amp;postID=5594879899493151492' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/5594879899493151492'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/5594879899493151492'/><link rel='alternate' type='text/html' href='http://atejada.blogspot.com/2009/08/biz-partner-servicios-de-consultoria.html' title='Biz Partner - Servicios de Consultoría SAP'/><author><name>Alvaro "Blag" Tejada Galindo</name><uri>http://www.blogger.com/profile/12061593528820409779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='https://weblogs.sdn.sap.com/images/people/alvaro_tajeda.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13698376.post-390704925838442898</id><published>2009-08-11T08:13:00.000-07:00</published><updated>2009-08-11T08:37:30.817-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SAP'/><category scheme='http://www.blogger.com/atom/ns#' term='ABAP'/><title type='text'>Learning on Demand por SAP</title><content type='html'>&lt;DIV ALIGN="JUSTIFY"&gt;&lt;br /&gt;Siendo un &lt;a href="https://wiki.sdn.sap.com/wiki/display/SAPMentors/SAP%20Mentor%20Initiative"&gt;SAP Mentor&lt;/a&gt; recibo muchos beneficios y regalos de gente muy buena y amable.&lt;br /&gt;&lt;br /&gt;Hace unos días recibí el acceso a &lt;a href="https://lod.sdn.sap.com/index.jspa"&gt;Learning on Demand por SAP&lt;/a&gt;, así que por supuesto me puse a jugar un poco.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_eKAKUbdu3CI/SnyYqaCJB9I/AAAAAAAABKw/qeifeOP0do4/s1600-h/LOD_01.jpeg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 201px;" src="http://1.bp.blogspot.com/_eKAKUbdu3CI/SnyYqaCJB9I/AAAAAAAABKw/qeifeOP0do4/s400/LOD_01.jpeg" border="0" alt=""id="BLOGGER_PHOTO_ID_5367332710229018578" /&gt;&lt;/a&gt;&lt;br /&gt;Cuando te logeas puedes navegar por los cursos disponibles, los cuales no serán muchos pero van a crecer en el tiempo.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_eKAKUbdu3CI/SnygYoUe36I/AAAAAAAABK4/yUqqGAW773E/s1600-h/LOD_02.jpeg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 203px;" src="http://3.bp.blogspot.com/_eKAKUbdu3CI/SnygYoUe36I/AAAAAAAABK4/yUqqGAW773E/s400/LOD_02.jpeg" border="0" alt=""id="BLOGGER_PHOTO_ID_5367341200919420834" /&gt;&lt;/a&gt;&lt;br /&gt;Por supuesto, lo primero que hice fué buscar cursos de ABAP -;) Ahora seré un Project Manager pero aún soy un apasionado de la programación en ABAP.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_eKAKUbdu3CI/SnyiBfh5DYI/AAAAAAAABLA/4UtnHhBWxPs/s1600-h/LOD_03.jpeg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 202px;" src="http://1.bp.blogspot.com/_eKAKUbdu3CI/SnyiBfh5DYI/AAAAAAAABLA/4UtnHhBWxPs/s400/LOD_03.jpeg" border="0" alt=""id="BLOGGER_PHOTO_ID_5367343002446007682" /&gt;&lt;/a&gt;&lt;br /&gt;Encontré el &lt;span style="font-weight:bold;"&gt;TAW11 - ABAP Details&lt;/span&gt; y empezé a leerlo...está muy bien hecho, fácil de seguir y con información muy útil.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_eKAKUbdu3CI/SnyiTB5m4ZI/AAAAAAAABLI/Ek37nqbdyXg/s1600-h/LOD_04.jpeg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 200px;" src="http://1.bp.blogspot.com/_eKAKUbdu3CI/SnyiTB5m4ZI/AAAAAAAABLI/Ek37nqbdyXg/s400/LOD_04.jpeg" border="0" alt=""id="BLOGGER_PHOTO_ID_5367343303730061714" /&gt;&lt;/a&gt;&lt;br /&gt;Algo que me gustó mucho fué el hecho de que estaba esperando solo un grupo de diapositivas en Power Point...pero en realidad, son un grupo de diapositivas con voz -:)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_eKAKUbdu3CI/Snyi-2RQ-dI/AAAAAAAABLQ/f8znOJeCJ70/s1600-h/LOD_05.jpeg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 297px;" src="http://2.bp.blogspot.com/_eKAKUbdu3CI/Snyi-2RQ-dI/AAAAAAAABLQ/f8znOJeCJ70/s400/LOD_05.jpeg" border="0" alt=""id="BLOGGER_PHOTO_ID_5367344056522308050" /&gt;&lt;/a&gt;&lt;br /&gt;Pienso que &lt;span style="font-weight:bold;"&gt;LoD&lt;/span&gt; es una gran idea...un lugar en donde puedes aprender sobre varios temas, con muy buen material. Mis recomendaciones...espera a que madure un poco más y luego subscribete. Siendo un servicio relativamente nuevo, necesita corregir algunas cosas y mantener una librería más grande... &lt;br /&gt;&lt;br /&gt;Saludos,&lt;br /&gt;&lt;br /&gt;Blag.&lt;br /&gt;&lt;/DIV&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13698376-390704925838442898?l=atejada.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atejada.blogspot.com/feeds/390704925838442898/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13698376&amp;postID=390704925838442898' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/390704925838442898'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/390704925838442898'/><link rel='alternate' type='text/html' href='http://atejada.blogspot.com/2009/08/learning-on-demand-por-sap.html' title='Learning on Demand por SAP'/><author><name>Alvaro "Blag" Tejada Galindo</name><uri>http://www.blogger.com/profile/12061593528820409779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='https://weblogs.sdn.sap.com/images/people/alvaro_tajeda.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_eKAKUbdu3CI/SnyYqaCJB9I/AAAAAAAABKw/qeifeOP0do4/s72-c/LOD_01.jpeg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13698376.post-6494726953365456087</id><published>2009-06-11T08:08:00.001-07:00</published><updated>2009-06-11T08:14:17.729-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='TechEd_2009'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='BlackBerry'/><title type='text'>TechEd Phoenix Countdown para BlackBerry</title><content type='html'>&lt;DIV ALIGN="JUSTIFY"&gt;&lt;br /&gt;Si me &lt;a href="http://www.twitter.com/Blag"&gt;siguen&lt;/a&gt; en &lt;a href="http://www.twitter.com"&gt;Twitter&lt;/a&gt; sabrán que me compré un BlackBerry Pearl 8100...mi primer Smartphone dicho sea de paso...&lt;br /&gt;&lt;br /&gt;Lo primero que hice, obviamente, fué instalarme algunas aplicaciones y juegos necesarios...pero también descargué el &lt;a href="https://www.blackberry.com/Downloads/contactFormPreload.do?code=DC727151E5D55DDE1E950767CF861CA5&amp;dl=AC44596FD197101932FFB572DFBC129C"&gt;Eclipse Plug-In&lt;/a&gt; que permite desarrollar aplicaciones para el Berry.&lt;br /&gt;&lt;br /&gt;Como deben recordar, construí un &lt;a href="http://blagrants.blogspot.com/2009/02/new-downloads-on-blag-software.html"&gt;SAP TechEd Phoenix 2009 countdown&lt;/a&gt; utilizando &lt;a href="http://www.adobe.com/products/air/"&gt;Adobe AIR&lt;/a&gt; así que está vez quise construir lo mismo, pero esta vez utilizando Java para BlackBerry.&lt;br /&gt;&lt;br /&gt;De mi experiencia desarrollandolo...debo decir que me tomó muy pocas modificaciones trasladar la versión ActionScript a la versión Java...así que programar para el BlackBerry es sencillo y divertido -:)&lt;br /&gt;&lt;br /&gt;Quieren probarlo? Descarguelo &lt;a href="http://www.box.net/shared/zdg97uzxzf"&gt;aquí&lt;/a&gt;. Incluye los archivos .ALX y .COD así que deberán utilizar el &lt;a href="http://na.blackberry.com/services/desktop/"&gt;Desktop Manager&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Por siacaso...es una aplicación muy simple...pero que más pueden esperar de una aplicación de cuenta regresiva? -:)&lt;br /&gt;&lt;br /&gt;Saludos,&lt;br /&gt;&lt;br /&gt;Blag.&lt;br /&gt;&lt;/DIV&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13698376-6494726953365456087?l=atejada.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atejada.blogspot.com/feeds/6494726953365456087/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13698376&amp;postID=6494726953365456087' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/6494726953365456087'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/6494726953365456087'/><link rel='alternate' type='text/html' href='http://atejada.blogspot.com/2009/06/teched-phoenix-countdown-para.html' title='TechEd Phoenix Countdown para BlackBerry'/><author><name>Alvaro "Blag" Tejada Galindo</name><uri>http://www.blogger.com/profile/12061593528820409779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='https://weblogs.sdn.sap.com/images/people/alvaro_tajeda.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13698376.post-35679204581453121</id><published>2009-05-23T18:20:00.000-07:00</published><updated>2009-05-23T18:26:41.338-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='FLEX'/><title type='text'>Blag's Flex 3 compiler - Edición ejecutable</title><content type='html'>&lt;DIV ALIGN="JUSTIFY"&gt;&lt;br /&gt;El año pasado, escribí un blog en el SCN titulado &lt;a href="https://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/9204"&gt;Blag's Flex 3 Compiler&lt;/a&gt; que era basicamente, una aplicación Ruby que usaba &lt;a href="http://wxruby.rubyforge.org/wiki/wiki.pl"&gt;WxRuby&lt;/a&gt; para el GUI y &lt;a href="http://opensource.adobe.com/wiki/display/flexsdk/Download+Flex+3"&gt;Flex 3 SDK&lt;/a&gt; para compilar aplicaciones Flex y AIR.&lt;br /&gt;&lt;br /&gt;Se preguntarán por qué vuelvo a postear luego de un largo año...fácil...finalmente pude crear una versión ejecutable.&lt;br /&gt;&lt;br /&gt;Cuando desarrollé el compilador por primera vez, intenté hacer un archivo .EXE utilizando &lt;a href="http://www.erikveen.dds.nl/rubyscript2exe/"&gt;RubyScript2Exe&lt;/a&gt; y &lt;a href="http://exerb.sourceforge.jp/index.en.html"&gt;Exerb&lt;/a&gt;, que son excelentes scripts para compilar Ruby en archivos .EXE...pero los dos fallaron cuando utilizé &lt;a href="http://wxruby.rubyforge.org/wiki/wiki.pl"&gt;WxRuby&lt;/a&gt;...&lt;br /&gt;&lt;br /&gt;Hace unos cuantos días...encontré &lt;a href="http://rubyforge.org/projects/ocra/"&gt;Ocra&lt;/a&gt;. Debo decirlo...Ocra es excelente! Is veloz, compila cualquie cosa y lo más importante...mantiene los archivos .EXE generados, relativamente pequeños...&lt;br /&gt;&lt;br /&gt;Así que, acá está el link del compilador...y no se olviden del leer el archivo README (Solo está en Inglés...la verdad me da mucha flojera traducirlo) -;)&lt;br /&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;a href="http://www.box.net/shared/dd8zilqgzj"&gt;Blag's Flex 3 Compiler&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Saludos,&lt;br /&gt;&lt;br /&gt;Blag.&lt;br /&gt;&lt;/DIV&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13698376-35679204581453121?l=atejada.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atejada.blogspot.com/feeds/35679204581453121/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13698376&amp;postID=35679204581453121' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/35679204581453121'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/35679204581453121'/><link rel='alternate' type='text/html' href='http://atejada.blogspot.com/2009/05/blags-flex-3-compiler-edicion.html' title='Blag&apos;s Flex 3 compiler - Edición ejecutable'/><author><name>Alvaro "Blag" Tejada Galindo</name><uri>http://www.blogger.com/profile/12061593528820409779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='https://weblogs.sdn.sap.com/images/people/alvaro_tajeda.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13698376.post-3102110678528592425</id><published>2009-05-14T12:36:00.000-07:00</published><updated>2009-05-14T12:46:51.274-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='ABAP'/><title type='text'>Shoes y SAP</title><content type='html'>&lt;div align="justify"&gt;&lt;br /&gt;Seguramente se estarán preguntando...Que es &lt;span style="font-weight:bold;"&gt;&lt;a href="http://www.shoooes.net/"&gt;Shoes&lt;/a&gt;&lt;/span&gt;? Bueno...de acuerdo con &lt;a href="http://en.wikipedia.org/wiki/Why_the_lucky_stiff"&gt;why the lucky stiff&lt;/a&gt; es:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Shoes is a tiny graphics toolkit, designed for beginners. But make no mistake: this is real programming. You can make real, colorful apps in Shoes&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;(Shoes es un pequeño toolkit gráfico, diseñado para principiantes. Pero no se equivoquen: esto es verdadera programación. Puedes hacer aplicaciones reales y coloridas en Shoes)&lt;span style="font-style:italic;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Shoes viene como un archivo ejecutable que puede ser descargado de &lt;a href="http://shoooes.net/downloads/"&gt;Download Shoes&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Para poder hacer la integración con SAP, deben bajar este &lt;a href="http://www.piersharding.com/download/ruby/saprfc-0.37.tar.gz"&gt;archivo&lt;/a&gt; de la página de &lt;a href="http://www.piersharding.com/download/ruby/"&gt;Piers Harding&lt;/a&gt;, descomprimirlo y copiar el contenido de la carpeta SAP dentro de la carpeta Lib de su instalación de &lt;span style="font-weight:bold;"&gt;Shoes&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Con eso, estamos listos para empezar.&lt;br /&gt;&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 90%;"&gt;&lt;br /&gt;require 'rubygems'&lt;br /&gt;gem 'saprfc'&lt;br /&gt;require "SAP/Rfc"&lt;br /&gt;&lt;br /&gt;class SE16 &amp;lt; Shoes&lt;br /&gt;  url '/',      :index&lt;br /&gt;  url '/table', :table&lt;br /&gt;  url '/show',  :show&lt;br /&gt;&lt;br /&gt;def index&lt;br /&gt;  stack :margin =&amp;gt; 10 do&lt;br /&gt;    para 'Host: '&lt;br /&gt;    @Host = edit_line :width =&amp;gt; 100&lt;br /&gt;  end&lt;br /&gt;  stack :margin =&amp;gt; 10 do&lt;br /&gt;    para 'System Number: '&lt;br /&gt;    @Sysnr = edit_line :width =&amp;gt; 100&lt;br /&gt;  end&lt;br /&gt;  stack :margin =&amp;gt; 10 do&lt;br /&gt;    para 'Client: '&lt;br /&gt;    @Client = edit_line :width =&amp;gt; 100&lt;br /&gt;  end&lt;br /&gt;  stack :margin =&amp;gt; 10 do&lt;br /&gt;    para 'User: '&lt;br /&gt;    @User = edit_line :width =&amp;gt; 100&lt;br /&gt;  end&lt;br /&gt;  stack :margin =&amp;gt; 10 do&lt;br /&gt;    para 'Password: '&lt;br /&gt;    @Password = edit_line :width =&amp;gt; 100, :secret =&amp;gt; true&lt;br /&gt;  end&lt;br /&gt;    stack :margin =&amp;gt; 10 do&lt;br /&gt;      button('Login') do&lt;br /&gt;        $rfc = SAP::Rfc.new(:ashost =&amp;gt; @Host.text,&lt;br /&gt;                            :sysnr  =&amp;gt; @Sysnr.text,&lt;br /&gt;                            :lang   =&amp;gt; "EN",&lt;br /&gt;                            :client =&amp;gt; @Client.text,&lt;br /&gt;                            :user   =&amp;gt; @User.text,&lt;br /&gt;                            :passwd =&amp;gt; @Password.text,&lt;br /&gt;                            :trace  =&amp;gt; 1)&lt;br /&gt;        visit "/table"&lt;br /&gt;      end&lt;br /&gt;    end&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;def table&lt;br /&gt;  stack :margin =&amp;gt; 10 do&lt;br /&gt;    para 'Table: '&lt;br /&gt;    @Table = edit_line :width =&amp;gt; 100&lt;br /&gt;    stack :margin =&amp;gt; 10 do&lt;br /&gt;      button('Show') do&lt;br /&gt;        $Table = @Table.text&lt;br /&gt;        visit "/show"&lt;br /&gt;      end&lt;br /&gt;    end&lt;br /&gt;  end&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;def show&lt;br /&gt;    $itab = $rfc.discover("RFC_READ_TABLE")  &lt;br /&gt;  &lt;br /&gt;    $itab.query_table.value = $Table&lt;br /&gt;    $itab.delimiter.value = "|"  &lt;br /&gt;  &lt;br /&gt;    $rfc.call($itab)&lt;br /&gt;&lt;br /&gt;    $Fields = Array.new&lt;br /&gt;    $Data = Array.new&lt;br /&gt;    $Data_Fields = Array.new&lt;br /&gt;    $Data_Split = Array.new&lt;br /&gt;    $Data_Names = Array.new&lt;br /&gt;       &lt;br /&gt;    $itab.fields.hashRows {|field| $Fields.push(field) }&lt;br /&gt;    $Fields_Len = $Fields.length&lt;br /&gt;    $itab.data.hashRows {|field| &lt;br /&gt;                         $Data.push(field['WA'].to_s.strip!) }&lt;br /&gt;    $Data_Len = $Data.length&lt;br /&gt;    $itab.fields.hashRows {|field| $Data_Names.push&lt;br /&gt;                           (field['FIELDNAME'].to_s.strip)}&lt;br /&gt;  &lt;br /&gt;    para "Tabla: #{$Table}"&lt;br /&gt;  &lt;br /&gt;    for i in 0...$Data_Len&lt;br /&gt;      stack :margin =&amp;gt; 10 do&lt;br /&gt;        $Data_Fields = $Data[i]&lt;br /&gt;        $Data_Split = $Data_Fields.split("|")&lt;br /&gt;        flow :margin =&amp;gt; 10 do&lt;br /&gt;          for i in 0...$Fields_Len&lt;br /&gt;            para "#{$Data_Split[i].to_s.strip} |"&lt;br /&gt;          end&lt;br /&gt;        end&lt;br /&gt;      end&lt;br /&gt;    end&lt;br /&gt;end&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;Shoes.app :width =&amp;gt; 600, :height =&amp;gt; 450&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Ahora, algunas imágenes...&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_eKAKUbdu3CI/Sgx0r3uEttI/AAAAAAAABGY/IytBjWklwSA/s1600-h/Shoes_01.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 327px;" src="http://2.bp.blogspot.com/_eKAKUbdu3CI/Sgx0r3uEttI/AAAAAAAABGY/IytBjWklwSA/s400/Shoes_01.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5335767955567589074" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_eKAKUbdu3CI/Sgx00INuPbI/AAAAAAAABGg/XPk-riGipzo/s1600-h/Shoes_02.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 318px;" src="http://1.bp.blogspot.com/_eKAKUbdu3CI/Sgx00INuPbI/AAAAAAAABGg/XPk-riGipzo/s400/Shoes_02.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5335768097434254770" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_eKAKUbdu3CI/Sgx03zcjDII/AAAAAAAABGo/QnKM3sSwuXI/s1600-h/Shoes_03.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 318px;" src="http://1.bp.blogspot.com/_eKAKUbdu3CI/Sgx03zcjDII/AAAAAAAABGo/QnKM3sSwuXI/s400/Shoes_03.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5335768160578768002" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_eKAKUbdu3CI/Sgx07uH20iI/AAAAAAAABGw/d88zfq2M7zY/s1600-h/Shoes_04.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 318px;" src="http://3.bp.blogspot.com/_eKAKUbdu3CI/Sgx07uH20iI/AAAAAAAABGw/d88zfq2M7zY/s400/Shoes_04.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5335768227869282850" /&gt;&lt;/a&gt;&lt;br /&gt;Espero que les guste -:)&lt;br /&gt;&lt;br /&gt;Saludos,&lt;br /&gt;&lt;br /&gt;Blag.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13698376-3102110678528592425?l=atejada.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atejada.blogspot.com/feeds/3102110678528592425/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13698376&amp;postID=3102110678528592425' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/3102110678528592425'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/3102110678528592425'/><link rel='alternate' type='text/html' href='http://atejada.blogspot.com/2009/05/shoes-y-sap.html' title='Shoes y SAP'/><author><name>Alvaro "Blag" Tejada Galindo</name><uri>http://www.blogger.com/profile/12061593528820409779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='https://weblogs.sdn.sap.com/images/people/alvaro_tajeda.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_eKAKUbdu3CI/Sgx0r3uEttI/AAAAAAAABGY/IytBjWklwSA/s72-c/Shoes_01.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13698376.post-3764040877847784079</id><published>2009-05-14T12:21:00.001-07:00</published><updated>2009-05-14T12:36:17.815-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='ABAP'/><title type='text'>Blue Ruby (Ruby en SAP)</title><content type='html'>&lt;div align="justify"&gt;&lt;br /&gt;Alguna vez han oido hablar de &lt;span style="font-weight:bold;"&gt;Blue Ruby&lt;/span&gt;? No? Bueno...dejando las cosas simples, &lt;span style="font-weight:bold;"&gt;Blue Ruby&lt;/span&gt; te permite programar con &lt;span style="font-weight:bold;"&gt;Ruby&lt;/span&gt; dentro del Stack de &lt;span style="font-weight:bold;"&gt;ABAP&lt;/span&gt; de &lt;span style="font-weight:bold;"&gt;SAP NetWeaver&lt;/span&gt;...es lo suficientemente bueno? Lo es para mi obviamente -:)&lt;br /&gt;&lt;br /&gt;Los que me conocen...virtual o personalmente, saben que soy muy apasionado acerca de las tecnologías y sobre todo de los Lenguages Script.&lt;br /&gt;&lt;br /&gt;Esta semana, gracias a &lt;a href="https://www.sdn.sap.com/irj/sdn/bc?u=x7O%2BjqTGVuQ%3D"&gt;Juergen Schmerder&lt;/a&gt; y el Team de &lt;span style="font-weight:bold;"&gt;Blue Ruby&lt;/span&gt;, tengo acceso temprano al IDE de &lt;span style="font-weight:bold;"&gt;Blue Ruby&lt;/span&gt; basado en &lt;span style="font-weight:bold;"&gt;WebGui&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Por supuesto, lo primero que hice fué logearme y tratar de hacer algunas pruebas...mayormente pruebas relacionadas al lenguage. Afortunadamente descubrí que casi todo lo que hacía en Ruby(Core Language) podía hacerlo en &lt;span style="font-weight:bold;"&gt;Blue Ruby&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Así que, lo siguiente que hice fué comenzar a trabajar en mi ejemplo de toda la visa...un emulador de &lt;span style="font-weight:bold;"&gt;SE16&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Fué relativamente sencillo porque he hecho muchos examplos de &lt;span style="font-weight:bold;"&gt;SE16&lt;/span&gt; utilizando &lt;span style="font-weight:bold;"&gt;Ruby&lt;/span&gt;, &lt;span style="font-weight:bold;"&gt;Camping&lt;/span&gt;, &lt;span style="font-weight:bold;"&gt;WxRuby&lt;/span&gt;, &lt;span style="font-weight:bold;"&gt;Sinatra&lt;/span&gt;, &lt;span style="font-weight:bold;"&gt;PHP&lt;/span&gt; y &lt;span style="font-weight:bold;"&gt;PHP/Flex&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;En fin...Aquí está el código. Solo para que lo sepan...hay una manera de hacer el código mucho más corto...algo de 6 líneas...pero decidí quedarme con el ejemplo largo por 3 simples razones.&lt;br /&gt;&lt;br /&gt;1.- Quería probar las capacidades del lenguaje.&lt;br /&gt;&lt;br /&gt;2.- Quería separar cada campo y mostrarlo de forma individual.&lt;br /&gt;&lt;br /&gt;3.- Quería divertirme escribiendo más código -:P&lt;br /&gt;&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 90%;"&gt;&lt;br /&gt;#RFC Example by Blag.&lt;br /&gt;&lt;br /&gt;require 'rfc'&lt;br /&gt;&lt;br /&gt;$spfli = Rfc.new 'RFC_READ_TABLE'&lt;br /&gt;&lt;br /&gt;$spfli.query_table = 'SPFLI'&lt;br /&gt;$spfli.delimiter = '|'&lt;br /&gt;&lt;br /&gt;$spfli.call!&lt;br /&gt;&lt;br /&gt;$Fields = Array.new&lt;br /&gt;$Fields_Length = Array.new&lt;br /&gt;$Data = Array.new&lt;br /&gt;$Data_Fields = Array.new&lt;br /&gt;$Data_Split = Array.new&lt;br /&gt;&lt;br /&gt;$spfli.fields.each do |field|&lt;br /&gt; $Fields.push(field.fieldname.to_s)&lt;br /&gt; $Fields_Length.push(field.length.to_i)&lt;br /&gt;end&lt;br /&gt;$spfli.data.each do |field|&lt;br /&gt; $Data.push(field.wa.to_s.strip!)&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;$Fields_Len = $Fields.length&lt;br /&gt;$Data_Len = $Data.length&lt;br /&gt;&lt;br /&gt;print "Table: SPFLI\n\n"&lt;br /&gt;&lt;br /&gt;for i in 0...$Data_Len&lt;br /&gt;$Data_Fields = $Data[i]&lt;br /&gt;$Data_Split = $Data_Fields.split("|")&lt;br /&gt; for i in 0...$Fields_Len&lt;br /&gt;   $space = ""&lt;br /&gt;   $len = ( $Fields_Length[i].to_i - $Data_Split[i].length ) + 1&lt;br /&gt;   $len.times do&lt;br /&gt;    $space += "\s"&lt;br /&gt;   end &lt;br /&gt;   print $Data_Split[i].to_s + "#{$space}"&lt;br /&gt; end&lt;br /&gt;print "\n"&lt;br /&gt;end&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Ahora, las imagenes...&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_eKAKUbdu3CI/Sgxxw6ASWGI/AAAAAAAABGI/yADSGPah22g/s1600-h/BlueRubySE16_01.jpeg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 241px;" src="http://4.bp.blogspot.com/_eKAKUbdu3CI/Sgxxw6ASWGI/AAAAAAAABGI/yADSGPah22g/s400/BlueRubySE16_01.jpeg" border="0" alt=""id="BLOGGER_PHOTO_ID_5335764743545313378" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_eKAKUbdu3CI/Sgxx4r6hEGI/AAAAAAAABGQ/6MwkrSoBYpI/s1600-h/BlueRubySE16_02.jpeg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 241px;" src="http://2.bp.blogspot.com/_eKAKUbdu3CI/Sgxx4r6hEGI/AAAAAAAABGQ/6MwkrSoBYpI/s400/BlueRubySE16_02.jpeg" border="0" alt=""id="BLOGGER_PHOTO_ID_5335764877201969250" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Estoy seguro de que se van a sorprender con esto -:) Yo aún continúo impresionado -:D&lt;br /&gt;&lt;br /&gt;Así que...si quieren aprender más, les dejo algunos enlaces muy útiles:&lt;br /&gt;&lt;br /&gt;&lt;a href="https://www.sdn.sap.com/irj/scn/go/portal/prtroot/docs/library/uuid/408a9a3b-03f9-2b10-b29c-f0a3374b19d8"&gt;Blue Ruby: A Ruby VM in ABAP (PDF)&lt;/a&gt;&lt;br /&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/13661"&gt;Blue Ruby - a Ruby VM in ABAP&lt;/a&gt;&lt;br /&gt;&lt;a href="https://www.sdn.sap.com/irj/scn/go/portal/prtroot/docs/library/uuid/901bedb0-5ff3-2b10-8494-a53d5dbf6302"&gt;Blue Ruby Demo Video Part 1: How to get started&lt;/a&gt;&lt;br /&gt;&lt;a href="https://www.sdn.sap.com/irj/scn/go/portal/prtroot/docs/library/uuid/30166c0f-60f3-2b10-5cad-a7d6755afa66"&gt;Blue Ruby Demo Video Part 2: How to call ABAP functions&lt;/a&gt;&lt;br /&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/13992"&gt;Introduction to Blue Ruby Replay&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Saludos,&lt;br /&gt;&lt;br /&gt;Blag.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13698376-3764040877847784079?l=atejada.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atejada.blogspot.com/feeds/3764040877847784079/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13698376&amp;postID=3764040877847784079' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/3764040877847784079'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/3764040877847784079'/><link rel='alternate' type='text/html' href='http://atejada.blogspot.com/2009/05/blue-ruby-ruby-en-sap.html' title='Blue Ruby (Ruby en SAP)'/><author><name>Alvaro "Blag" Tejada Galindo</name><uri>http://www.blogger.com/profile/12061593528820409779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='https://weblogs.sdn.sap.com/images/people/alvaro_tajeda.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_eKAKUbdu3CI/Sgxxw6ASWGI/AAAAAAAABGI/yADSGPah22g/s72-c/BlueRubySE16_01.jpeg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13698376.post-6586354340606680250</id><published>2009-05-14T12:08:00.000-07:00</published><updated>2009-05-14T12:20:49.874-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='ABAP'/><title type='text'>Ruby, Sinatra y SAP</title><content type='html'>&lt;div align="justify"&gt;&lt;br /&gt;Estoy seguro de que ya se habrán dado cuenta de que amo los Lenguajes Script. Eso signigica que cada cierto tiempo, me encanta jugar con nuesvos lenguajes o algún Framework web nuevo. Esta vez me tocó jugar con &lt;a href="http://www.sinatrarb.com/"&gt;Sinatra&lt;/a&gt;, un framework muy impresionante.&lt;br /&gt;&lt;br /&gt;Debo decir que la documentación es bastante pobre...aún cuando un &lt;a href="http://www.sinatrarb.com/book.html"&gt;libro de Sinatra&lt;/a&gt; está en proceso.&lt;br /&gt;&lt;br /&gt;He dicho muchas veces que voy a aprender &lt;a href="http://rubyonrails.org/"&gt;Rail&lt;/a&gt;, pero de alguna manera...cada vez que empiezo lo dejo a los pocos días...por qué? Seguramente por &lt;a href="http://www.sinatrarb.com/"&gt;Sinatra&lt;/a&gt; y &lt;a href="http://code.whytheluckystiff.net/camping"&gt;Camping&lt;/a&gt; que son mucho más sencillos de aprender y aportan basicamente las mismas funcionalidades que &lt;a href="http://rubyonrails.org/"&gt;Rails&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Pero estoy seguro que ninguno de ustedes quiere conocer mi vida privada de programación...Así que vayamos al código...&lt;br /&gt;&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 90%;"&gt;&lt;br /&gt;require 'rubygems'&lt;br /&gt;require 'sinatra'&lt;br /&gt;gem 'saprfc'&lt;br /&gt;require "SAP/Rfc"&lt;br /&gt;&lt;br /&gt;get '/' do&lt;br /&gt;  body do&lt;br /&gt;    &amp;lt;&amp;lt;-eos&lt;br /&gt;    &amp;lt;h1&amp;gt;Ruby/Sinatra and SAP - SE16 Emulation&amp;lt;/h1&amp;gt;&lt;br /&gt;    &amp;lt;form action='/login' method='post'&amp;gt;&lt;br /&gt;      &amp;lt;label for='host'&amp;gt;Host&amp;lt;/label&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;      &amp;lt;input type='text' name='host' /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;      &amp;lt;label for='sysnr'&amp;gt;System Number&amp;lt;/label&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;      &amp;lt;input type='text' name='sysnr' /&amp;gt;&amp;lt;br /&amp;gt;    &lt;br /&gt;      &amp;lt;label for='client'&amp;gt;Client&amp;lt;/label&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;      &amp;lt;input type='text' name='client' /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;      &amp;lt;label for='user'&amp;gt;User&amp;lt;/label&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;      &amp;lt;input type='text' name='user' /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;      &amp;lt;label for='password'&amp;gt;Password&amp;lt;/label&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;      &amp;lt;input type='password' name='password' /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;      &amp;lt;input type='submit' name='submit' value='Login' /&amp;gt;&lt;br /&gt;    &amp;lt;/form&amp;gt;&lt;br /&gt;    eos&lt;br /&gt;  end&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;get '/login_view' do&lt;br /&gt;  body do&lt;br /&gt;    &amp;lt;&amp;lt;-eos&lt;br /&gt;    &amp;lt;form action='/table_view' method='post'&amp;gt;&lt;br /&gt;      &amp;lt;label for='table'&amp;gt;Table:&amp;lt;/label&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;      &amp;lt;input type='text' name='table' /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;      &amp;lt;input type='submit' name='submit' value='Show Table' /&amp;gt;&lt;br /&gt;    &amp;lt;/form&amp;gt;&lt;br /&gt;    eos&lt;br /&gt;  end&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;get '/show_table' do&lt;br /&gt;  $output = "&amp;lt;table border='1'&amp;gt;&amp;lt;tr&amp;gt;"&lt;br /&gt;  for i in 0...$Fields_Len&lt;br /&gt;    $Fields_Fields = $Data_Names[i].to_s&lt;br /&gt;    $output += "&amp;lt;th&amp;gt; #{$Fields_Fields} &amp;lt;/th&amp;gt;"&lt;br /&gt;  end&lt;br /&gt;  $output += "&amp;lt;/tr&amp;gt;"&lt;br /&gt;  for i in 0...$Data_Len    &lt;br /&gt;    $output += "&amp;lt;tr&amp;gt;"&lt;br /&gt;    $Data_Fields = $Data[i]&lt;br /&gt;    $Data_Split = $Data_Fields.split("|")&lt;br /&gt;    for i in 0...$Fields_Len&lt;br /&gt;      $output += "&amp;lt;td&amp;gt; #{$Data_Split[i].to_s.strip} &amp;lt;/td&amp;gt;"&lt;br /&gt;    end&lt;br /&gt;    $output += "&amp;lt;/tr&amp;gt;"&lt;br /&gt;  end&lt;br /&gt;  $output += "&amp;lt;/table&amp;gt;"&lt;br /&gt;body $output&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;post '/login' do&lt;br /&gt;  $host,$sysnr,$client,$user,$password = params[:host],params[:sysnr],&lt;br /&gt;                                         params[:client],params[:user],&lt;br /&gt;                                         params[:password]&lt;br /&gt;  "#{do_login}"&lt;br /&gt;                       &lt;br /&gt;  redirect '/login_view'&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;post '/table_view' do&lt;br /&gt;   $table = params[:table]&lt;br /&gt;&lt;br /&gt;   "#{get_table}"&lt;br /&gt;    &lt;br /&gt;   redirect '/show_table'&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;helpers do&lt;br /&gt;  def do_login&lt;br /&gt;  $rfc = SAP::Rfc.new(:ashost =&amp;gt; $host,&lt;br /&gt;                       :sysnr  =&amp;gt; $sysnr.to_i,&lt;br /&gt;                       :lang   =&amp;gt; "EN",&lt;br /&gt;                       :client =&amp;gt; $client.to_i,&lt;br /&gt;                       :user   =&amp;gt; $user,&lt;br /&gt;                       :passwd =&amp;gt; $password,&lt;br /&gt;                       :trace  =&amp;gt; 1)&lt;br /&gt;  end&lt;br /&gt;  &lt;br /&gt;  def get_table&lt;br /&gt;    $itab = $rfc.discover("RFC_READ_TABLE")  &lt;br /&gt;    &lt;br /&gt;    $itab.query_table.value = $table&lt;br /&gt;    $itab.delimiter.value = "|"&lt;br /&gt;    &lt;br /&gt;    $rfc.call($itab)&lt;br /&gt;    &lt;br /&gt;    $Fields = Array.new&lt;br /&gt;    $Data = Array.new&lt;br /&gt;    $Data_Fields = Array.new&lt;br /&gt;    $Data_Split = Array.new&lt;br /&gt;    $Data_Names = Array.new&lt;br /&gt;       &lt;br /&gt;    $itab.fields.hashRows {|field| $Fields.push(field) }&lt;br /&gt;    $Fields_Len = $Fields.length&lt;br /&gt;    $itab.data.hashRows {|field| $Data.push(field['WA'].to_s.strip!) }&lt;br /&gt;    $Data_Len = $Data.length&lt;br /&gt;    $itab.fields.hashRows {|field| $Data_Names.push&lt;br /&gt;                           (field['FIELDNAME'].to_s.strip)}&lt;br /&gt;  end  &lt;br /&gt;end&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Ahora, algunas imagenes...&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_eKAKUbdu3CI/SgxulxIHFZI/AAAAAAAABFw/O1FMohl12OM/s1600-h/Ruby_Sinatra_01.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 230px;" src="http://1.bp.blogspot.com/_eKAKUbdu3CI/SgxulxIHFZI/AAAAAAAABFw/O1FMohl12OM/s400/Ruby_Sinatra_01.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5335761253648766354" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_eKAKUbdu3CI/SgxuvInSOSI/AAAAAAAABF4/2AtoLbEfVaY/s1600-h/Ruby_Sinatra_02.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 230px;" src="http://1.bp.blogspot.com/_eKAKUbdu3CI/SgxuvInSOSI/AAAAAAAABF4/2AtoLbEfVaY/s400/Ruby_Sinatra_02.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5335761414572357922" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_eKAKUbdu3CI/Sgxu2LG6HGI/AAAAAAAABGA/W8tCLZ6bPyo/s1600-h/Ruby_Sinatra_03.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 230px;" src="http://1.bp.blogspot.com/_eKAKUbdu3CI/Sgxu2LG6HGI/AAAAAAAABGA/W8tCLZ6bPyo/s400/Ruby_Sinatra_03.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5335761535500950626" /&gt;&lt;/a&gt;&lt;br /&gt;Saludos,&lt;br /&gt;&lt;br /&gt;Blag.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13698376-6586354340606680250?l=atejada.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atejada.blogspot.com/feeds/6586354340606680250/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13698376&amp;postID=6586354340606680250' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/6586354340606680250'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/6586354340606680250'/><link rel='alternate' type='text/html' href='http://atejada.blogspot.com/2009/05/ruby-sinatra-y-sap.html' title='Ruby, Sinatra y SAP'/><author><name>Alvaro "Blag" Tejada Galindo</name><uri>http://www.blogger.com/profile/12061593528820409779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='https://weblogs.sdn.sap.com/images/people/alvaro_tajeda.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_eKAKUbdu3CI/SgxulxIHFZI/AAAAAAAABFw/O1FMohl12OM/s72-c/Ruby_Sinatra_01.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13698376.post-4091030483301750656</id><published>2009-04-01T12:23:00.000-07:00</published><updated>2009-04-01T12:50:19.593-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SDN'/><category scheme='http://www.blogger.com/atom/ns#' term='Community Day'/><category scheme='http://www.blogger.com/atom/ns#' term='ABAP'/><title type='text'>SAP Inside Track Lima 2009</title><content type='html'>&lt;div align="justify"&gt;&lt;br /&gt;Ya se que faltan aún mucho meses para Julio...Pero con todos los eventos Inside Track event alrededor del mundo, pienso que es un buen momento para hablarles sobre el...&lt;br /&gt;&lt;br /&gt;&lt;a href="https://www.sdn.sap.com/irj/scn/wiki?path=/display/events/Inside+Track+Lima+2009"&gt;SAP Inside Track Lima 2009&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Este evento es acerca de compartit conocimientos, difundir la palabra sobre SAP y sus tecnologías relacionadas, así que es acerca de ti. Tu presentando o asistiendo a sesiones, tu compartiendo experiencias con otros profesionales SAP.&lt;br /&gt;&lt;br /&gt;Así que las preguntas básicas son...&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;¿Donde?&lt;/span&gt; Necesita ser confirmado, pero desde luego en Lima, Perú.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;¿Cuando?&lt;/span&gt; Sábado 04 de Julio del 2009.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;br /&gt;¿Costoo?&lt;/span&gt; Gratis por supuesto.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;¿Por qué?&lt;/span&gt; Porque el Community Day oficial ya no existe. Necesitamos poner aún más poder a los eventos regionales.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Donde puedo inscribirme?&lt;/span&gt; Hay un enlace en el WIKI...pero...Aquí está el enlace directo: &lt;br /&gt;&lt;br /&gt;&lt;a href="http://creator.zoho.com/blag/inside-track-lima-2009/#Form:InsideTrackLima2009"&gt;Para asistentes&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://creator.zoho.com/blag/inside-track-lima-2009-sponsors/#Form:InsideTrackLima2009_Sponsors"&gt;Para Auspiciadores&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Espero verlos allí!&lt;br /&gt;&lt;br /&gt;Saludos,&lt;br /&gt;&lt;br /&gt;Blag.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13698376-4091030483301750656?l=atejada.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atejada.blogspot.com/feeds/4091030483301750656/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13698376&amp;postID=4091030483301750656' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/4091030483301750656'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/4091030483301750656'/><link rel='alternate' type='text/html' href='http://atejada.blogspot.com/2009/04/sap-inside-track-lima-2009.html' title='SAP Inside Track Lima 2009'/><author><name>Alvaro "Blag" Tejada Galindo</name><uri>http://www.blogger.com/profile/12061593528820409779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='https://weblogs.sdn.sap.com/images/people/alvaro_tajeda.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13698376.post-6565482183652200488</id><published>2009-02-05T13:08:00.000-08:00</published><updated>2009-02-05T13:26:21.000-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ABAP'/><title type='text'>Excel OLE y ABAP</title><content type='html'>&lt;DIV ALIGN="JUSTIFY"&gt;&lt;br /&gt;El otro día el funcional me pidió que hiciera un reporte en Excel. "Eso es demasiado fácil" pensé...Bueno...No era tan verdad...El quería titulos, colores de fondo, letra en negrita y un formato especial.&lt;br /&gt;&lt;br /&gt;Todos sabemos que cuando descargamos un Excel utilizando ABAP, no importa lo que hagamos, vamos a tener siempre la misma aburrida estructura. Sin colores y sin estructuras extrañas.&lt;br /&gt;&lt;br /&gt;Por supuesto, pensé en utilizar Excel OLE...Pero nunca lo había utilizado, así que me puse a buscar en el SCN para tratar de encontrar algo que me ayudara a aprender. Llegué a &lt;a href="https://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/2341"&gt;Manipulate Excel with OLE &amp; ABAP&lt;/a&gt; escrito por mi buen amigo &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=Z5d9cjkglaI%3D"&gt;Rich Heilman&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Este blog es realmente muy bueno, pero le faltan algunas cosas importantes que necesitaba para mi reporte...El archivo necesitaba existir en el sistema y no estaba utilizando colores ni formato de letras...Claro, en ese entonces, el estaba recién aprendiendo como utilizar las herramientas, así que más que una crítica, pienso que es excelente que compartiera sus conomientos mientras estaba aprendiendo.&lt;br /&gt;&lt;br /&gt;En fín...Seguí buscando en los foros y encontré toda la información que necesitaba para terminar mi reporte. Luego de eso, decidí crear un pequeño y simple ejemplo, mostrando lo que se puede hacer con Excel OLE y ABAP.&lt;br /&gt;&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 90%;"&gt;&lt;br /&gt;*&amp;----------------------------------------------------*&lt;br /&gt;*&amp; Report  ZDUMMY_SANDBOX                             *&lt;br /&gt;*&amp;----------------------------------------------------*&lt;br /&gt;REPORT zdummy_sandbox.&lt;br /&gt;&lt;br /&gt;*&amp;----------------------------------------------------*&lt;br /&gt;* INCLUDES                                            *&lt;br /&gt;*&amp;----------------------------------------------------*&lt;br /&gt;INCLUDE ole2incl.&lt;br /&gt;&lt;br /&gt;*&amp;----------------------------------------------------*&lt;br /&gt;*&amp;   TYPES                                            *&lt;br /&gt;*&amp;----------------------------------------------------*&lt;br /&gt;TYPES: BEGIN OF ty_spfli,&lt;br /&gt;       carrid TYPE spfli-carrid,&lt;br /&gt;       connid TYPE spfli-connid,&lt;br /&gt;       countryfr TYPE spfli-countryfr,&lt;br /&gt;       cityfrom TYPE spfli-cityfrom,&lt;br /&gt;       airpfrom TYPE spfli-airpfrom,&lt;br /&gt;       countryto TYPE spfli-countryto,&lt;br /&gt;       cityto TYPE spfli-cityto,&lt;br /&gt;       airpto TYPE spfli-airpto,&lt;br /&gt;       END OF ty_spfli.&lt;br /&gt;&lt;br /&gt;TYPES: BEGIN OF ty_titles,&lt;br /&gt;       title(20) TYPE c,&lt;br /&gt;       field(20) TYPE c,&lt;br /&gt;       END OF ty_titles.&lt;br /&gt;&lt;br /&gt;*&amp;----------------------------------------------------*&lt;br /&gt;*&amp;   INTERNAL TABLES                                  *&lt;br /&gt;*&amp;----------------------------------------------------*&lt;br /&gt;DATA: t_spfli TYPE STANDARD TABLE OF ty_spfli,&lt;br /&gt;      t_titles TYPE STANDARD TABLE OF ty_titles.&lt;br /&gt;&lt;br /&gt;*&amp;----------------------------------------------------*&lt;br /&gt;*&amp;   FIELD-SYMBOLS                                    *&lt;br /&gt;*&amp;----------------------------------------------------*&lt;br /&gt;FIELD-SYMBOLS: &amp;lt;fs_spfli&amp;gt; LIKE LINE OF t_spfli,&lt;br /&gt;               &amp;lt;fs_titles&amp;gt; LIKE LINE OF t_titles,&lt;br /&gt;               &amp;lt;fs&amp;gt; TYPE ANY.&lt;br /&gt;&lt;br /&gt;*&amp;----------------------------------------------------*&lt;br /&gt;*&amp;   VARIABLES                                        *&lt;br /&gt;*&amp;----------------------------------------------------*&lt;br /&gt;DATA: w_tabix TYPE sy-tabix,&lt;br /&gt;      w_titles TYPE sy-tabix,&lt;br /&gt;      w_line TYPE sy-tabix,&lt;br /&gt;      w_field TYPE string,&lt;br /&gt;      filename TYPE string,&lt;br /&gt;      path TYPE string,&lt;br /&gt;      fullpath TYPE string.&lt;br /&gt;&lt;br /&gt;DATA: data_titles TYPE REF TO data.&lt;br /&gt;&lt;br /&gt;DATA: e_sheet TYPE ole2_object,&lt;br /&gt;      e_activesheet TYPE ole2_object,&lt;br /&gt;      e_newsheet TYPE ole2_object,&lt;br /&gt;      e_appl TYPE ole2_object,&lt;br /&gt;      e_work TYPE ole2_object,&lt;br /&gt;      e_cell TYPE ole2_object,&lt;br /&gt;      e_color TYPE ole2_object,&lt;br /&gt;      e_bold TYPE ole2_object.&lt;br /&gt;&lt;br /&gt;*&amp;----------------------------------------------------*&lt;br /&gt;*&amp;   SELECTION-SCREEN                                 *&lt;br /&gt;*&amp;----------------------------------------------------*&lt;br /&gt;SELECTION-SCREEN BEGIN OF BLOCK b1.&lt;br /&gt;PARAMETERS: p_file TYPE rlgrap-filename.&lt;br /&gt;SELECTION-SCREEN END OF BLOCK b1.&lt;br /&gt;&lt;br /&gt;*&amp;----------------------------------------------------*&lt;br /&gt;*&amp;  START-OF-SELECTION                                *&lt;br /&gt;*&amp;----------------------------------------------------*&lt;br /&gt;START-OF-SELECTION.&lt;br /&gt;  PERFORM get_titles.&lt;br /&gt;  PERFORM get_data.&lt;br /&gt;  PERFORM create_excel.&lt;br /&gt;&lt;br /&gt;*&amp;----------------------------------------------------*&lt;br /&gt;*&amp; AT SELECTION-SCREEN                                *&lt;br /&gt;*&amp;----------------------------------------------------*&lt;br /&gt;AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.&lt;br /&gt;&lt;br /&gt;  CALL METHOD cl_gui_frontend_services=&amp;gt;file_save_dialog&lt;br /&gt;    EXPORTING&lt;br /&gt;      window_title      = 'Select archivo'&lt;br /&gt;      default_extension = 'xls'&lt;br /&gt;      file_filter       = '*.xls'&lt;br /&gt;    CHANGING&lt;br /&gt;      filename          = filename&lt;br /&gt;      path              = path&lt;br /&gt;      fullpath          = fullpath.&lt;br /&gt;&lt;br /&gt;  IF sy-subrc EQ 0.&lt;br /&gt;    p_file = fullpath.&lt;br /&gt;  ENDIF.&lt;br /&gt;&lt;br /&gt;*&amp;----------------------------------------------------*&lt;br /&gt;*&amp;      Form  get_titles                              *&lt;br /&gt;*&amp;----------------------------------------------------*&lt;br /&gt;FORM get_titles.&lt;br /&gt;&lt;br /&gt;  CREATE DATA data_titles TYPE ty_titles.&lt;br /&gt;  ASSIGN data_titles-&amp;gt;* TO &amp;lt;fs_titles&amp;gt;.&lt;br /&gt;&lt;br /&gt;  &amp;lt;fs_titles&amp;gt;-title = 'CARRIED ID'.&lt;br /&gt;  &amp;lt;fs_titles&amp;gt;-field = 'CARRID'.&lt;br /&gt;  APPEND &amp;lt;fs_titles&amp;gt; TO t_titles.&lt;br /&gt;  &amp;lt;fs_titles&amp;gt;-title = 'CONNECTION ID'.&lt;br /&gt;  &amp;lt;fs_titles&amp;gt;-field = 'CONNID'.&lt;br /&gt;  APPEND &amp;lt;fs_titles&amp;gt; TO t_titles.&lt;br /&gt;  &amp;lt;fs_titles&amp;gt;-title = 'COUNTRY FROM'.&lt;br /&gt;  &amp;lt;fs_titles&amp;gt;-field = 'COUNTRYFR'.&lt;br /&gt;  APPEND &amp;lt;fs_titles&amp;gt; TO t_titles.&lt;br /&gt;  &amp;lt;fs_titles&amp;gt;-title = 'AIRPORT FROM'.&lt;br /&gt;  &amp;lt;fs_titles&amp;gt;-field = 'AIRPFROM'.&lt;br /&gt;  APPEND &amp;lt;fs_titles&amp;gt; TO t_titles.&lt;br /&gt;  &amp;lt;fs_titles&amp;gt;-title = 'COUNTRY TO'.&lt;br /&gt;  &amp;lt;fs_titles&amp;gt;-field = 'COUNTRYTO'.&lt;br /&gt;  APPEND &amp;lt;fs_titles&amp;gt; TO t_titles.&lt;br /&gt;  &amp;lt;fs_titles&amp;gt;-title = 'CITY TO'.&lt;br /&gt;  &amp;lt;fs_titles&amp;gt;-field = 'CITYTO'.&lt;br /&gt;  APPEND &amp;lt;fs_titles&amp;gt; TO t_titles.&lt;br /&gt;  &amp;lt;fs_titles&amp;gt;-title = 'AIRPORT TO'.&lt;br /&gt;  &amp;lt;fs_titles&amp;gt;-field = 'AIRPTO'.&lt;br /&gt;  APPEND &amp;lt;fs_titles&amp;gt; TO t_titles.&lt;br /&gt;&lt;br /&gt;ENDFORM.                    "get_titles&lt;br /&gt;&lt;br /&gt;*&amp;----------------------------------------------------*&lt;br /&gt;*&amp;      Form  get_data                                *&lt;br /&gt;*&amp;----------------------------------------------------*&lt;br /&gt;FORM get_data.&lt;br /&gt;&lt;br /&gt;  SELECT carrid connid countryfr cityfrom&lt;br /&gt;         airpfrom countryto cityto airpto&lt;br /&gt;  INTO TABLE t_spfli&lt;br /&gt;  FROM spfli&lt;br /&gt;  WHERE carrid EQ 'LH'.&lt;br /&gt;&lt;br /&gt;ENDFORM.                    " get_data&lt;br /&gt;&lt;br /&gt;*&amp;----------------------------------------------------*&lt;br /&gt;*&amp;      Form  create_excel                            *&lt;br /&gt;*&amp;----------------------------------------------------*&lt;br /&gt;FORM create_excel.&lt;br /&gt;&lt;br /&gt;  w_line = 1.&lt;br /&gt;&lt;br /&gt;  CREATE OBJECT e_appl 'EXCEL.APPLICATION'.&lt;br /&gt;  SET PROPERTY OF e_appl 'VISIBLE' = 1.&lt;br /&gt;&lt;br /&gt;  CALL METHOD OF e_appl 'WORKBOOKS' = e_work.&lt;br /&gt;  CALL METHOD OF e_work 'Add' = e_work.&lt;br /&gt;&lt;br /&gt;  GET PROPERTY OF e_appl 'ActiveSheet' = e_activesheet.&lt;br /&gt;  SET PROPERTY OF e_activesheet 'Name' = 'Flights'.&lt;br /&gt;&lt;br /&gt;  LOOP AT t_spfli ASSIGNING &amp;lt;fs_spfli&amp;gt;.&lt;br /&gt;    w_tabix = sy-tabix.&lt;br /&gt;    w_line = w_line + 1.&lt;br /&gt;&lt;br /&gt;    LOOP AT t_titles ASSIGNING &amp;lt;fs_titles&amp;gt;.&lt;br /&gt;      w_titles = sy-tabix.&lt;br /&gt;      CALL METHOD OF e_appl 'Cells' = e_cell&lt;br /&gt;        EXPORTING&lt;br /&gt;          #1 = 1&lt;br /&gt;          #2 = w_titles.&lt;br /&gt;      SET PROPERTY OF e_cell 'Value' =  &amp;lt;fs_titles&amp;gt;-title.&lt;br /&gt;      GET PROPERTY OF e_cell 'Interior' = e_color.&lt;br /&gt;      SET PROPERTY OF e_color 'ColorIndex' = 35.&lt;br /&gt;&lt;br /&gt;      GET PROPERTY OF e_cell 'Font' = e_bold.&lt;br /&gt;      SET PROPERTY OF e_bold 'Bold' = 1.&lt;br /&gt;&lt;br /&gt;      CALL METHOD OF e_appl 'Cells' = e_cell&lt;br /&gt;        EXPORTING&lt;br /&gt;          #1 = w_line&lt;br /&gt;          #2 = w_titles.&lt;br /&gt;&lt;br /&gt;      CONCATENATE '&amp;lt;fs_spfli&amp;gt;-' &amp;lt;fs_titles&amp;gt;-field&lt;br /&gt;      INTO w_field.&lt;br /&gt;      ASSIGN (w_field) TO &amp;lt;fs&amp;gt;.&lt;br /&gt;&lt;br /&gt;      SET PROPERTY OF e_cell 'Value' = &amp;lt;fs&amp;gt;.&lt;br /&gt;      GET PROPERTY OF e_cell 'Interior' = e_color.&lt;br /&gt;      SET PROPERTY OF e_cell 'ColumnWidth' = 20.&lt;br /&gt;      SET PROPERTY OF e_color 'ColorIndex' = 0.&lt;br /&gt;      GET PROPERTY OF e_cell 'Font' = e_bold.&lt;br /&gt;      SET PROPERTY OF e_bold 'Bold' = 0.&lt;br /&gt;    ENDLOOP.&lt;br /&gt;  ENDLOOP.&lt;br /&gt;&lt;br /&gt;  CALL METHOD OF e_work 'SAVEAS'&lt;br /&gt;    EXPORTING&lt;br /&gt;      #1 = p_file.&lt;br /&gt;&lt;br /&gt;  CALL METHOD OF e_work 'close'.&lt;br /&gt;  CALL METHOD OF e_appl 'QUIT'.&lt;br /&gt;  FREE OBJECT e_appl.&lt;br /&gt;&lt;br /&gt;ENDFORM.                    " create_excel&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Ahora...Una imagen...&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_eKAKUbdu3CI/SYtY_E-7WAI/AAAAAAAAA-Y/y0T2kr1oJ-Q/s1600-h/Excel_OLE.jpeg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 95px;" src="http://1.bp.blogspot.com/_eKAKUbdu3CI/SYtY_E-7WAI/AAAAAAAAA-Y/y0T2kr1oJ-Q/s400/Excel_OLE.jpeg" border="0" alt=""id="BLOGGER_PHOTO_ID_5299427227224201218" /&gt;&lt;/a&gt;&lt;br /&gt;Saludos,&lt;br /&gt;&lt;br /&gt;Blag.&lt;br /&gt;&lt;/DIV&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13698376-6565482183652200488?l=atejada.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atejada.blogspot.com/feeds/6565482183652200488/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13698376&amp;postID=6565482183652200488' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/6565482183652200488'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/6565482183652200488'/><link rel='alternate' type='text/html' href='http://atejada.blogspot.com/2009/02/excel-ole-y-abap.html' title='Excel OLE y ABAP'/><author><name>Alvaro "Blag" Tejada Galindo</name><uri>http://www.blogger.com/profile/12061593528820409779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='https://weblogs.sdn.sap.com/images/people/alvaro_tajeda.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_eKAKUbdu3CI/SYtY_E-7WAI/AAAAAAAAA-Y/y0T2kr1oJ-Q/s72-c/Excel_OLE.jpeg' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13698376.post-2532408896277263533</id><published>2009-01-06T12:50:00.000-08:00</published><updated>2009-01-06T12:57:43.067-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Misc'/><category scheme='http://www.blogger.com/atom/ns#' term='ABAP'/><title type='text'>Haz que tu proceso de upgrade...No sea doloroso...</title><content type='html'>&lt;DIV ALIGN="JUSTIFY"&gt;&lt;br /&gt;Ok...Usualmente no hablo acerca de software o servicios que no he probado yo mismo...Pero en esta ocación, voy a hacer una pequeña excepción.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.panayainc.com"&gt;Panaya&lt;/a&gt; ofrece una gran herramienta para hacer tu proceso de upgrade, no sea doloroso...¿Y cómo lo hacen? Fácil...&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Tú&lt;/span&gt;:&lt;br /&gt;&lt;br /&gt;1. Copia un reporte ABAP (Certificado por SAP) en tu sistema SAP.&lt;br /&gt;2. Ejecuta el reporte para extraer tu código y estadísticas a un archivo.&lt;br /&gt;3. Carga el archivo sobre una conexión HTTPS a Panaya.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Panaya&lt;/span&gt;:&lt;br /&gt;&lt;br /&gt;* Analiza tu códigos y los archivos de usabilidad.&lt;br /&gt;* Mapea todos los objetos y sus dependencias.&lt;br /&gt;* Ejecuta tu código en ERP 6.0&lt;br /&gt;* Lista problemas, sus soluciones, y pruebas.&lt;br /&gt;&lt;br /&gt;Esto significa, nada de testing manual de tu parte...No más "Necesito hacer millones de pruebas de programas ABAP"...Deja que &lt;a href="http://www.panayainc.com"&gt;Panaya&lt;/a&gt; lo haga por ti -:)&lt;br /&gt;&lt;br /&gt;¿Quieres saber más? Entra &lt;a href="http://www.panayainc.com/SAP-Upgrade-ECC-6.0-Upgrade-SAP-Testing-Planning-Assessment.html"&gt;aquí&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Bueno...Deben estar pensando...¿Por qué les estoy haciendo publicidad gratis? Simple...Porque también ofrecen esto...&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.abapninja.org/"&gt;ABAP Ninja&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Un servicio online gratuito que te ayuda a encontrar los mejores Enhancement Points para tus desarrollos customizados. Además, participaron en el TechEd Las Vegas 2008...Donde ví a &lt;a href="http://www.abapninja.org/"&gt;ABAP Ninja&lt;/a&gt; en acción.&lt;br /&gt;&lt;br /&gt;Saludos,&lt;br /&gt;&lt;br /&gt;Blag.&lt;br /&gt;&lt;/DIV&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13698376-2532408896277263533?l=atejada.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atejada.blogspot.com/feeds/2532408896277263533/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13698376&amp;postID=2532408896277263533' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/2532408896277263533'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/2532408896277263533'/><link rel='alternate' type='text/html' href='http://atejada.blogspot.com/2009/01/haz-que-tu-proceso-de-upgradeno-sea.html' title='Haz que tu proceso de upgrade...No sea doloroso...'/><author><name>Alvaro "Blag" Tejada Galindo</name><uri>http://www.blogger.com/profile/12061593528820409779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='https://weblogs.sdn.sap.com/images/people/alvaro_tajeda.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13698376.post-1547267041592145084</id><published>2008-12-17T09:12:00.000-08:00</published><updated>2008-12-18T03:22:00.544-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='SDN'/><category scheme='http://www.blogger.com/atom/ns#' term='Community Day'/><category scheme='http://www.blogger.com/atom/ns#' term='ABAP'/><title type='text'>Blag's best blogs picks from 2008</title><content type='html'>&lt;DIV ALIGN="JUSTIFY"&gt;&lt;br /&gt;Tal como el año pasado &lt;a href="https://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/8090" target="_blank"&gt;Blag's best blogs picks from 2007&lt;/a&gt;, este año quiero mostrar mi lista de mis blogs favoritos del 2008 en el &lt;a href="http://sdn.sap.com"&gt;SCN&lt;/a&gt;. Para felicidad mía, este año la lista es sorprendentemente grande...Muchos blog muy buenos han sido escritos, así que solamente quiero decir &amp;quot;Felicitaciones SCN...Excelente año!&amp;quot; -:)&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;ABAP&lt;/strong&gt; &lt;br /&gt;&lt;br /&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/8676" target="_blank"&gt;SDN Blog Browser&lt;/a&gt; por &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=nkxEgTFlWZE%3D" target="_blank"&gt;Alvaro &amp;quot;Blag&amp;quot; Tejada Galindo &lt;/a&gt;&lt;br /&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/9511" target="_blank"&gt;ABAP Interpreter / Translator to Java &amp;ndash; Open Source ABAP Parser&lt;/a&gt; por &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=jTpG1p9%2BS1e7gaH1FDgcVw%3D%3D" target="_blank"&gt;Felix Jeyareuben&lt;/a&gt; &lt;br /&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/10053" target="_blank"&gt;Web Dynpro: Running Web Dynpro Applications over SAPGUI&lt;/a&gt; por &lt;a href="https://weblogs.sdn.sap.com/pub/wlg/8277" target="_blank"&gt;David Fernandes Pietroniro&lt;/a&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/8277" target="_blank"&gt;A Tool to Compare Runtime Measurements: Z_SE30_COMPARE&lt;/a&gt; por &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=GYc4g43yG2I%3D" target="_blank"&gt;Siegfried Boes&lt;/a&gt; &lt;br /&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/10862" target="_blank"&gt;ABAP Objects Wiki pages +10k Page Visits&lt;/a&gt; por &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=P%2FyR4%2FTd9OA%3D" target="_blank"&gt;Marcelo Ramos&lt;/a&gt; &lt;br /&gt;&lt;a href="https://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/12187" target="_blank"&gt;Power of ABAP Objects: Overcome the Restrictions of SALV Model&lt;/a&gt; por &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=f3JitnSd%2BmQ%3D" target="_blank"&gt;Naimesh Patel&lt;/a&gt;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;WebDynpro&lt;/strong&gt; &lt;br /&gt;&lt;br /&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/8681" target="_blank"&gt;Web Dynpro ABAP exercises from TechEd 2007&lt;/a&gt; por &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=bVrtyDzwDpM%3D" target="_blank"&gt;Manfred Lutz&lt;/a&gt;&lt;br /&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/10552" target="_blank"&gt;Web Dynpro ABAP: How Fast Can You Consume 1 Million Rows?&lt;/a&gt; por &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=5%2BhLK9C3p0Q%3D" target="_blank"&gt;Thomas Jung&lt;/a&gt; &lt;br /&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/8402" target="_blank"&gt;Practical tips for developing with ABAP WebDynpro&lt;/a&gt; por &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=ghc9xSbZOpo%3D" target="_blank"&gt;Roger Sainsbury&lt;/a&gt; &lt;br /&gt;&lt;a href="https://www.sdn.sap.com/irj/sdn/weblogs?blog=/pub/wlg/11569" target="_blank"&gt;Using Flex in SAP Web applications (without Adobe Flash Islands)&lt;/a&gt; por &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=OlaeOfOs6Bw%3D" target="_blank"&gt;Guillaume Garcia&lt;/a&gt; &amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Mobile&lt;/strong&gt; &lt;a href="https://weblogs.sdn.sap.com/pub/wlg/8797" target="_blank"&gt;Mobile Webdynpro(Accessing Webdynpro Applications in Mobile Devices)&lt;/a&gt; por &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=U0KObOv8J8A%3D" target="_blank"&gt;Sathishkumar GS&lt;/a&gt; &lt;br /&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/9140" target="_blank"&gt;First steps with NW Mobile 7.1 Trial Version&lt;/a&gt; por &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=jgncwgKcMDw%3D" target="_blank"&gt;Jan Fetzer&lt;/a&gt; &lt;br /&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/9556" target="_blank"&gt;Native integration of SAP CRM on BlackBerry Devices&lt;/a&gt; por &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=fb3kGorrIyAxIKfPH75wbg%3D%3D" target="_blank"&gt;Gregor Wolf&lt;/a&gt; &lt;br /&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/9597" target="_blank"&gt;Mobile Influence update - sneak peak of Ajax app&lt;/a&gt; por &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=UoX1prteXsEbNcWtF6UJ3A%3D%3D" target="_blank"&gt;Jim Spath&lt;/a&gt; &amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Business Server Pages&lt;/strong&gt; &lt;br /&gt;&lt;br /&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/8959" target="_blank"&gt;ABAP Freak Show - jQuery for BSP&lt;/a&gt; por &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=5%2BhLK9C3p0Q%3D" target="_blank"&gt;Thomas Jung&lt;/a&gt; &lt;a href="https://weblogs.sdn.sap.com/pub/wlg/10408" target="_blank"&gt;CHAT Application using BSP and AJAX&lt;/a&gt; por &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=HJPgN6ot87A%3D" target="_blank"&gt;Salil Patel&lt;/a&gt; &lt;br /&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/10503" target="_blank"&gt;Display Hierarchy Report in BSP using TableView and Tableview Iterator&lt;/a&gt; por &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=RLKDRfFwGBI%3D" target="_blank"&gt;Vijay Babu Dudla &lt;/a&gt;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Emerging Technologies&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/8510" target="_blank"&gt;Twitter and the Enterprise&lt;/a&gt; por &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=Vi4aCAMmuX4%3D" target="_blank"&gt;Craig Cmehil&lt;/a&gt; &lt;br /&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/8616" target="_blank"&gt;SAP, ANDROIDS and HEALTHCARE&lt;/a&gt; por &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=g9JT96GEyuI%3D" target="_blank"&gt;Paolo Romano&lt;/a&gt; &amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;SAP NetWeaver Platform&lt;/strong&gt; &lt;br /&gt;&lt;br /&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/9507" target="_blank"&gt;Subscription program - From naysayer to yea-sayer&lt;/a&gt; por &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=f9nAYzX3pnM%3D" target="_blank"&gt;Harald Reiter&lt;/a&gt; &lt;a href="https://weblogs.sdn.sap.com/pub/wlg/8883" target="_blank"&gt;Poor performance: detective story for this week&lt;/a&gt; por &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=UoX1prteXsEbNcWtF6UJ3A%3D%3D" target="_blank"&gt;Jim Spath&lt;/a&gt; &lt;br /&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/9361" target="_blank"&gt;[Oracle] Index key compression&lt;/a&gt; por &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=FJ50jA%2BDWc0019pg9RHRnQ%3D%3D" target="_blank"&gt;Stefan Koehler&lt;/a&gt; &lt;br /&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/9838" target="_blank"&gt;Downtime Manager&lt;/a&gt; por &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=j5lSfQ0PvGk%3D" target="_blank"&gt;Sapna Subramaniam&lt;/a&gt; &amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;PHP&lt;/strong&gt; &lt;br /&gt;&lt;br /&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/9129" target="_blank"&gt;PHP Connector? A New Hope&lt;/a&gt; por &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=92Lv8G2jFRU%3D" target="_blank"&gt;Nigel James&lt;/a&gt; &amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Ruby&lt;/strong&gt; &lt;br /&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/9204" target="_blank"&gt;Blag's Flex 3 Compiler&lt;/a&gt; por &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=nkxEgTFlWZE%3D" target="_blank"&gt;Alvaro &amp;quot;Blag&amp;quot; Tejada Galindo&lt;/a&gt; &amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Scripting Languages&lt;/strong&gt; &lt;br /&gt;&lt;br /&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/10436" target="_blank"&gt;Singleton Classes in Actionscript 3.0&lt;/a&gt; por &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=CsXelP5HzPI%3D" target="_blank"&gt;Abesh Bhattacharjee&lt;/a&gt; &amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Virtual Worlds and 3D Web&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/8519" target="_blank"&gt;BPX in Action Cartoon available&lt;/a&gt; por &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=PCUWdFESp%2BElgnBu4p6e9A%3D%3D" target="_blank"&gt;Richard Hirsch&lt;/a&gt; &lt;br /&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/9953" target="_blank"&gt;Community Clubhouse on SmallWorlds&lt;/a&gt; por &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=nkxEgTFlWZE%3D" target="_blank"&gt;Alvaro &amp;quot;Blag&amp;quot; Tejada Galindo&lt;/a&gt;&lt;br /&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/10202" target="_blank"&gt;New Approaches to Virtual Worlds&lt;/a&gt; por &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=VhphsvhftQo%3D" target="_blank"&gt;Alexander Bachmann&lt;/a&gt; &lt;br /&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/10200" target="_blank"&gt;Second Life and SAP Public Sector&lt;/a&gt; por &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=VhphsvhftQo%3D" target="_blank"&gt;Alexander Bachmann&lt;/a&gt; &amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Application Server&lt;/strong&gt; &lt;br /&gt;&lt;br /&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/9399" target="_blank"&gt;SAPmvc, a new MVC for Classical ABAP Dynpro&lt;/a&gt; por &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=P%2FyR4%2FTd9OA%3D" target="_blank"&gt;Marcelo Ramos&lt;/a&gt; &lt;br /&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/8750" target="_blank"&gt;Yes, you should floss your indices regularly&lt;/a&gt; por &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=UoX1prteXsEbNcWtF6UJ3A%3D%3D" target="_blank"&gt;Jim Spath&lt;/a&gt; &amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Beginner&lt;/strong&gt; &lt;br /&gt;&lt;br /&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/8555" target="_blank"&gt;Little tool for performance&lt;/a&gt; por &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=nkxEgTFlWZE%3D" target="_blank"&gt;Alvaro &amp;quot;Blag&amp;quot; Tejada Galindo&lt;/a&gt;&lt;br /&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/8415" target="_blank"&gt;How to use Workflow wizards?&lt;/a&gt; por &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=T6XNDe6ghrbnsP4v14vedw%3D%3D" target="_blank"&gt;Sunil Ojha&lt;/a&gt; &lt;br /&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/5432" target="_blank"&gt;Beginning Blogging &amp;amp; the WYSIWYG Editor&lt;/a&gt; por &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=6v4SGATYtPg%3D" target="_blank"&gt;Gali Kling Schneider&lt;/a&gt; &lt;br /&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/9496" target="_blank"&gt;Building a Wiki and your reputation&lt;/a&gt; por &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=y%2FlnOF0w%2FiY%3D" target="_blank"&gt;Mario Herger&lt;/a&gt; &amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Beyond SAP&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/9510" target="_blank"&gt;Marbles Game in ABAP&lt;/a&gt; por &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=f3JitnSd%2BmQ%3D" target="_blank"&gt;Naimesh Patel&lt;/a&gt; &lt;br /&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/9668" target="_blank"&gt;Show us what you can do, Create your own open source project and share with SDN!&lt;/a&gt; por &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=P%2FyR4%2FTd9OA%3D" target="_blank"&gt;Marcelo Ramos&lt;/a&gt; &lt;br /&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/9472" target="_blank"&gt;From The Grumpy Old Man: SAP employees confuse SCN with Twitter&lt;/a&gt; por &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=hx194InQjj9I3UIPeJinQQ%3D%3D" target="_blank"&gt;Eddy De Clercq&lt;/a&gt;&lt;br /&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/9766" target="_blank"&gt;BI BI Bapor, BI BI&lt;/a&gt; por &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=hx194InQjj9I3UIPeJinQQ%3D%3D" target="_blank"&gt;Eddy De Clercq&lt;/a&gt; &lt;br /&gt;&lt;a href="https://www.sdn.sap.com/irj/sdn/weblogs?blog=/pub/wlg/11204" target="_blank"&gt;Easy search on SAP sites with Ubiquity&lt;/a&gt; por &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=m1UL99iF00s8XVIopc8hjA%3D%3D" target="_blank"&gt;Daniel Graversen&lt;/a&gt; &lt;br /&gt;&lt;a href="https://www.sdn.sap.com/irj/sdn/weblogs?blog=/pub/wlg/11294" target="_blank"&gt;Why Social Networks Matter Now&lt;/a&gt; por &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=0j5zMfhYI3E%3D" target="_blank"&gt;Mark Yolton&lt;/a&gt; &amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Business Intelligence (BI)&lt;/strong&gt; &lt;br /&gt;&lt;br /&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/8134" target="_blank"&gt;One stage stop to know all about BW Extractors-Part1&lt;/a&gt; por &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=IhRifZZhczA%3D" target="_blank"&gt;swapna gollakota&lt;/a&gt; &lt;br /&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/9688" target="_blank"&gt;BI Process Chains with Dynamic System Command&lt;/a&gt; por &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=G6mcoSfA5xCoanY8pMsM0A%3D%3D" target="_blank"&gt;Ryan Quackenboss&lt;/a&gt; &amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Widgets&lt;/strong&gt; &lt;br /&gt;&lt;br /&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/10467" target="_blank"&gt;SAP TechEd 2008 Countdown&lt;/a&gt; por &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=P%2FyR4%2FTd9OA%3D" target="_blank"&gt;Marcelo Ramos&lt;/a&gt; &lt;a href="https://weblogs.sdn.sap.com/pub/wlg/8691" target="_blank"&gt;Working with SAP Widget Development Tools&lt;/a&gt; por &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=HIrybQJXDP4%3D" target="_blank"&gt;Sumangala Byali&lt;/a&gt; &lt;br /&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/9543" target="_blank"&gt;Actionscript Libraries for SAP Widget Foundation : Available now !&lt;/a&gt; por &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=CsXelP5HzPI%3D" target="_blank"&gt;Abesh Bhattacharjee&lt;/a&gt; &amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Community Day&lt;/strong&gt; &lt;br /&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/9948" target="_blank"&gt;Community Day Lima 2008 - The Recap&lt;/a&gt; por &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=nkxEgTFlWZE%3D" target="_blank"&gt;Alvaro &amp;quot;Blag&amp;quot; Tejada Galindo&lt;/a&gt; &lt;br /&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/10372" target="_blank"&gt;SDN Community Day Mentor Hands-On Workshop&lt;/a&gt; por &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=5%2BhLK9C3p0Q%3D" target="_blank"&gt;Thomas Jung&lt;/a&gt; &lt;br /&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/10281" target="_blank"&gt;Nanomonk - Adobe and SAP&lt;/a&gt; por &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=Vi4aCAMmuX4%3D" target="_blank"&gt;Craig Cmehil&lt;/a&gt; &lt;br /&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/9266" target="_blank"&gt;Community Day Buenos Aires, el d&amp;iacute;a despu&amp;eacute;s.&lt;/a&gt; por &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=4%2BGGHgInkeg%3D" target="_blank"&gt;Ignacio Hern&amp;aacute;ndez&lt;/a&gt; &lt;br /&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/9487" target="_blank"&gt;SDN community day in London - my experiences&lt;/a&gt; por &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=f9nAYzX3pnM%3D" target="_blank"&gt;Harald Reiter&lt;/a&gt; &lt;br /&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/9480" target="_blank"&gt;SAP Community Day London 2008&lt;/a&gt; por &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=vTDGIcG1kBILHjeMbiImZg%3D%3D" target="_blank"&gt;Darren Hague&lt;/a&gt; &lt;a href="https://weblogs.sdn.sap.com/pub/wlg/10119" target="_blank"&gt;Community Day Magic&lt;/a&gt; por &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=G9g0PZYnHCA%3D" target="_blank"&gt;Mark Finnern&lt;/a&gt; &lt;br /&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/11149" target="_blank"&gt;Community Day Changed My Life&lt;/a&gt; por &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=vTDGIcG1kBILHjeMbiImZg%3D%3D" target="_blank"&gt;Darren Hague&lt;/a&gt; &amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Community Projects&lt;/strong&gt; &lt;br /&gt;&lt;br /&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/10080" target="_blank"&gt;The ESME Collaboration and what it tells us about Web 2.0&lt;/a&gt; por &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=PCUWdFESp%2BElgnBu4p6e9A%3D%3D" target="_blank"&gt;Richard Hirsch&lt;/a&gt; &lt;br /&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/10214" target="_blank"&gt;ESME - The Demo&lt;/a&gt; por &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=CsXelP5HzPI%3D" target="_blank"&gt;Abesh Bhattacharjee&lt;/a&gt; &lt;br /&gt;&lt;a href="https://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/11529" target="_blank"&gt;GuidEd - TechEd Information Aggregator for the iPhone&lt;/a&gt; por &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=Y%2BI6hLyjY7ryHiwIHenWYg%3D%3D" target="_blank"&gt;Oliver Kohl&lt;/a&gt; &amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Java Programming&amp;nbsp; &lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/9708" target="_blank"&gt;An introduction to Scala, part 1&lt;/a&gt; por &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=vTDGIcG1kBILHjeMbiImZg%3D%3D" target="_blank"&gt;Darren Hague&lt;/a&gt; &lt;br /&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/8226" target="_blank"&gt;Isn't it Groovy - extending the Development Component build with Groovy?&lt;/a&gt; por &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=xIFhXh3RpxY%3D" target="_blank"&gt;Marion Schlotte&lt;/a&gt; &amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;SAP Developer Network&lt;/strong&gt; &lt;br /&gt;&lt;br /&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/8238" target="_blank"&gt;Eddy was here...&lt;/a&gt; por &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=CsXelP5HzPI%3D" target="_blank"&gt;Abesh Bhattacharjee&lt;/a&gt; &lt;br /&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/8232" target="_blank"&gt;Signal versus Noise&lt;/a&gt; por &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=G9g0PZYnHCA%3D" target="_blank"&gt;Mark Finnern&lt;/a&gt; &lt;a href="https://weblogs.sdn.sap.com/pub/wlg/9429" target="_blank"&gt;What&amp;rsquo;s thy color? &amp;ndash; v2.0&lt;/a&gt; por &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=J2yy601wOXE%3D" target="_blank"&gt;Wenceslaus Gnana&lt;/a&gt; &lt;br /&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/9996" target="_blank"&gt;SDN - long time ago&lt;/a&gt; por &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=Kf0q9%2Fx4ND8%3D" target="_blank"&gt;Santosh V&lt;/a&gt; &amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Business Process Expert&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/9055" target="_blank"&gt;Some of the BPX Stars Have Aligned&lt;/a&gt; por &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=aEYYjpyVTLA%3D" target="_blank"&gt;Marilyn Pratt&lt;/a&gt; &lt;br /&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/8270" target="_blank"&gt;Getting the Most Out of the BPX Community&lt;/a&gt; por &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=b6mSBPi8QdI%3D" target="_blank"&gt;Marco ten Vaanholt&lt;/a&gt; &lt;br /&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/9940" target="_blank"&gt;The reputation problem&lt;/a&gt; por &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=AfPsNmJJyu0%3D" target="_blank"&gt;Dennis Howlett&lt;/a&gt; &lt;br /&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/9986" target="_blank"&gt;The Geek Gap: Do Suits Care?&lt;/a&gt; por &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=YrkNXuMPzDg%3D" target="_blank"&gt;Bill Pfleging and Minda Zetlin&lt;/a&gt; &lt;br /&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/10798" target="_blank"&gt;The BPX Community Book Finally here !...BPX Education and Certification #2&lt;/a&gt; por &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=P%2FyR4%2FTd9OA%3D" target="_blank"&gt;Marco ten Vaanholt&lt;/a&gt; &amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;SAP TechEd&lt;/strong&gt; &lt;br /&gt;&lt;br /&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/8380" target="_blank"&gt;Video: Behind the Scenes at SAP TechEd '07&lt;/a&gt; por &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=Ij3Jnvr4JMs%3D" target="_blank"&gt;Chip Rodgers&lt;/a&gt; &lt;br /&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/9047" target="_blank"&gt;SAP Forum in Brazil: Sao Paolo Hosted ~5000 including SDN Top Contributors&lt;/a&gt; por &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=0j5zMfhYI3E%3D" target="_blank"&gt;Mark Yolton&lt;/a&gt; &lt;br /&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/9630" target="_blank"&gt;The people of SAP TechEd 2005-2007&lt;/a&gt; por &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=Vi4aCAMmuX4%3D" target="_blank"&gt;Craig Cmehil&lt;/a&gt; &lt;br /&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/10544" target="_blank"&gt;SAP TechED Countdown Widgets Redux !&lt;/a&gt; por &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=CsXelP5HzPI%3D" target="_blank"&gt;Abesh Bhattacharjee&lt;/a&gt; &lt;br /&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/10336" target="_blank"&gt;Social Networking - Beta Release&lt;/a&gt; por &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=Vi4aCAMmuX4%3D" target="_blank"&gt;Craig Cmehil&lt;/a&gt; &amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Ranting&lt;/strong&gt; &lt;br /&gt;&lt;br /&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/9206" target="_blank"&gt;How to Lower Your Status in The SAP Community&lt;/a&gt; por &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=aEYYjpyVTLA%3D" target="_blank"&gt;Marilyn Pratt&lt;/a&gt; &lt;br /&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/9315" target="_blank"&gt;How to Further Damage Your SAP Community Reputation&lt;/a&gt; por &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=aEYYjpyVTLA%3D" target="_blank"&gt;Marilyn Pratt&lt;/a&gt; &lt;br /&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/9733" target="_blank"&gt;Why Do Companies Release Software with Bugs?&lt;/a&gt; por &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=YrkNXuMPzDg%3D" target="_blank"&gt;Bill Pfleging and Minda Zetlin&lt;/a&gt; &amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Composition Environment (CE)&lt;/strong&gt; &lt;br /&gt;&lt;br /&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/8198" target="_blank"&gt;Music Composition Environment&lt;/a&gt; por &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=4%2BGGHgInkeg%3D" target="_blank"&gt;Ignacio Hern&amp;aacute;ndez&lt;/a&gt; &amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Enterprise Portal (EP) &lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/8633" target="_blank"&gt;Creating Search Webpage Process in CAF-GP&lt;/a&gt; por&lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=j%2BHPshaaaNk%3D" target="_blank"&gt; rakesh verma&lt;/a&gt; &amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Visual Composer&lt;/strong&gt; &lt;br /&gt;&lt;br /&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/8897" target="_blank"&gt;Visual Composer demo - Customer and Google API&lt;/a&gt; por &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=B8fzbYZW1fmJMJGg%2FupFAQ%3D%3D" target="_blank"&gt;Jakob Diness&lt;/a&gt; &lt;br /&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/8364" target="_blank"&gt;How to create Portal content with the Visual Composer for Composition Environment?&lt;/a&gt; por &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=XNpA%2FILKE2U%3D" target="_blank"&gt;Dafna Yanay&lt;/a&gt; &lt;br /&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/8832" target="_blank"&gt;Visual Composer7.1 and Yahoo Maps - Part I&lt;/a&gt; por &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=KYQW3I2sMZeLES5BH5yTWQ%3D%3D" target="_blank"&gt;Vivek Kumar Mishra&lt;/a&gt; &amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Open Source&lt;/strong&gt; &lt;br /&gt;&lt;br /&gt;&lt;a href="https://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/10732" target="_blank"&gt;SAPmvc Framework Release 0.1.0&lt;/a&gt; by &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=P%2FyR4%2FTd9OA%3D" target="_blank"&gt;Marcelo Ramos&lt;/a&gt; &amp;nbsp;&lt;br /&gt;&lt;br /&gt;Disfrutenlos! -:D &amp;nbsp;&lt;br /&gt;&lt;br /&gt;Saludos,&lt;br /&gt;&lt;br /&gt;Blag.&lt;br /&gt;&lt;/DIV&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13698376-1547267041592145084?l=atejada.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atejada.blogspot.com/feeds/1547267041592145084/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13698376&amp;postID=1547267041592145084' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/1547267041592145084'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/1547267041592145084'/><link rel='alternate' type='text/html' href='http://atejada.blogspot.com/2008/12/tal-como-el-ao-pasado-blags-best-blogs.html' title='Blag&apos;s best blogs picks from 2008'/><author><name>Alvaro "Blag" Tejada Galindo</name><uri>http://www.blogger.com/profile/12061593528820409779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='https://weblogs.sdn.sap.com/images/people/alvaro_tajeda.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13698376.post-541249327088488041</id><published>2008-12-15T10:43:00.000-08:00</published><updated>2008-12-15T10:50:13.606-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SDN'/><category scheme='http://www.blogger.com/atom/ns#' term='Misc'/><title type='text'>Foros del SCN en Español!</title><content type='html'>&lt;DIV ALIGN="JUSTIFY"&gt;&lt;br /&gt;Hoy día me llegó un mail de Henrique Pinto de &lt;a href="http://www.sap.com"&gt;SAP&lt;/a&gt; avisándome que en el &lt;a href="http://sdn.sap.com"&gt;SCN&lt;/a&gt; se han creados nuevos foros...Uno de ellos en &lt;a href="https://forums.sdn.sap.com/category.jspa?categoryID=53"&gt;Español&lt;/a&gt; y el otro en &lt;a href="https://forums.sdn.sap.com/index.jspa?categoryID=1#52"&gt;Portuges&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;No puedo ocultar la emoción que siento por esto, puesto que desde entré al &lt;a href="http://sdn.sap.com"&gt;SCN&lt;/a&gt;, he luchado por ganar un espacio para la Comunidad Latina.&lt;br /&gt;&lt;br /&gt;Claro, no estoy diciendo que me hicieron caso y gracias a mi existen estos foros...Por supuesto que no...pero si estoy seguro que por lo menos los hice darse cuenta de la necesidad de dar un mayor espacio a nuestra comunidad.&lt;br /&gt;&lt;br /&gt;Si bien son foros pequeños y basicamente "multi propósito", es un gran paso, así que están esperándo para loguearse y comenzar a postear?!&lt;br /&gt;&lt;br /&gt;&lt;a href="https://forums.sdn.sap.com/index.jspa?categoryID=1#53"&gt;Spanish: Español&lt;/a&gt;&lt;br /&gt;&lt;a href="https://forums.sdn.sap.com/index.jspa?categoryID=1#52"&gt;Portuguese: Português&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Y recuerden...Ahora también pueden escribir sus blog 100% en Español!!! -:D&lt;br /&gt;&lt;br /&gt;Saludos,&lt;br /&gt;&lt;br /&gt;Blag.&lt;br /&gt;&lt;/DIV&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13698376-541249327088488041?l=atejada.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atejada.blogspot.com/feeds/541249327088488041/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13698376&amp;postID=541249327088488041' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/541249327088488041'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/541249327088488041'/><link rel='alternate' type='text/html' href='http://atejada.blogspot.com/2008/12/foros-del-scn-en-espaol.html' title='Foros del SCN en Español!'/><author><name>Alvaro "Blag" Tejada Galindo</name><uri>http://www.blogger.com/profile/12061593528820409779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='https://weblogs.sdn.sap.com/images/people/alvaro_tajeda.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13698376.post-871951154164636990</id><published>2008-12-05T11:45:00.001-08:00</published><updated>2008-12-05T12:02:31.519-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><title type='text'>Buscando el IDE perfecto para Ruby</title><content type='html'>&lt;DIV ALIGN="JUSTIFY"&gt;&lt;br /&gt;Me considero a mi mismo como un fan de &lt;a href="http://www.ruby-lang.org/es/"&gt;Ruby&lt;/a&gt;...Es por eso que siempre estoy buscando novedades y por supuesto...nuevos &lt;a href="http://es.wikipedia.org/wiki/Ambiente_integrado_de_desarrollo"&gt;IDE's&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Mi primer intento fué con &lt;a href="http://rubyforge.org/frs/?group_id=31"&gt;FreeRide&lt;/a&gt;, un IDE hecho en &lt;a href="http://www.ruby-lang.org/es/"&gt;Ruby&lt;/a&gt;. Lo que me gusta acerca de este IDE es su simplicidad...Mientras que algunas personas están acostumbradas a las herramientas &lt;a href="http://es.wikipedia.org/wiki/Desarrollo_r%C3%A1pido_de_aplicaciones"&gt;RAD&lt;/a&gt;, a mi me gusta mantener las cosas lo más simple posible...&lt;a href="http://rubyforge.org/frs/?group_id=31"&gt;FreeRide&lt;/a&gt; ofrece esto.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_eKAKUbdu3CI/STlJl0neX3I/AAAAAAAAArs/_5cAMkEsmN0/s1600-h/FreeRide.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 285px;" src="http://1.bp.blogspot.com/_eKAKUbdu3CI/STlJl0neX3I/AAAAAAAAArs/_5cAMkEsmN0/s400/FreeRide.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5276329352569446258" /&gt;&lt;/a&gt;&lt;br /&gt;Mi segundo intento fué con &lt;a href="http://www.sapphiresteel.com/Ruby-In-Steel-New-Free-Edition"&gt;Ruby in Steel&lt;/a&gt;, que es gratuito en su edición personal. Nunca he sido un fan de &lt;a href="http://es.wikipedia.org/wiki/Microsoft_Visual_Studio"&gt;Visual Studio&lt;/a&gt; a pesar de que tengo experiencia en &lt;a href="http://es.wikipedia.org/wiki/C_Sharp"&gt;C#&lt;/a&gt;...Fuera de eso, decidí darle a este IDE una oportunidad...La instalación fué rápida y sin problemas...Sin embargo, como ya tenía instalado &lt;a href="http://www.ruby-lang.org/es/"&gt;Ruby&lt;/a&gt; en mi laptop, decidí saltarmelo de la instalación para configurarlo manualmente más adelante...Triste sorpresa cuando hice referencia a mi carpeta de instalación de &lt;a href="http://www.ruby-lang.org/en/"&gt;Ruby&lt;/a&gt;...&lt;a href="http://www.sapphiresteel.com/Ruby-In-Steel-New-Free-Edition"&gt;Ruby in Steel&lt;/a&gt; no la aceptaba...De acuerdo con el mensaje, necesitaba que &lt;a href="http://www.ruby-lang.org/es/"&gt;Ruby&lt;/a&gt; estuviera instalado en la carpeta &lt;span style="font-weight:bold;"&gt;Program Files&lt;/span&gt;, mientras que yo lo tenia en la carpeta &lt;span style="font-weight:bold;"&gt;Programacion&lt;/span&gt;. Bastante malo, puesto que no tengo intenciones de desintalar mi configuración anterior...&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_eKAKUbdu3CI/STlMkINBLsI/AAAAAAAAAr0/bj7awFUPkyQ/s1600-h/RubyInSteel.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 312px;" src="http://1.bp.blogspot.com/_eKAKUbdu3CI/STlMkINBLsI/AAAAAAAAAr0/bj7awFUPkyQ/s400/RubyInSteel.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5276332622002335426" /&gt;&lt;/a&gt;&lt;br /&gt;Mi último intento fué &lt;a href="http://www.netbeans.org/downloads/index.html"&gt;NetBeans 6.5&lt;/a&gt; que incluye actualmete a Ruby/Rails, Groovy/Grails, C/C++, Java/JavaME/JavaFX and PHP (Me pregunto porque dejaron fuera a Python y Perl)...Fué realmente una agradable sorpresa...&lt;a href="http://www.netbeans.org/downloads/index.html"&gt;NetBeans&lt;/a&gt; ha hecho un excelente trabajo...Me encanta el IDE y de hecho me encanta el soporte de &lt;a href="http://www.ruby-lang.org/es/"&gt;Ruby&lt;/a&gt; que se ejecuta bajo &lt;a href="http://jruby.codehaus.org/"&gt;JRuby&lt;/a&gt;...Pude instalar todos mis queridos GEMS y empezar a trabajar...Muy recomendado -:)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_eKAKUbdu3CI/STlORQfFRmI/AAAAAAAAAr8/38UNf1pmPDY/s1600-h/NetBeans.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 218px;" src="http://2.bp.blogspot.com/_eKAKUbdu3CI/STlORQfFRmI/AAAAAAAAAr8/38UNf1pmPDY/s400/NetBeans.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5276334496831325794" /&gt;&lt;/a&gt;&lt;br /&gt;Bueno...Ya se que es lo que están pensando...&lt;span style="font-weight:bold;"&gt;"Oye Blag...No has intentado con &lt;a href="http://www.eclipse.org/"&gt;Eclipse&lt;/a&gt;?"&lt;/span&gt; Por supuesto que sí, pero no pienso que sea necesario ponerlo aquí...Yo uso &lt;a href="http://www.eclipse.org/"&gt;Eclipse&lt;/a&gt; para mis desarrollos en &lt;a href="http://flex.org/"&gt;Flex&lt;/a&gt; y quiero continuar así...&lt;br /&gt;&lt;br /&gt;Además...Hay una gran cantidad de IDEs allá afuera...Pero esos tres son los más importantes para mi...Cuales son los tuyos?&lt;br /&gt;&lt;br /&gt;P.D: &lt;a href="http://twitter.com/dacuad"&gt;@dacuad&lt;/a&gt; me recomendó &lt;a href="http://www.jetbrains.com/ruby/"&gt;JetBrains&lt;/a&gt;...Que se ve bastante bueno, pero aún no lo he podido probar...&lt;br /&gt;&lt;br /&gt;Saludos,&lt;br /&gt;&lt;br /&gt;Blag.&lt;br /&gt;&lt;/DIV&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13698376-871951154164636990?l=atejada.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atejada.blogspot.com/feeds/871951154164636990/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13698376&amp;postID=871951154164636990' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/871951154164636990'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/871951154164636990'/><link rel='alternate' type='text/html' href='http://atejada.blogspot.com/2008/12/buscando-el-ide-perfecto-para-ruby.html' title='Buscando el IDE perfecto para Ruby'/><author><name>Alvaro "Blag" Tejada Galindo</name><uri>http://www.blogger.com/profile/12061593528820409779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='https://weblogs.sdn.sap.com/images/people/alvaro_tajeda.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_eKAKUbdu3CI/STlJl0neX3I/AAAAAAAAArs/_5cAMkEsmN0/s72-c/FreeRide.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13698376.post-3546759480288204726</id><published>2008-10-31T09:37:00.000-07:00</published><updated>2008-10-31T09:44:06.119-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Misc'/><title type='text'>Twitea como los profesionales...Con Twitwall</title><content type='html'>&lt;DIV ALIGN="JUSTIFY"&gt;&lt;br /&gt;Si eres un adicto del &lt;a href="http://www.twitter.com"&gt;Twitter&lt;/a&gt;, como yo -;) Seguramente debes conocer &lt;a href="http://tinypaste.com/"&gt;Tinypaste&lt;/a&gt; y &lt;a href="http://twitpic.com/"&gt;TwitPic&lt;/a&gt;, dos maravillosos compañeros de &lt;a href="http://www.twitter.com"&gt;Twitter&lt;/a&gt;...¿Pero conoces &lt;a href="http://twitwall.com/"&gt;Twitwall&lt;/a&gt;?&lt;br /&gt;&lt;br /&gt;Este es un servicio gratuito creado por &lt;a href="http://www.twitter.com/mecarluen"&gt;Michael E. Carluen&lt;/a&gt; y provee las misma funcionalidades que &lt;a href="http://tinypaste.com/"&gt;Tinypaste&lt;/a&gt; y &lt;a href="http://twitpic.com/"&gt;TwitPic&lt;/a&gt; con más opciones interesantes...Veamos algunas fotos...&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_eKAKUbdu3CI/SQsvAzezF6I/AAAAAAAAAqQ/2AWnqvQEsak/s1600-h/Twitwall_01.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 279px;" src="http://4.bp.blogspot.com/_eKAKUbdu3CI/SQsvAzezF6I/AAAAAAAAAqQ/2AWnqvQEsak/s400/Twitwall_01.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5263352280378447778" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_eKAKUbdu3CI/SQsvLHoPhqI/AAAAAAAAAqY/MpBTpLG3z4Q/s1600-h/Twitwall_02.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 280px;" src="http://1.bp.blogspot.com/_eKAKUbdu3CI/SQsvLHoPhqI/AAAAAAAAAqY/MpBTpLG3z4Q/s400/Twitwall_02.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5263352457585460898" /&gt;&lt;/a&gt;&lt;br /&gt;Primero, te darás cuenta de que la interface es bastante similar a &lt;a href="http://www.twitter.com"&gt;Twitter&lt;/a&gt;, pero puedes cambiar el tamaño y el tipo de letra -:)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_eKAKUbdu3CI/SQsvgx0PGmI/AAAAAAAAAqg/Pv7MyXciOw0/s1600-h/Twitwall_03.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 371px; height: 338px;" src="http://4.bp.blogspot.com/_eKAKUbdu3CI/SQsvgx0PGmI/AAAAAAAAAqg/Pv7MyXciOw0/s400/Twitwall_03.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5263352829687306850" /&gt;&lt;/a&gt;&lt;br /&gt;Tienes un muy útil editor de texto enriquecido con la opción de incluir fotos en el mismo post...&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_eKAKUbdu3CI/SQsvzkYckHI/AAAAAAAAAqo/9cmKMhXy21I/s1600-h/Twitwall_04.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 375px; height: 325px;" src="http://4.bp.blogspot.com/_eKAKUbdu3CI/SQsvzkYckHI/AAAAAAAAAqo/9cmKMhXy21I/s400/Twitwall_04.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5263353152498602098" /&gt;&lt;/a&gt;&lt;br /&gt;Las fotos son embedidas en tu post...Y sí...Adjunté la misma imagen que está arriba -:) ¿Te has dado cuenta de puedes incluir un título y una descripción a tu post?&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_eKAKUbdu3CI/SQswSP6ISVI/AAAAAAAAAqw/ophsm21h8Ls/s1600-h/Twitwall_05.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 160px;" src="http://2.bp.blogspot.com/_eKAKUbdu3CI/SQswSP6ISVI/AAAAAAAAAqw/ophsm21h8Ls/s400/Twitwall_05.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5263353679578679634" /&gt;&lt;/a&gt;&lt;br /&gt;En &lt;a href="http://www.twitter.com"&gt;Twitter&lt;/a&gt; puedes ver el título, y un enlace te manda a &lt;a href="http://twitwall.com/"&gt;Twitwall&lt;/a&gt; para poder ver la foto y la descripción de tu post.&lt;br /&gt;&lt;br /&gt;Luego de ver esto...¿Porque aún no has creado tu cuenta? Inclusive tienes &lt;a href="http://twitter.grader.com/"&gt;Twitter Grader&lt;/a&gt; incorporado en tu cuenta -:D&lt;br /&gt;&lt;br /&gt;Saludos,&lt;br /&gt;&lt;br /&gt;Blag.&lt;br /&gt;&lt;/DIV&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13698376-3546759480288204726?l=atejada.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atejada.blogspot.com/feeds/3546759480288204726/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13698376&amp;postID=3546759480288204726' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/3546759480288204726'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/3546759480288204726'/><link rel='alternate' type='text/html' href='http://atejada.blogspot.com/2008/10/twitea-como-los-profesionalescon.html' title='Twitea como los profesionales...Con Twitwall'/><author><name>Alvaro "Blag" Tejada Galindo</name><uri>http://www.blogger.com/profile/12061593528820409779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='https://weblogs.sdn.sap.com/images/people/alvaro_tajeda.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_eKAKUbdu3CI/SQsvAzezF6I/AAAAAAAAAqQ/2AWnqvQEsak/s72-c/Twitwall_01.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13698376.post-9188796577180843711</id><published>2008-10-24T10:10:00.000-07:00</published><updated>2008-10-24T10:25:29.996-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Misc'/><title type='text'>Buscando el lenguaje de programación perfecto...</title><content type='html'>&lt;DIV ALIGN="JUSTIFY"&gt;&lt;br /&gt;Empecé en el mundo de la programación, hace casi 11 años (En Marzo)...Mis primeros lenguajes fueron Visual Basic 6.0 y C++.&lt;br /&gt;&lt;br /&gt;Desde ese momento, aprendí que había nacido para programar...No hay que supere a crear algo de la nada...Como por ejemplo, cuando necesitaba un reproductor de MP3 en mi PC de escritorio y como no tenía internet, no tenía puerto USB (Creo no aún no existían...puro diskette o CD solamente)...Tuve que hacer el mío propio -;)&lt;br /&gt;&lt;br /&gt;Al pasar los años, me asomé a algunos lenguajes que hoy en día en desuso (Bueno...También lo estaban en ese momento LOL) como QBasic y Pascal.&lt;br /&gt;&lt;br /&gt;Claro, también investigué otros como Euphoria, ADA, PHP, Ruby...Y un sinfín de lenguajes más...Y no quiero que esto suene como una frase sacada de Pókemon...Pero quería aprenderlos todos! -:D Dura lección cuando descubrí esta página web... &lt;a href="http://99-bottles-of-beer.net/"&gt;99 Bottles of Beer&lt;/a&gt;. El mismo programa escrito en 1229 lenguajes de programación!!! Bueno...Hace unos años, era cerca de 600...De acuerdo con el autor...&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;n middle of June 2002 there were more than 315 languages, and 2004 there were 621 examples available.&lt;/blockquote&gt;&lt;br /&gt;En fín...Obviamente me di cuenta de que la mía era una tarea sinceramente imposible...Así que continué con los lenguajes que ya conocía y agregué algunos cuantos más...Así que en este momento conozco cerca de 20 lenguajes (Claro...Algunos más que otros...Otros nunca más los he usado)...Bastante lejos de la meta no? -;)&lt;br /&gt;&lt;br /&gt;Inclusive, intenté llegar más lejos con mi búsqueda y aprender Assembler...Lenguaje bastante complicado si me lo preguntan...A lo máximo que llegué fué a un &lt;span style="font-weight:bold;"&gt;Hola Mundo&lt;/span&gt;...&lt;br /&gt;&lt;br /&gt;Bueno...Navegando un poco por la web el otro día...Me encontré con la herramienta que me ayudaría a resolver todos mis problemas...Para que aprender tantos lenguajes si con esta maravilla puedo programar lo que sea sin importarme el lenguaje?&lt;br /&gt;&lt;br /&gt;Estoy hablando del SuperCoder 2000!!!&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_eKAKUbdu3CI/SQIEX7YhK_I/AAAAAAAAAqA/TmFQ21dvW0k/s1600-h/supercoder.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 289px;" src="http://1.bp.blogspot.com/_eKAKUbdu3CI/SQIEX7YhK_I/AAAAAAAAAqA/TmFQ21dvW0k/s400/supercoder.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5260772123846192114" /&gt;&lt;/a&gt;&lt;br /&gt;Como todos sabemos, las computadoras por más lenguajes de bajo nivel que utilicemos, finalmente siempre van a leer todo como 1's y 0's...Entonces -:D Porque no programar con 1's y 0's directamente!!! -:D&lt;br /&gt;&lt;br /&gt;Saludos,&lt;br /&gt;&lt;br /&gt;Blag.&lt;br /&gt;&lt;br /&gt;P.D: Obviamente este post es bastante ridículo y no debe ser tomado en serio...Nadie puede programar con el SuperCoder 2000...O por lo menos, nadie que yo conozca -:)&lt;br /&gt;&lt;/DIV&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13698376-9188796577180843711?l=atejada.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atejada.blogspot.com/feeds/9188796577180843711/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13698376&amp;postID=9188796577180843711' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/9188796577180843711'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/9188796577180843711'/><link rel='alternate' type='text/html' href='http://atejada.blogspot.com/2008/10/buscando-el-lenguaje-de-programacin.html' title='Buscando el lenguaje de programación perfecto...'/><author><name>Alvaro "Blag" Tejada Galindo</name><uri>http://www.blogger.com/profile/12061593528820409779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='https://weblogs.sdn.sap.com/images/people/alvaro_tajeda.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_eKAKUbdu3CI/SQIEX7YhK_I/AAAAAAAAAqA/TmFQ21dvW0k/s72-c/supercoder.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13698376.post-5707729705692610151</id><published>2008-10-03T13:34:00.000-07:00</published><updated>2008-10-03T13:41:05.658-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Misc'/><category scheme='http://www.blogger.com/atom/ns#' term='GAMES'/><title type='text'>Quake Live...Está vivo!</title><content type='html'>&lt;DIV ALIGN="JUSTIFY"&gt;&lt;br /&gt;Hace algunas semanas...Bueno...En realidad la semana pasada LOL Me apunté para el  &lt;a href="http://quakelive.idsoftware.com/beta/"&gt;Programa Beta de Quake Live&lt;/a&gt;...Afortunadamente...Me aceptaron -;) Así que me creé una cuenta...Descargué el cliente web (Funciona perfecto en Firefox, no lo he probado en otros browsers...aún).&lt;br /&gt;&lt;br /&gt;Entonces...¿Alguna vez han jugado &lt;a href="http://en.wikipedia.org/wiki/Quake"&gt;Quake&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Doom_(video_game)"&gt;Doom&lt;/a&gt; o &lt;a href="http://en.wikipedia.org/wiki/Wolfenstein_3D"&gt;Wolfenstein 3D&lt;/a&gt;? Definitivamente, yo sí...Soy un gran fan de los juegos de &lt;a href="http://en.wikipedia.org/wiki/ID_Software"&gt;ID Software&lt;/a&gt;...&lt;br /&gt;&lt;br /&gt;Veamos algunas imagenes...Primero, puedes escoger de varios personajes...&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_eKAKUbdu3CI/SOYyzpINb7I/AAAAAAAAAog/fXNOCRIsXo0/s1600-h/Quake_Live_01.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_eKAKUbdu3CI/SOYyzpINb7I/AAAAAAAAAog/fXNOCRIsXo0/s400/Quake_Live_01.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5252941878169268146" /&gt;&lt;/a&gt;&lt;br /&gt;Puedes acceder a una arena "Aprende primero"...&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_eKAKUbdu3CI/SOYzCHeUTAI/AAAAAAAAAoo/GdZ3QJGq1Yo/s1600-h/Quake_Live_02.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_eKAKUbdu3CI/SOYzCHeUTAI/AAAAAAAAAoo/GdZ3QJGq1Yo/s400/Quake_Live_02.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5252942126833224706" /&gt;&lt;/a&gt;&lt;br /&gt;Un bot llamado &lt;span style="font-weight:bold;"&gt;Crash&lt;/span&gt; está listo para darte tus primeras lecciones...&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_eKAKUbdu3CI/SOYzQYi2UrI/AAAAAAAAAow/-o1OO4aibjo/s1600-h/Quake_Live_03.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_eKAKUbdu3CI/SOYzQYi2UrI/AAAAAAAAAow/-o1OO4aibjo/s400/Quake_Live_03.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5252942371933803186" /&gt;&lt;/a&gt;&lt;br /&gt;Inclusive puedes pelear contra &lt;span style="font-weight:bold;"&gt;Crash&lt;/span&gt; en un pequeño DeathMatch de práctica...&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_eKAKUbdu3CI/SOYzjUkxayI/AAAAAAAAAo4/-Xw45L0pbXs/s1600-h/Quake_Live_04.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_eKAKUbdu3CI/SOYzjUkxayI/AAAAAAAAAo4/-Xw45L0pbXs/s400/Quake_Live_04.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5252942697285643042" /&gt;&lt;/a&gt;&lt;br /&gt;Los gráficos son muy buenos, los movimientos son sencillos y los controles responden muy bien y tienes una gran variedad de armas...&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_eKAKUbdu3CI/SOYz5_8O0BI/AAAAAAAAApA/RtB0crSstmY/s1600-h/Quake_Live_05.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_eKAKUbdu3CI/SOYz5_8O0BI/AAAAAAAAApA/RtB0crSstmY/s400/Quake_Live_05.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5252943086883885074" /&gt;&lt;/a&gt;&lt;br /&gt;Como en muchos juegos On-Line, data adicional es downloaded cuando cargas una nueva Arena, pero la descarga es bastante veloz -;)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_eKAKUbdu3CI/SOY0Il39XoI/AAAAAAAAApI/2pI_B5ZYV0Y/s1600-h/Quake_Live_06.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_eKAKUbdu3CI/SOY0Il39XoI/AAAAAAAAApI/2pI_B5ZYV0Y/s400/Quake_Live_06.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5252943337584680578" /&gt;&lt;/a&gt;&lt;br /&gt;En otras palabras...&lt;a href="http://quakelive.idsoftware.com/beta/"&gt;Quake Live&lt;/a&gt; es excelente!!!&lt;br /&gt;&lt;br /&gt;Saludos,&lt;br /&gt;&lt;br /&gt;Blag.&lt;br /&gt;&lt;/DIV&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13698376-5707729705692610151?l=atejada.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atejada.blogspot.com/feeds/5707729705692610151/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13698376&amp;postID=5707729705692610151' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/5707729705692610151'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/5707729705692610151'/><link rel='alternate' type='text/html' href='http://atejada.blogspot.com/2008/10/quake-liveest-vivo.html' title='Quake Live...Está vivo!'/><author><name>Alvaro "Blag" Tejada Galindo</name><uri>http://www.blogger.com/profile/12061593528820409779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='https://weblogs.sdn.sap.com/images/people/alvaro_tajeda.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_eKAKUbdu3CI/SOYyzpINb7I/AAAAAAAAAog/fXNOCRIsXo0/s72-c/Quake_Live_01.png' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13698376.post-8092043793481533478</id><published>2008-09-04T08:00:00.000-07:00</published><updated>2008-09-04T08:21:04.576-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Misc'/><title type='text'>Google Chrome</title><content type='html'>&lt;DIV ALIGN="JUSTIFY"&gt;&lt;br /&gt;Es una lástima, pero recién puedo postear acerca del &lt;a href="http://www.google.com/chrome/eula.html"&gt;Google Chrome&lt;/a&gt; -:) A diferencia de varios amigos míos...No soy blogger a tiempo completo -;)&lt;br /&gt;&lt;br /&gt;Veamos...La instalación de &lt;span style="font-weight:bold;"&gt;Chrome&lt;/span&gt; es bastante rápida...Y la interface es sencilla y directa...Veamos algunos detalles...&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_eKAKUbdu3CI/SL_4hwgqZdI/AAAAAAAAAlM/SzKzy5zJUQg/s1600-h/Chrome_01.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_eKAKUbdu3CI/SL_4hwgqZdI/AAAAAAAAAlM/SzKzy5zJUQg/s400/Chrome_01.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5242181750123816402" /&gt;&lt;/a&gt;&lt;br /&gt;Como pueden ver en la imagen, &lt;span style="font-weight:bold;"&gt;Chrome&lt;/span&gt; guarda un registro de nuestra páginas más visitas para que la próxima vez que navegamos la web, podamos regresar a esas páginas de una manera más rápida...Esto sería muy bueno, si es que &lt;a href="http://www.opera.com/"&gt;Opera&lt;/a&gt; no lo hubiera hecho antes y mejor -;) ¿Por qué digo que mejor? Muy simple...&lt;span style="font-weight:bold;"&gt;Opera&lt;/span&gt; nos permite elegir las páginas que queremos tener en la pantalla inicial, mientras que en &lt;span style="font-weight:bold;"&gt;Chrome&lt;/span&gt; esto no se puede hacer...El mismo browser escoge las páginas dependiendo de que tan seguido las visitemos...&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_eKAKUbdu3CI/SL_5ViToGMI/AAAAAAAAAlU/DbCxqWxiD_A/s1600-h/Chrome_02.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_eKAKUbdu3CI/SL_5ViToGMI/AAAAAAAAAlU/DbCxqWxiD_A/s400/Chrome_02.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5242182639664240834" /&gt;&lt;/a&gt;&lt;br /&gt;Ahora un detalle muy interesante es el &lt;span style="font-weight:bold;"&gt;Modo Incognito&lt;/span&gt; que nos permite navegar en la web sin dejar rastros.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_eKAKUbdu3CI/SL_5_N9qUhI/AAAAAAAAAlc/PHro5okYLoc/s1600-h/Chrome_03.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_eKAKUbdu3CI/SL_5_N9qUhI/AAAAAAAAAlc/PHro5okYLoc/s400/Chrome_03.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5242183355757908498" /&gt;&lt;/a&gt;&lt;br /&gt;Claro...&lt;a href="http://www.apple.com/safari/"&gt;Safari&lt;/a&gt; ya había hecho esto antes...&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_eKAKUbdu3CI/SL_6NhCdEYI/AAAAAAAAAlk/fBWeQZDT29M/s1600-h/safaripornmode.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_eKAKUbdu3CI/SL_6NhCdEYI/AAAAAAAAAlk/fBWeQZDT29M/s400/safaripornmode.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5242183601396453762" /&gt;&lt;/a&gt;&lt;br /&gt;Una característica que me parece muy útil y que si es algo hasta el momento único en &lt;span style="font-weight:bold;"&gt;Chrome&lt;/span&gt; es el hecho de que todos los tabs y ventanas se manejan como procesos independientes, así que si un tab se cuelga, simplemente terminamos su proceso, y continuamos trabajando...&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_eKAKUbdu3CI/SL_6okuJu3I/AAAAAAAAAls/2waw25CrBnk/s1600-h/Chrome_04.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_eKAKUbdu3CI/SL_6okuJu3I/AAAAAAAAAls/2waw25CrBnk/s400/Chrome_04.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5242184066241510258" /&gt;&lt;/a&gt;&lt;br /&gt;La opciones de configuración son como las de cualquier otro browser...Aunque mucho más sencillas, es decir, como mucho menos opciones -:(&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_eKAKUbdu3CI/SL_67ytlegI/AAAAAAAAAl0/C9aOrDCq9Lg/s1600-h/Chrome_05.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_eKAKUbdu3CI/SL_67ytlegI/AAAAAAAAAl0/C9aOrDCq9Lg/s400/Chrome_05.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5242184396414745090" /&gt;&lt;/a&gt;&lt;br /&gt;La ventana de error que se nos muestra cuando un página o plug-in hacen algo que no deben, me recuerda bastante a la ventana que mostraba el &lt;a href="http://en.wikipedia.org/wiki/Macintosh_Plus"&gt;Macintosh Plus&lt;/a&gt;...(Aunque por lástima no he podido conseguir la imagen).&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_eKAKUbdu3CI/SL_7Y43vt6I/AAAAAAAAAl8/y-qjva95or0/s1600-h/Chrome_06.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_eKAKUbdu3CI/SL_7Y43vt6I/AAAAAAAAAl8/y-qjva95or0/s400/Chrome_06.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5242184896284178338" /&gt;&lt;/a&gt;&lt;br /&gt;Otra carácterística interesante es la de poder revisar toda la estructura de una página web...E inclusive modificarla (Aunque claro...solo como un skin).&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_eKAKUbdu3CI/SL_7tp6iszI/AAAAAAAAAmE/VHAe9Rfu57w/s1600-h/Chrome_07.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_eKAKUbdu3CI/SL_7tp6iszI/AAAAAAAAAmE/VHAe9Rfu57w/s400/Chrome_07.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5242185253046629170" /&gt;&lt;/a&gt;&lt;br /&gt;Finalmente...Y felizmente, el &lt;span style="font-weight:bold;"&gt;Chrome&lt;/span&gt; no tiene problemas con &lt;a href="http://www.adobe.com/products/flex/"&gt;Flex&lt;/a&gt; -;)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_eKAKUbdu3CI/SL_7--hE8nI/AAAAAAAAAmM/l5jkOMa4o4g/s1600-h/Chrome_08.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_eKAKUbdu3CI/SL_7--hE8nI/AAAAAAAAAmM/l5jkOMa4o4g/s400/Chrome_08.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5242185550634742386" /&gt;&lt;/a&gt;&lt;br /&gt;Mis comentarios finales son...&lt;br /&gt;&lt;br /&gt;* &lt;span style="font-weight:bold;"&gt;Chrome&lt;/span&gt; es el browser más veloz que he utilizado hasta ahora (Safari, Opera, IE, Firefox).&lt;br /&gt;* &lt;span style="font-weight:bold;"&gt;Chrome&lt;/span&gt; toma &lt;span style="font-style:italic;"&gt;prestadas&lt;/span&gt; muchas características de otros browsers.&lt;br /&gt;* &lt;span style="font-weight:bold;"&gt;Chrome&lt;/span&gt; consume menos recursos que los otros browsers.&lt;br /&gt;* Si bien &lt;span style="font-weight:bold;"&gt;Chrome&lt;/span&gt; tiene todo para ser el mejor...Aún no lo es...Sea que porque está en versión Beta o sea porque necesitaría incluir aún más opciones.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Chrome&lt;/span&gt; es un browser que vale la pena probar...&lt;br /&gt;&lt;br /&gt;Saludos,&lt;br /&gt;&lt;br /&gt;Blag.&lt;br /&gt;&lt;/DIV&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13698376-8092043793481533478?l=atejada.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atejada.blogspot.com/feeds/8092043793481533478/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13698376&amp;postID=8092043793481533478' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/8092043793481533478'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/8092043793481533478'/><link rel='alternate' type='text/html' href='http://atejada.blogspot.com/2008/09/google-chrome.html' title='Google Chrome'/><author><name>Alvaro "Blag" Tejada Galindo</name><uri>http://www.blogger.com/profile/12061593528820409779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='https://weblogs.sdn.sap.com/images/people/alvaro_tajeda.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_eKAKUbdu3CI/SL_4hwgqZdI/AAAAAAAAAlM/SzKzy5zJUQg/s72-c/Chrome_01.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13698376.post-2490616802319717906</id><published>2008-09-02T13:50:00.000-07:00</published><updated>2008-09-02T13:59:36.041-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Misc'/><category scheme='http://www.blogger.com/atom/ns#' term='FLEX'/><title type='text'>Nuevo diseño en mi tienda en Lulu.com</title><content type='html'>&lt;DIV ALIGN="JUSTIFY"&gt;&lt;br /&gt;El otro día mejoré el diseño de mi tienda en &lt;a href="http://www.lulu.com"&gt;Lulu.com&lt;/a&gt; &lt;a href="http://www.lulu.com/Blag"&gt;Alvaro "Blag" Tejada Galindo's Storefront&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_eKAKUbdu3CI/SL2no9EofQI/AAAAAAAAAlE/1gCsI6aWNw4/s1600-h/Blag_Lulu.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_eKAKUbdu3CI/SL2no9EofQI/AAAAAAAAAlE/1gCsI6aWNw4/s400/Blag_Lulu.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5241529863359724802" /&gt;&lt;/a&gt;&lt;br /&gt;Espero que esto los inspire a seguir comprando mis libros -;)&lt;br /&gt;&lt;br /&gt;Y hablando de eso...Hasta ahora nadie ha comprado mi libro &lt;a href="http://www.lulu.com/content/3069951"&gt;El Arte de Programar Flex&lt;/a&gt; -:(&lt;br /&gt;&lt;br /&gt;Saludos,&lt;br /&gt;&lt;br /&gt;Blag.&lt;br /&gt;&lt;/DIV&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13698376-2490616802319717906?l=atejada.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atejada.blogspot.com/feeds/2490616802319717906/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13698376&amp;postID=2490616802319717906' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/2490616802319717906'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/2490616802319717906'/><link rel='alternate' type='text/html' href='http://atejada.blogspot.com/2008/09/nuevo-diseo-en-mi-tienda-en-lulucom.html' title='Nuevo diseño en mi tienda en Lulu.com'/><author><name>Alvaro "Blag" Tejada Galindo</name><uri>http://www.blogger.com/profile/12061593528820409779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='https://weblogs.sdn.sap.com/images/people/alvaro_tajeda.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_eKAKUbdu3CI/SL2no9EofQI/AAAAAAAAAlE/1gCsI6aWNw4/s72-c/Blag_Lulu.JPG' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13698376.post-4806283596858345045</id><published>2008-08-24T11:26:00.000-07:00</published><updated>2008-08-24T14:08:09.599-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Misc'/><category scheme='http://www.blogger.com/atom/ns#' term='FLEX'/><title type='text'>El Arte de Programar - Flex</title><content type='html'>&lt;DIV ALIGN="JUSTIFY"&gt;&lt;br /&gt;Así es, acabo de publicar un nuevo libro de programación...Esta vez le tocó el turno a &lt;span style="font-weight:bold;"&gt;Flex&lt;/span&gt;. Espero que les guste -:D&lt;br /&gt;&lt;br /&gt;&lt;DIV ALIGN="CENTER"&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_eKAKUbdu3CI/SLGs1yh4xsI/AAAAAAAAAks/BwH6vuZdI6E/s1600-h/ArteFlex.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_eKAKUbdu3CI/SLGs1yh4xsI/AAAAAAAAAks/BwH6vuZdI6E/s400/ArteFlex.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5238157881705547458" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.lulu.com/content/3069951"&gt;El Arte de Programar - Flex.&lt;/a&gt;&lt;br /&gt;&lt;/DIV&gt;&lt;br /&gt;Saludos,&lt;br /&gt;&lt;br /&gt;Blag.&lt;br /&gt;&lt;/DIV&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13698376-4806283596858345045?l=atejada.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atejada.blogspot.com/feeds/4806283596858345045/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13698376&amp;postID=4806283596858345045' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/4806283596858345045'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/4806283596858345045'/><link rel='alternate' type='text/html' href='http://atejada.blogspot.com/2008/08/el-arte-de-programar-flex.html' title='El Arte de Programar - Flex'/><author><name>Alvaro "Blag" Tejada Galindo</name><uri>http://www.blogger.com/profile/12061593528820409779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='https://weblogs.sdn.sap.com/images/people/alvaro_tajeda.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_eKAKUbdu3CI/SLGs1yh4xsI/AAAAAAAAAks/BwH6vuZdI6E/s72-c/ArteFlex.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13698376.post-3010965344128056877</id><published>2008-08-21T10:50:00.000-07:00</published><updated>2008-08-21T10:53:28.745-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Misc'/><title type='text'>Mi entrevista en WhoHub...</title><content type='html'>&lt;DIV ALIGN="JUSTIFY"&gt;&lt;br /&gt;Hoy día recibí una invitación para llenar una entrevista en &lt;a href="http://www.whohub.com"&gt;WhoHub&lt;/a&gt; un directorio de entrevistas a profesionales.&lt;br /&gt;&lt;br /&gt;Así que si quieren saber un poco más de mi, visiten el enlace.&lt;br /&gt;&lt;br /&gt;&lt;DIV ALIGN="CENTER"&gt;&lt;a href="http://www.whohub.com/es/blag"&gt;Entrevista a Blag&lt;/a&gt;&lt;/DIV&gt;&lt;br /&gt;&lt;br /&gt;Saludos,&lt;br /&gt;&lt;br /&gt;Blag.&lt;br /&gt;&lt;/DIV&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13698376-3010965344128056877?l=atejada.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atejada.blogspot.com/feeds/3010965344128056877/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13698376&amp;postID=3010965344128056877' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/3010965344128056877'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/3010965344128056877'/><link rel='alternate' type='text/html' href='http://atejada.blogspot.com/2008/08/mi-entrevista-en-whohub.html' title='Mi entrevista en WhoHub...'/><author><name>Alvaro "Blag" Tejada Galindo</name><uri>http://www.blogger.com/profile/12061593528820409779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='https://weblogs.sdn.sap.com/images/people/alvaro_tajeda.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13698376.post-5184556445017868794</id><published>2008-08-14T13:59:00.000-07:00</published><updated>2008-08-14T14:48:41.047-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SDN'/><title type='text'>Demo Jam en Las Vegas TechEd 2008</title><content type='html'>&lt;DIV ALIGN="JUSTIFY"&gt;&lt;br /&gt;Usted saben que amo el TechEd...Amo el Community Day...I realmente amo el &lt;span style="font-weight:bold;"&gt;Demo Jam&lt;/span&gt;.&lt;br /&gt;Si no han ido a ningún TechEd y se están preguntando...¿Que es ese &lt;span style="font-weight:bold;"&gt;Demo Jam&lt;/span&gt;?&lt;br /&gt;&lt;br /&gt;La respuesta es muy sencilla...Los equipos muestran sus proyectos, la gente se sorprende y escogen a un ganador.&lt;br /&gt;&lt;br /&gt;El año pasado fué increíble con &lt;a href="https://www.sdn.sap.com/irj/sdn/weblogs?blog=/pub/wlg/7496"&gt;Majority Desk&lt;/a&gt;. Más información en &lt;a href="https://www.sdn.sap.com/irj/sdn/weblogs?blog=/pub/wlg/7495"&gt;Blag on TechEd (Las Vegas) - TechEd Day 1&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Este año, por su puesto que tenemos Demo Jam! Así que si van a Las Vegas, no se lo pueden perder!&lt;br /&gt;&lt;br /&gt;&lt;DIV ALIGN="CENTER"&gt;&lt;a href="http://twitpic.com/7ofw" target="_blank" title="Checkout lots of friends in the DJ ad in the onsite guide!  @... on TwitPic"&gt;&lt;img src="http://twitpic.com/show/thumb/7ofw.jpg" width="150" height="150" alt="Checkout lots of friends in the DJ ad in the onsite guide!  @... on TwitPic"&gt;&lt;/a&gt;&lt;/DIV&gt;&lt;br /&gt;Foto cortesía de &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=Ij3Jnvr4JMs%3D"&gt;Chip Rodgers&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Saludos,&lt;br /&gt;&lt;br /&gt;Blag.&lt;br /&gt;&lt;br /&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/sdn%20blogger" rel="tag"&gt;sdn blogger&lt;/a&gt;&lt;br /&gt;&lt;/DIV&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13698376-5184556445017868794?l=atejada.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atejada.blogspot.com/feeds/5184556445017868794/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13698376&amp;postID=5184556445017868794' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/5184556445017868794'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/5184556445017868794'/><link rel='alternate' type='text/html' href='http://atejada.blogspot.com/2008/08/demo-jam-en-las-vegas-teched-2008.html' title='Demo Jam en Las Vegas TechEd 2008'/><author><name>Alvaro "Blag" Tejada Galindo</name><uri>http://www.blogger.com/profile/12061593528820409779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='https://weblogs.sdn.sap.com/images/people/alvaro_tajeda.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13698376.post-5632853638481781334</id><published>2008-07-31T11:43:00.000-07:00</published><updated>2008-07-31T11:58:39.120-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Misc'/><title type='text'>Cuil...O como no hacer un buscador...</title><content type='html'>&lt;DIV ALIGN="JUSTIFY"&gt;&lt;br /&gt;Mucho se ha comentado sobre &lt;a href="http://www.cuil.com"&gt;Cuil&lt;/a&gt; en estos días...Y claro, yo no podía quedarme atrás -;)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.cuil.com"&gt;Cuil&lt;/a&gt; es un buscador web, de quien se dijo, estaba destinado a combatir contra &lt;a href="http://www.google.com"&gt;Google&lt;/a&gt;...Según lo que he leído, ha fallado terriblemente.&lt;br /&gt;&lt;br /&gt;Cual es mi opinión? &lt;a href="http://www.cuil.com"&gt;Cuil&lt;/a&gt; me parece bastante interesante, tiene conceptos nuevos, aunque ¿Quién puede competir con &lt;a href="http://www.google.com"&gt;Google&lt;/a&gt;?&lt;br /&gt;&lt;br /&gt;Veamos la presentación...Que me gusta bastante -:)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_eKAKUbdu3CI/SJIIx--IMeI/AAAAAAAAAj0/LTCCSDNJBrQ/s1600-h/Cuil_1.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp3.blogger.com/_eKAKUbdu3CI/SJIIx--IMeI/AAAAAAAAAj0/LTCCSDNJBrQ/s400/Cuil_1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5229251772140761570" /&gt;&lt;/a&gt;&lt;br /&gt;Ahora, busquemos por ejemplo &lt;span style="font-weight:bold;"&gt;SAP&lt;/span&gt;...&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_eKAKUbdu3CI/SJII8seqTuI/AAAAAAAAAj8/7BfXS5GC2EQ/s1600-h/Cuil_3.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_eKAKUbdu3CI/SJII8seqTuI/AAAAAAAAAj8/7BfXS5GC2EQ/s400/Cuil_3.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5229251956155502306" /&gt;&lt;/a&gt;&lt;br /&gt;Hasta ahora todo se ve bien...Aunque la imagen que se muestra de &lt;span style="font-weight:bold;"&gt;SAP&lt;/span&gt; no tiene nada que ver con &lt;span style="font-weight:bold;"&gt;SAP&lt;/span&gt;...Sin importar que realmente pertenezca a &lt;span style="font-weight:bold;"&gt;SAP&lt;/span&gt;, lo ideal habría sido mostrar un logo, ¿No creen?&lt;br /&gt;Entonces, ahora vamos a la parte peligrosa de este buscador...&lt;br /&gt;Busquemos a mi buen amigo &lt;span style="font-weight:bold;"&gt;Nigel James&lt;/span&gt;...&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_eKAKUbdu3CI/SJIJqgTqTJI/AAAAAAAAAkE/ky1BRPhCjv4/s1600-h/Cuil_2.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_eKAKUbdu3CI/SJIJqgTqTJI/AAAAAAAAAkE/ky1BRPhCjv4/s400/Cuil_2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5229252743162121362" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;¿Todo parece estar bien no? Pues no! Esa foto no es de &lt;span style="font-weight:bold;"&gt;Nigel&lt;/span&gt;...Ni siquiera se parecen ni son parientes...Este es realmente el buen &lt;span style="font-weight:bold;"&gt;Nigel&lt;/span&gt;...&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_eKAKUbdu3CI/SJIKQTCv8sI/AAAAAAAAAkM/IJkCNLYhrbc/s1600-h/Nigel_James.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_eKAKUbdu3CI/SJIKQTCv8sI/AAAAAAAAAkM/IJkCNLYhrbc/s400/Nigel_James.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5229253392436556482" /&gt;&lt;/a&gt;&lt;br /&gt;Por si fuera poco...Hasta hace algunos días, cuando buscamos &lt;span style="font-weight:bold;"&gt;Cuil&lt;/span&gt; en &lt;br /&gt;&lt;a href="http://www.cuil.com"&gt;Cuil&lt;/a&gt; no se encontraban resultados...Felizmente para ellos, estos ya está corregido...&lt;br /&gt;&lt;br /&gt;Y como seguramente estaban esperando esto...Veamos que pasa cuando buscamos Alvaro Tejada Galindo...&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_eKAKUbdu3CI/SJIK5XUaJgI/AAAAAAAAAkU/zKslWBPU3pU/s1600-h/Cuil_4.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp3.blogger.com/_eKAKUbdu3CI/SJIK5XUaJgI/AAAAAAAAAkU/zKslWBPU3pU/s400/Cuil_4.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5229254097959003650" /&gt;&lt;/a&gt;&lt;br /&gt;Ese si soy yo -;)&lt;br /&gt;&lt;br /&gt;Saludos,&lt;br /&gt;&lt;br /&gt;Blag.&lt;br /&gt;&lt;/DIV&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13698376-5632853638481781334?l=atejada.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atejada.blogspot.com/feeds/5632853638481781334/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13698376&amp;postID=5632853638481781334' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/5632853638481781334'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/5632853638481781334'/><link rel='alternate' type='text/html' href='http://atejada.blogspot.com/2008/07/cuilo-como-no-hacer-un-buscador.html' title='Cuil...O como no hacer un buscador...'/><author><name>Alvaro "Blag" Tejada Galindo</name><uri>http://www.blogger.com/profile/12061593528820409779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='https://weblogs.sdn.sap.com/images/people/alvaro_tajeda.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_eKAKUbdu3CI/SJIIx--IMeI/AAAAAAAAAj0/LTCCSDNJBrQ/s72-c/Cuil_1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13698376.post-1248678121261314673</id><published>2008-07-13T11:46:00.000-07:00</published><updated>2008-07-13T11:53:33.008-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Misc'/><category scheme='http://www.blogger.com/atom/ns#' term='ABAP'/><title type='text'>Nuevo libro...El pequeño libro del Performance</title><content type='html'>&lt;DIV ALIGN="JUSTIFY"&gt;&lt;br /&gt;Ayer publiqué un nuevo libro en &lt;a href="http://www.lulu.com"&gt;Lulu.com&lt;/a&gt; llamado &lt;a href="http://www.lulu.com/content/3069476"&gt;El pequeño libro del Performance&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_eKAKUbdu3CI/SHpPAODaCMI/AAAAAAAAAjU/gD1zGfLbJL4/s1600-h/Libro_Performance.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp2.blogger.com/_eKAKUbdu3CI/SHpPAODaCMI/AAAAAAAAAjU/gD1zGfLbJL4/s400/Libro_Performance.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5222573583080491202" /&gt;&lt;/a&gt;&lt;br /&gt;El libro es para Performance en SAP NetWeaver.&lt;br /&gt;&lt;br /&gt;Saludos,&lt;br /&gt;&lt;br /&gt;Blag.&lt;br /&gt;&lt;/DIV&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13698376-1248678121261314673?l=atejada.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atejada.blogspot.com/feeds/1248678121261314673/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13698376&amp;postID=1248678121261314673' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/1248678121261314673'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/1248678121261314673'/><link rel='alternate' type='text/html' href='http://atejada.blogspot.com/2008/07/nuevo-libroel-pequeo-libro-del.html' title='Nuevo libro...El pequeño libro del Performance'/><author><name>Alvaro "Blag" Tejada Galindo</name><uri>http://www.blogger.com/profile/12061593528820409779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='https://weblogs.sdn.sap.com/images/people/alvaro_tajeda.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_eKAKUbdu3CI/SHpPAODaCMI/AAAAAAAAAjU/gD1zGfLbJL4/s72-c/Libro_Performance.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13698376.post-5492978231466347592</id><published>2008-07-12T07:45:00.000-07:00</published><updated>2008-07-12T07:52:57.366-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Misc'/><title type='text'>Identi.ca...El nuevo Twitter</title><content type='html'>&lt;DIV ALIGN="JUSTIFY"&gt;&lt;br /&gt;Luego de la salida de &lt;a href="http://www.twitter.com"&gt;Twitter&lt;/a&gt;...Muchos servicios han querido quitarle el reinado...aunque no con mucho éxito...&lt;br /&gt;&lt;br /&gt;El turno le toca ahora a &lt;a href="http://www.indeti.ca"&gt;Identi.ca&lt;/a&gt;, un servicio que siendo sinceros...Es un &lt;a href="http://www.twitter.com"&gt;Twitter&lt;/a&gt; con menos gente y sin caídas (Que es lo más importante).&lt;br /&gt;&lt;br /&gt;El problema que tiene, es que no mucha gente lo conoce...por lo tanto, no mucha gente lo usa...Aunque a mi modo de ver, es bastante estable.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_eKAKUbdu3CI/SHjEngkeUKI/AAAAAAAAAjE/pW4pMdgTh_Y/s1600-h/Indentica_01.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp2.blogger.com/_eKAKUbdu3CI/SHjEngkeUKI/AAAAAAAAAjE/pW4pMdgTh_Y/s400/Indentica_01.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5222139950972948642" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_eKAKUbdu3CI/SHjE4NFy2RI/AAAAAAAAAjM/KJ09V57DP48/s1600-h/Indentica_02.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_eKAKUbdu3CI/SHjE4NFy2RI/AAAAAAAAAjM/KJ09V57DP48/s400/Indentica_02.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5222140237801773330" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;La verdad es que no hay mucho que decir...&lt;a href="http://www.indeti.ca"&gt;Identi.ca&lt;/a&gt; está comenzando...Y yo le auguro un buen futuro -;)&lt;br /&gt;&lt;br /&gt;Saludos,&lt;br /&gt;&lt;br /&gt;Blag.&lt;br /&gt;&lt;/DIV&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13698376-5492978231466347592?l=atejada.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atejada.blogspot.com/feeds/5492978231466347592/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13698376&amp;postID=5492978231466347592' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/5492978231466347592'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/5492978231466347592'/><link rel='alternate' type='text/html' href='http://atejada.blogspot.com/2008/07/identicael-nuevo-twitter.html' title='Identi.ca...El nuevo Twitter'/><author><name>Alvaro "Blag" Tejada Galindo</name><uri>http://www.blogger.com/profile/12061593528820409779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='https://weblogs.sdn.sap.com/images/people/alvaro_tajeda.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_eKAKUbdu3CI/SHjEngkeUKI/AAAAAAAAAjE/pW4pMdgTh_Y/s72-c/Indentica_01.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13698376.post-3462447328416952612</id><published>2008-06-27T09:26:00.000-07:00</published><updated>2008-06-27T10:06:09.652-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Misc'/><title type='text'>TinyPaste....TinyUrl para tweets</title><content type='html'>&lt;DIV ALIGN="JUSTIFY"&gt;&lt;br /&gt;&lt;a href="http://www.tinypaste.com"&gt;TinyPaste&lt;/a&gt; es un servicio que a diferencia de &lt;a href="http://www.tinyurl.com"&gt;TinyUrl&lt;/a&gt; que sirve para crear versiones cortas de links largos...Nos permite crear versiones cortas de Textos largos para Twitter, con lo cual podemos sobrepasar el límite de 140 caracteres permitidos.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_eKAKUbdu3CI/SGUduP-6FuI/AAAAAAAAAiM/6aLQTx_psYY/s1600-h/TinyPaste_01.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp1.blogger.com/_eKAKUbdu3CI/SGUduP-6FuI/AAAAAAAAAiM/6aLQTx_psYY/s400/TinyPaste_01.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5216608423780161250" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_eKAKUbdu3CI/SGUdyb6F_5I/AAAAAAAAAiU/fVGDuFEv-1A/s1600-h/TinyPaste_02.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp1.blogger.com/_eKAKUbdu3CI/SGUdyb6F_5I/AAAAAAAAAiU/fVGDuFEv-1A/s400/TinyPaste_02.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5216608495700672402" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_eKAKUbdu3CI/SGUd2HbA1iI/AAAAAAAAAic/H5fwkEi0y0s/s1600-h/TinyPaste_03.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp3.blogger.com/_eKAKUbdu3CI/SGUd2HbA1iI/AAAAAAAAAic/H5fwkEi0y0s/s400/TinyPaste_03.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5216608558921078306" /&gt;&lt;/a&gt;&lt;br /&gt;Saludos,&lt;br /&gt;&lt;br /&gt;Blag.&lt;br /&gt;&lt;/DIV&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13698376-3462447328416952612?l=atejada.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atejada.blogspot.com/feeds/3462447328416952612/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13698376&amp;postID=3462447328416952612' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/3462447328416952612'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/3462447328416952612'/><link rel='alternate' type='text/html' href='http://atejada.blogspot.com/2008/06/tinypastetinyurl-para-tweets.html' title='TinyPaste....TinyUrl para tweets'/><author><name>Alvaro "Blag" Tejada Galindo</name><uri>http://www.blogger.com/profile/12061593528820409779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='https://weblogs.sdn.sap.com/images/people/alvaro_tajeda.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_eKAKUbdu3CI/SGUduP-6FuI/AAAAAAAAAiM/6aLQTx_psYY/s72-c/TinyPaste_01.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13698376.post-7536337883393432899</id><published>2008-06-25T08:24:00.000-07:00</published><updated>2008-06-25T08:32:36.534-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Misc'/><category scheme='http://www.blogger.com/atom/ns#' term='FLEX'/><title type='text'>Spaz...Un cliente AIR para Twitter</title><content type='html'>&lt;DIV ALIGN="JUSTIFY"&gt;&lt;br /&gt;Como todos saben...Me encantan &lt;a href="http://www.adobe.com/Flex"&gt;Flex&lt;/a&gt; y &lt;a href="http://www.twitter.com"&gt;Twitter&lt;/a&gt;...Así que cuando veo un cliente de &lt;a href="http://www.twitter.com"&gt;Twitter&lt;/a&gt; hecho en &lt;a href="http://www.adobe.com/products/air/"&gt;AIR&lt;/a&gt;, no puedo hacer otra cosa más que descargarlo y testearlo -;)&lt;br /&gt;&lt;br /&gt;Esta vez le tocó el turno a &lt;a href="http://funkatron.com/spaz"&gt;Spaz&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_eKAKUbdu3CI/SGJjz01mMzI/AAAAAAAAAhE/EGj6evXkgQ8/s1600-h/Spaz_01.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp1.blogger.com/_eKAKUbdu3CI/SGJjz01mMzI/AAAAAAAAAhE/EGj6evXkgQ8/s400/Spaz_01.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5215841060456379186" /&gt;&lt;/a&gt;&lt;br /&gt;En lo personal el diseño me gusta bastante...Además de que tiene una interesante opción de ver a tus amigos y acceder a los blogs que hayan registrado...&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_eKAKUbdu3CI/SGJkeFr3soI/AAAAAAAAAhM/WO752EzsxCQ/s1600-h/Spaz_02.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp3.blogger.com/_eKAKUbdu3CI/SGJkeFr3soI/AAAAAAAAAhM/WO752EzsxCQ/s400/Spaz_02.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5215841786533491330" /&gt;&lt;/a&gt;&lt;br /&gt;Las opciones no están tan visibles como me gustaría, pero es un detalle que no importa, puesto que el programa cumple con su deber...Y dato curioso...La opción de Replies estaba inactiva en &lt;a href="http://www.twitter.com"&gt;Twitter&lt;/a&gt; mientras que en &lt;a href="http://funkatron.com/spaz"&gt;Spaz&lt;/a&gt; funcionaba correctamente...&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_eKAKUbdu3CI/SGJk6QzvElI/AAAAAAAAAhU/CwKp1zg727M/s1600-h/Spaz_03.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_eKAKUbdu3CI/SGJk6QzvElI/AAAAAAAAAhU/CwKp1zg727M/s400/Spaz_03.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5215842270555607634" /&gt;&lt;/a&gt;&lt;br /&gt;Saludos,&lt;br /&gt;&lt;br /&gt;Blag.&lt;br /&gt;&lt;/DIV&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13698376-7536337883393432899?l=atejada.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atejada.blogspot.com/feeds/7536337883393432899/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13698376&amp;postID=7536337883393432899' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/7536337883393432899'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/7536337883393432899'/><link rel='alternate' type='text/html' href='http://atejada.blogspot.com/2008/06/spazun-cliente-air-para-twitter.html' title='Spaz...Un cliente AIR para Twitter'/><author><name>Alvaro "Blag" Tejada Galindo</name><uri>http://www.blogger.com/profile/12061593528820409779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='https://weblogs.sdn.sap.com/images/people/alvaro_tajeda.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_eKAKUbdu3CI/SGJjz01mMzI/AAAAAAAAAhE/EGj6evXkgQ8/s72-c/Spaz_01.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13698376.post-3925709969317336138</id><published>2008-06-25T07:54:00.000-07:00</published><updated>2008-06-25T08:21:23.982-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Misc'/><category scheme='http://www.blogger.com/atom/ns#' term='FLEX'/><title type='text'>Smilebox...Invitaciones al estilo Flex...</title><content type='html'>&lt;DIV ALIGN="JUSTIFY"&gt;&lt;br /&gt;Nuevamente nos encontramos con un servicio basado el &lt;a href="http://www.adobe.com/Flex"&gt;Flex&lt;/a&gt;...Se trata de &lt;a href="http://smilebox.com/"&gt;Smilebox&lt;/a&gt;, un servicio para crear invitaciones, presentaciones, y muchas cosas más...&lt;br /&gt;El instalador no pesa practicamente nada, puesto que que cada vez que lo ejecutamos, nos conectamos a internet para hacer las actualizaciones necesarias y llamar a la interface.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_eKAKUbdu3CI/SGJdV7HjPTI/AAAAAAAAAgM/E21gsvrAJkw/s1600-h/SmileBox_01.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp2.blogger.com/_eKAKUbdu3CI/SGJdV7HjPTI/AAAAAAAAAgM/E21gsvrAJkw/s400/SmileBox_01.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5215833949676453170" /&gt;&lt;/a&gt;&lt;br /&gt;Lo primero que debemos hacer, es obviamente crear un usuario para poder comenzar a trabajar...&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_eKAKUbdu3CI/SGJdikLeaeI/AAAAAAAAAgU/0P_7JI4tgVY/s1600-h/SmileBox_02.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_eKAKUbdu3CI/SGJdikLeaeI/AAAAAAAAAgU/0P_7JI4tgVY/s400/SmileBox_02.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5215834166857198050" /&gt;&lt;/a&gt;&lt;br /&gt;Una vez que estamos listo, debemos escoger el tipo de invitación que quremos crear (Tenemos multiples plantillas disponibles).&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_eKAKUbdu3CI/SGJhO3JFDHI/AAAAAAAAAgc/26dLfvI5ayo/s1600-h/SmileBox_03.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_eKAKUbdu3CI/SGJhO3JFDHI/AAAAAAAAAgc/26dLfvI5ayo/s400/SmileBox_03.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5215838226396548210" /&gt;&lt;/a&gt;&lt;br /&gt;Cuando sabemos que invitación queremos crear...debemos agregar las imágines, videos o sonidos...&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_eKAKUbdu3CI/SGJhoNuwUVI/AAAAAAAAAgk/ul-OXty2Xv4/s1600-h/SmileBox_04.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_eKAKUbdu3CI/SGJhoNuwUVI/AAAAAAAAAgk/ul-OXty2Xv4/s400/SmileBox_04.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5215838661956882770" /&gt;&lt;/a&gt;&lt;br /&gt;Cuando terminamos, podemos customizar nuestra invitación...&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_eKAKUbdu3CI/SGJh0-eZyQI/AAAAAAAAAgs/RfRfJ1xqzEs/s1600-h/SmileBox_05.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_eKAKUbdu3CI/SGJh0-eZyQI/AAAAAAAAAgs/RfRfJ1xqzEs/s400/SmileBox_05.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5215838881200064770" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_eKAKUbdu3CI/SGJh8w8CdGI/AAAAAAAAAg0/ivkQdDOBaTg/s1600-h/SmileBox_06.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp1.blogger.com/_eKAKUbdu3CI/SGJh8w8CdGI/AAAAAAAAAg0/ivkQdDOBaTg/s400/SmileBox_06.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5215839015005221986" /&gt;&lt;/a&gt;&lt;br /&gt;Una vez que hemos terminado, podemos enviar nuestra invitación por mail, postearla a nuestro blog, imprimirla o grabarla como imagen.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_eKAKUbdu3CI/SGJiPPC6i2I/AAAAAAAAAg8/cmpGKgePXpk/s1600-h/SmileBox_07.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp2.blogger.com/_eKAKUbdu3CI/SGJiPPC6i2I/AAAAAAAAAg8/cmpGKgePXpk/s400/SmileBox_07.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5215839332324772706" /&gt;&lt;/a&gt;&lt;br /&gt;No se ustedes...Pero yo definitivamente voy a usar esto para el primer cumpleaños de mi hijita -;)&lt;br /&gt;&lt;br /&gt;Saludos,&lt;br /&gt;&lt;br /&gt;Blag.&lt;br /&gt;&lt;/DIV&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13698376-3925709969317336138?l=atejada.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atejada.blogspot.com/feeds/3925709969317336138/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13698376&amp;postID=3925709969317336138' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/3925709969317336138'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/3925709969317336138'/><link rel='alternate' type='text/html' href='http://atejada.blogspot.com/2008/06/smileboxinvitaciones-al-estilo-flex.html' title='Smilebox...Invitaciones al estilo Flex...'/><author><name>Alvaro "Blag" Tejada Galindo</name><uri>http://www.blogger.com/profile/12061593528820409779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='https://weblogs.sdn.sap.com/images/people/alvaro_tajeda.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_eKAKUbdu3CI/SGJdV7HjPTI/AAAAAAAAAgM/E21gsvrAJkw/s72-c/SmileBox_01.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13698376.post-6453769026328875944</id><published>2008-06-25T07:35:00.000-07:00</published><updated>2008-06-25T07:52:40.675-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Misc'/><category scheme='http://www.blogger.com/atom/ns#' term='FLEX'/><title type='text'>SearchMe....Segundo round...</title><content type='html'>&lt;DIV ALIGN="JUSTIFY"&gt;&lt;br /&gt;Hace algún tiempo escribí un post sobre &lt;a href="http://atejada.blogspot.com/2008/04/searchmeredifiniendo-las-bsquedas-web.html"&gt;SearchMe&lt;/a&gt;,  un servicio basado en Flex, que nos permite buscar en la web de una manera totalmente innovadora...Desde esa vez hasta ahora, muchas cosas han cambiado...Aunque hay algunas otras que sigen igual -:(&lt;br /&gt;&lt;br /&gt;Por ejemplo...Busquemos &lt;span style="font-weight:bold;"&gt;Blag&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_eKAKUbdu3CI/SGJYS8hQPpI/AAAAAAAAAfc/Ir2Hd0CvXTI/s1600-h/SearchMe_2_01.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp3.blogger.com/_eKAKUbdu3CI/SGJYS8hQPpI/AAAAAAAAAfc/Ir2Hd0CvXTI/s400/SearchMe_2_01.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5215828400954949266" /&gt;&lt;/a&gt;&lt;br /&gt;Vamos a encontrar muchas cosas, pero ninguna relacionada conmigo -:'(&lt;br /&gt;Entonces...Busquemos solamente en blogs...&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_eKAKUbdu3CI/SGJYjwSltjI/AAAAAAAAAfk/f2CWR9rcWSw/s1600-h/SearchMe_2_02.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_eKAKUbdu3CI/SGJYjwSltjI/AAAAAAAAAfk/f2CWR9rcWSw/s400/SearchMe_2_02.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5215828689729992242" /&gt;&lt;/a&gt;&lt;br /&gt;Seguimos sin suerte... -:'(&lt;br /&gt;Busquemos ahora Alvaro Tejada...La tercera va la vencida dicen por ahí -;)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_eKAKUbdu3CI/SGJY0EukE-I/AAAAAAAAAfs/MseVaFJt5b0/s1600-h/SearchMe_2_03.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_eKAKUbdu3CI/SGJY0EukE-I/AAAAAAAAAfs/MseVaFJt5b0/s400/SearchMe_2_03.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5215828970093941730" /&gt;&lt;/a&gt;&lt;br /&gt;Finalmente! Encontramos que las dos primeras entradas tienen relación conmigo -;)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_eKAKUbdu3CI/SGJY7Ai4kgI/AAAAAAAAAf0/tZV3sd9iqrE/s1600-h/SearchMe_2_04.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_eKAKUbdu3CI/SGJY7Ai4kgI/AAAAAAAAAf0/tZV3sd9iqrE/s400/SearchMe_2_04.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5215829089230295554" /&gt;&lt;/a&gt;&lt;br /&gt;Ahora...Supongamos que queremos (Ok...Yo quiero -:P) guardar un enlace directo a mi página en &lt;a href="http://www.lulu.com/Blag"&gt;Lulu.com&lt;/a&gt;.&lt;br /&gt;Para esto, debemos crear un stack...Que aunque se ve como una gran idea...Solo funciona mientras no limpiemos el buffer de Flash...Ok...Hay un tema de seguridad dentro de esto...Pero sigue sin convencerme mucho...&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_eKAKUbdu3CI/SGJZkxklexI/AAAAAAAAAf8/xi9iD62useA/s1600-h/SearchMe_2_05.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_eKAKUbdu3CI/SGJZkxklexI/AAAAAAAAAf8/xi9iD62useA/s400/SearchMe_2_05.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5215829806765406994" /&gt;&lt;/a&gt;&lt;br /&gt;Cuando agregamos el stack...No damos cuenta de algo que yo indiqué al equipo de &lt;a href="http://www.searchme.com"&gt;SearchMe&lt;/a&gt; en su momento...Y que hasta ahora no me han hecho caso -:(&lt;br /&gt;&lt;br /&gt;1.- No hay búsqueda para páginas en Español.&lt;br /&gt;2.- El indexado aún es muy lento.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_eKAKUbdu3CI/SGJZ-bFXUrI/AAAAAAAAAgE/ZUqOfqz80WA/s1600-h/SearchMe_2_06.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_eKAKUbdu3CI/SGJZ-bFXUrI/AAAAAAAAAgE/ZUqOfqz80WA/s400/SearchMe_2_06.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5215830247405474482" /&gt;&lt;/a&gt;&lt;br /&gt;De todos modos, sigue siendo un excelente servicio y sobre todo muy creativo -;)&lt;br /&gt;&lt;br /&gt;Saludos,&lt;br /&gt;&lt;br /&gt;Blag.&lt;br /&gt;&lt;/DIV&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13698376-6453769026328875944?l=atejada.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atejada.blogspot.com/feeds/6453769026328875944/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13698376&amp;postID=6453769026328875944' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/6453769026328875944'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/6453769026328875944'/><link rel='alternate' type='text/html' href='http://atejada.blogspot.com/2008/06/searchmesegundo-round.html' title='SearchMe....Segundo round...'/><author><name>Alvaro "Blag" Tejada Galindo</name><uri>http://www.blogger.com/profile/12061593528820409779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='https://weblogs.sdn.sap.com/images/people/alvaro_tajeda.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_eKAKUbdu3CI/SGJYS8hQPpI/AAAAAAAAAfc/Ir2Hd0CvXTI/s72-c/SearchMe_2_01.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13698376.post-8805200462494058782</id><published>2008-06-25T07:31:00.000-07:00</published><updated>2008-06-25T07:35:29.470-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Misc'/><title type='text'>Hellotxt...Micro blogging en batch...</title><content type='html'>&lt;DIV ALIGN="JUSTIFY"&gt;&lt;br /&gt;El otro día me inscribí en &lt;a href="http://www.hellotxt.com"&gt;Hellotxt&lt;/a&gt; un servicio que nos permite publicar post en un gran número de servicio de Micro blogging.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_eKAKUbdu3CI/SGJXJPVvfoI/AAAAAAAAAfE/8f94PuCLFic/s1600-h/Hellotxt_02.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp3.blogger.com/_eKAKUbdu3CI/SGJXJPVvfoI/AAAAAAAAAfE/8f94PuCLFic/s400/Hellotxt_02.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5215827134696619650" /&gt;&lt;/a&gt;&lt;br /&gt;Como ven, podemos elegir los servicios en los cuales queremos postear, y así no tener que estar ingresando a cada uno de ellos...Un gran servicio si me lo preguntan -;)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_eKAKUbdu3CI/SGJXg3Hgt0I/AAAAAAAAAfU/0E8V93Cyo8w/s1600-h/Hellotxt_01.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp3.blogger.com/_eKAKUbdu3CI/SGJXg3Hgt0I/AAAAAAAAAfU/0E8V93Cyo8w/s400/Hellotxt_01.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5215827540511340354" /&gt;&lt;/a&gt;&lt;br /&gt;Saludos,&lt;br /&gt;&lt;br /&gt;Blag.&lt;br /&gt;&lt;/DIV&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13698376-8805200462494058782?l=atejada.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atejada.blogspot.com/feeds/8805200462494058782/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13698376&amp;postID=8805200462494058782' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/8805200462494058782'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/8805200462494058782'/><link rel='alternate' type='text/html' href='http://atejada.blogspot.com/2008/06/hellotxtmicro-blogging-en-batch.html' title='Hellotxt...Micro blogging en batch...'/><author><name>Alvaro "Blag" Tejada Galindo</name><uri>http://www.blogger.com/profile/12061593528820409779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='https://weblogs.sdn.sap.com/images/people/alvaro_tajeda.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_eKAKUbdu3CI/SGJXJPVvfoI/AAAAAAAAAfE/8f94PuCLFic/s72-c/Hellotxt_02.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13698376.post-8872215297164032027</id><published>2008-06-20T19:31:00.000-07:00</published><updated>2008-06-20T19:37:03.390-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SDN'/><category scheme='http://www.blogger.com/atom/ns#' term='Misc'/><title type='text'>Mi nuevo blog...Blag's bag of rants</title><content type='html'>&lt;DIV ALIGN="JUSTIFY"&gt;&lt;br /&gt;Desde hace mucho tiempo quería empezar un nuevo blog...Así que ayer &lt;a href="http://blagrants.blogspot.com"&gt;Blag's bag of rants&lt;/a&gt; vió la luz... -:)&lt;br /&gt;&lt;br /&gt;Cuál es la idea de este nuevo blog? Bueno...Simplemente se trata de posts que pienso que no deberían ir en el &lt;a href="http://tinyurl.com/jnlfd"&gt;SCN&lt;/a&gt; ni mi &lt;a href="http://atejada.blogspot.com/"&gt;blog tecnológico&lt;/a&gt;...Ademas...El blog va a estar en Inglés.&lt;br /&gt;&lt;br /&gt;Si bien voy a seguir hablando sobre SAP, Tecnologías y Lenguajes Script en mi nuevo blog...Voy a hablar de esos temas de un punto de vista distinto...Ya verán a que me refiero cuando lean los posts -;)&lt;br /&gt;&lt;br /&gt;Claro...No significa que voy a dejar de postear en mis otros blogs...Aunque claro, no con mucha frecuencia...Porque mantener tres blogs es un poco complicado...&lt;br /&gt;&lt;br /&gt;Espero que les guste! -:D&lt;br /&gt;&lt;br /&gt;Saludos,&lt;br /&gt;&lt;br /&gt;Blag.&lt;br /&gt;&lt;/DIV&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13698376-8872215297164032027?l=atejada.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atejada.blogspot.com/feeds/8872215297164032027/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13698376&amp;postID=8872215297164032027' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/8872215297164032027'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/8872215297164032027'/><link rel='alternate' type='text/html' href='http://atejada.blogspot.com/2008/06/mi-nuevo-blogblags-bag-of-rants.html' title='Mi nuevo blog...Blag&apos;s bag of rants'/><author><name>Alvaro "Blag" Tejada Galindo</name><uri>http://www.blogger.com/profile/12061593528820409779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='https://weblogs.sdn.sap.com/images/people/alvaro_tajeda.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13698376.post-8514613245898444882</id><published>2008-06-15T17:39:00.000-07:00</published><updated>2008-06-15T18:28:29.982-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Misc'/><category scheme='http://www.blogger.com/atom/ns#' term='FLEX'/><category scheme='http://www.blogger.com/atom/ns#' term='GAMES'/><title type='text'>ToonDoo...Crea tus comics en la web...</title><content type='html'>&lt;DIV ALIGN="JUSTIFY"&gt;&lt;br /&gt;Siempre has querido hacer comics...pero no sabes dibujar? No te preocupes, yo tampoco...jejeje...Con &lt;a href="http://www.toondoo.com/"&gt;ToonDoo&lt;/a&gt; todos podemos ser artistas -;)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_eKAKUbdu3CI/SFW-ZdvXUnI/AAAAAAAAAdg/FDcqi8L1Kso/s1600-h/ToonDoo_01.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp3.blogger.com/_eKAKUbdu3CI/SFW-ZdvXUnI/AAAAAAAAAdg/FDcqi8L1Kso/s400/ToonDoo_01.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5212281488440513138" /&gt;&lt;/a&gt;&lt;br /&gt;Primero debemos escoger como va a ser el formato de nuestro comic.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_eKAKUbdu3CI/SFW-gAETHcI/AAAAAAAAAdo/q66B1wj3BPk/s1600-h/ToonDoo_02.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp2.blogger.com/_eKAKUbdu3CI/SFW-gAETHcI/AAAAAAAAAdo/q66B1wj3BPk/s400/ToonDoo_02.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5212281600734338498" /&gt;&lt;/a&gt;&lt;br /&gt;Luego, debemos escoger a los personajes de nuestra historia.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_eKAKUbdu3CI/SFW-mLPx4ZI/AAAAAAAAAdw/mo3Hvry9tj4/s1600-h/ToonDoo_03.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_eKAKUbdu3CI/SFW-mLPx4ZI/AAAAAAAAAdw/mo3Hvry9tj4/s400/ToonDoo_03.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5212281706814497170" /&gt;&lt;/a&gt;&lt;br /&gt;Escogemos un fondo acorde a la historia...O bueno, no tan acorde... -;)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_eKAKUbdu3CI/SFW-r_zKuLI/AAAAAAAAAd4/HSx9Eoky37c/s1600-h/ToonDoo_04.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_eKAKUbdu3CI/SFW-r_zKuLI/AAAAAAAAAd4/HSx9Eoky37c/s400/ToonDoo_04.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5212281806820915378" /&gt;&lt;/a&gt;&lt;br /&gt;Incluimos el texto de los personajes...&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_eKAKUbdu3CI/SFW-y1ZzEuI/AAAAAAAAAeA/sGqnEWVOGUo/s1600-h/ToonDoo_06.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp1.blogger.com/_eKAKUbdu3CI/SFW-y1ZzEuI/AAAAAAAAAeA/sGqnEWVOGUo/s400/ToonDoo_06.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5212281924289237730" /&gt;&lt;/a&gt;&lt;br /&gt;Inclusive podemos crear nuevos personajes o incluso modificar personajes ya existentes...&lt;br /&gt;&lt;p style="overflow: auto; padding-right: 5px; width: 770px; height: 340px;"&gt;&lt;a href="http://www.toondoo.com/View.toon?param=288276"&gt;&lt;img src="http://www.toondoo.com//public/b/l/a/Blag/toons/cool-cartoon-288276.png" border="0" alt="\bLOG_OF_BLAG\" title="\bLOG_OF_BLAG\" longdesc="\bLOG!\"&gt;&lt;/a&gt;&lt;/p&gt;Este comic es para promocionar mi blog... -:)&lt;br /&gt;&lt;br /&gt;Saludos,&lt;br /&gt;&lt;br /&gt;Blag.&lt;br /&gt;&lt;/DIV&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13698376-8514613245898444882?l=atejada.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atejada.blogspot.com/feeds/8514613245898444882/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13698376&amp;postID=8514613245898444882' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/8514613245898444882'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/8514613245898444882'/><link rel='alternate' type='text/html' href='http://atejada.blogspot.com/2008/06/toondoocrea-tus-comics-en-la-web.html' title='ToonDoo...Crea tus comics en la web...'/><author><name>Alvaro "Blag" Tejada Galindo</name><uri>http://www.blogger.com/profile/12061593528820409779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='https://weblogs.sdn.sap.com/images/people/alvaro_tajeda.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_eKAKUbdu3CI/SFW-ZdvXUnI/AAAAAAAAAdg/FDcqi8L1Kso/s72-c/ToonDoo_01.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13698376.post-777946828557608906</id><published>2008-06-14T13:23:00.000-07:00</published><updated>2008-06-14T13:35:12.444-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Misc'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>Pwytter - Un cliente Twitter hecho en Python</title><content type='html'>&lt;DIV ALIGN="JUSTIFY"&gt;&lt;br /&gt;Estaba buscando clientes Twitter para probar, puesto que el &lt;a href="http://www.tweet-r.com"&gt;Tweetr&lt;/a&gt; dejó de funcionar en mi laptop por alguna razón...Y desde hace meses no me preocupo por ver si ya funciona -:P&lt;br /&gt;&lt;br /&gt;En fín...Estaba buscando y encontré uno bastante interesante llamado &lt;a href="http://www.pwytter.com/"&gt;Pwytter&lt;/a&gt;. Lo primero que me llamó la atención es que estaba hecho en &lt;a href="http://www.python.org"&gt;Python&lt;/a&gt;, un lenguaje que quiero continuar aprendiendo (Se lo básico...muy básico) desde hace tiempo...&lt;br /&gt;&lt;br /&gt;Primero debemos configurarlo...&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_eKAKUbdu3CI/SFQqOo6pFDI/AAAAAAAAAdQ/MggDZZitYGU/s1600-h/Pwytter_2.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp1.blogger.com/_eKAKUbdu3CI/SFQqOo6pFDI/AAAAAAAAAdQ/MggDZZitYGU/s400/Pwytter_2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5211837099764421682" /&gt;&lt;/a&gt;&lt;br /&gt;Y luego leer y escribir Tweets...&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_eKAKUbdu3CI/SFQqinRaDEI/AAAAAAAAAdY/TfpYTyv3EhA/s1600-h/Pwytter_1.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp2.blogger.com/_eKAKUbdu3CI/SFQqinRaDEI/AAAAAAAAAdY/TfpYTyv3EhA/s400/Pwytter_1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5211837442920418370" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Cual es la gran desventaja de este pequeño cliente? Pues que no te permite navegar hacia Tweets pasados...Además de que todo se ve muy hacinado...En fín...es interesante para probarlo, escribir un par de Tweets...Y esperar a que lancen una nueva versión -:)&lt;br /&gt;&lt;br /&gt;Saludos,&lt;br /&gt;&lt;br /&gt;Blag.&lt;br /&gt;&lt;/DIV&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13698376-777946828557608906?l=atejada.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atejada.blogspot.com/feeds/777946828557608906/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13698376&amp;postID=777946828557608906' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/777946828557608906'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/777946828557608906'/><link rel='alternate' type='text/html' href='http://atejada.blogspot.com/2008/06/pwytter-un-cliente-twitter-hecho-en.html' title='Pwytter - Un cliente Twitter hecho en Python'/><author><name>Alvaro "Blag" Tejada Galindo</name><uri>http://www.blogger.com/profile/12061593528820409779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='https://weblogs.sdn.sap.com/images/people/alvaro_tajeda.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_eKAKUbdu3CI/SFQqOo6pFDI/AAAAAAAAAdQ/MggDZZitYGU/s72-c/Pwytter_2.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13698376.post-8758490104470941393</id><published>2008-06-14T12:48:00.001-07:00</published><updated>2008-06-14T13:22:36.459-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Misc'/><title type='text'>Opera 9.5</title><content type='html'>&lt;div align="justify"&gt;&lt;br /&gt;Hace un tiempo, poste&amp;#233; sobre &lt;a href="http://atejada.blogspot.com/2007/10/jugando-con-opera.html" target="_blank"&gt;Opera&lt;/a&gt; y ahora nuevamente lo hago, puesto que la &lt;a href="http://www.opera.com/download/" target="_blank"&gt;versi&amp;#243;n 9.5&lt;/a&gt; ya est&amp;#225; disponible.&lt;br /&gt;&lt;br /&gt;Entre las novedades que trae, est&amp;#225; la de Protecci&amp;#243;n Autom&amp;#225;tica contra fraudes, es decir p&amp;#225;ginas web que no son realmente lo que dices ser...Es decir, Anti-Phishing. Adem&amp;#225;s de esto, mayor velocidad de navegaci&amp;#243;n&amp;#160; y seguridad en general.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_eKAKUbdu3CI/SFQnhEKcYLI/AAAAAAAAAcg/1OYAlBlmfJ0/s1600-h/Opera_9_5_1.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp2.blogger.com/_eKAKUbdu3CI/SFQnhEKcYLI/AAAAAAAAAcg/1OYAlBlmfJ0/s400/Opera_9_5_1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5211834117781217458" /&gt;&lt;/a&gt;&lt;br /&gt;Obviamente, el Speed Dial que tanto me gusta, contin&amp;#250;a con algunas peque&amp;#241;as modificaciones visuales.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_eKAKUbdu3CI/SFQnvVnV0wI/AAAAAAAAAco/yWuQLS8VnX0/s1600-h/Opera_9_5_2.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_eKAKUbdu3CI/SFQnvVnV0wI/AAAAAAAAAco/yWuQLS8VnX0/s400/Opera_9_5_2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5211834362983994114" /&gt;&lt;/a&gt;&lt;br /&gt;Una ventaja que me parece que vale la pena resaltar, es que nos d&amp;#225; la opc&amp;#237;&amp;#243;n de importar Bookmarks de casi todos los browsers conocidos.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_eKAKUbdu3CI/SFQoHL6_jQI/AAAAAAAAAc4/bnCXdkyQStA/s1600-h/Opera_9_5_3.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp1.blogger.com/_eKAKUbdu3CI/SFQoHL6_jQI/AAAAAAAAAc4/bnCXdkyQStA/s400/Opera_9_5_3.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5211834772698926338" /&gt;&lt;/a&gt;&lt;br /&gt;Los Widgets se han mantenido como era de esperarse.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_eKAKUbdu3CI/SFQoVA0ig0I/AAAAAAAAAdA/Z2ecTruclJ0/s1600-h/Opera_9_5_4.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_eKAKUbdu3CI/SFQoVA0ig0I/AAAAAAAAAdA/Z2ecTruclJ0/s400/Opera_9_5_4.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5211835010237236034" /&gt;&lt;/a&gt;&lt;br /&gt;Las opciones de configuraci&amp;#243;n son sencillas y r&amp;#225;pidas de usar.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_eKAKUbdu3CI/SFQod8dB6GI/AAAAAAAAAdI/N_OfCOcMo9Q/s1600-h/Opera_9_5_5.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp2.blogger.com/_eKAKUbdu3CI/SFQod8dB6GI/AAAAAAAAAdI/N_OfCOcMo9Q/s400/Opera_9_5_5.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5211835163683711074" /&gt;&lt;/a&gt;&lt;br /&gt;Finalmente, debo decir que lo recomiendo completamente...Si nunca antes han utilizado Opera, es hora de que lo vayan haciendo. Si ya son usuarios de Opera, pues actualicense.&lt;br /&gt;&lt;br /&gt;Saludos,&lt;br /&gt;&lt;br /&gt;Blag.&lt;br /&gt;&lt;/DIV&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13698376-8758490104470941393?l=atejada.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atejada.blogspot.com/feeds/8758490104470941393/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13698376&amp;postID=8758490104470941393' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/8758490104470941393'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/8758490104470941393'/><link rel='alternate' type='text/html' href='http://atejada.blogspot.com/2008/06/opera-95.html' title='Opera 9.5'/><author><name>Alvaro "Blag" Tejada Galindo</name><uri>http://www.blogger.com/profile/12061593528820409779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='https://weblogs.sdn.sap.com/images/people/alvaro_tajeda.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_eKAKUbdu3CI/SFQnhEKcYLI/AAAAAAAAAcg/1OYAlBlmfJ0/s72-c/Opera_9_5_1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13698376.post-2631784304530197508</id><published>2008-06-13T14:51:00.000-07:00</published><updated>2008-06-13T15:08:39.679-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Misc'/><title type='text'>Plurk - El clon de Twitter más extraño...</title><content type='html'>&lt;DIV ALIGN="JUSTIFY"&gt;&lt;br /&gt;Como era de suponerse, cuando un nuevo servicio aparece (Si que es innovador), rápidamente los "clones" comienzan a aparecer...Algunos agregan mejoras...otros no esfuerzan tanto...Y hay unos pocos que llevan las cosas a otro nivel.&lt;br /&gt;&lt;br /&gt;Este el caso de &lt;a href="http://www.plurk.com"&gt;Plurk&lt;/a&gt; un sistema bastante extraño...Clon de &lt;a href="http://www.twitter.com"&gt;Twitter&lt;/a&gt;...aunque se lleva un premio a la originalidad.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_eKAKUbdu3CI/SFLslY8A7fI/AAAAAAAAAbE/_IZBKBQQsEQ/s1600-h/Plunk_01.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp1.blogger.com/_eKAKUbdu3CI/SFLslY8A7fI/AAAAAAAAAbE/_IZBKBQQsEQ/s400/Plunk_01.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5211487845914570226" /&gt;&lt;/a&gt;&lt;br /&gt;La primera diferencia salta a la vista...En vez del típico drill down de &lt;a href="http://www.twitter.com"&gt;Twitter&lt;/a&gt;, &lt;a href="http://www.plurk.com"&gt;Plurk&lt;/a&gt; nos presenta un TimeLine, es decir, todos los mensajes publicados en un determinado momento del tiempo...Concepto que confunde al inicio, pero que luego llega a resultar bastante agradable.&lt;br /&gt;&lt;br /&gt;Otro tema extraño, es el Karma...Una puntuación que nos indica cuanto hemos posteado, cuata gente a respondido a nuestros posts...Es decir una reputación...Algo como &lt;a href="http://tweeterboard.com/"&gt;TweeterBoard&lt;/a&gt; pero completamente integrado a &lt;a href="http://www.plurk.com"&gt;Plurk&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_eKAKUbdu3CI/SFLtdQWk2UI/AAAAAAAAAbM/WJh0UOBDbNQ/s1600-h/Plunk_02.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp1.blogger.com/_eKAKUbdu3CI/SFLtdQWk2UI/AAAAAAAAAbM/WJh0UOBDbNQ/s400/Plunk_02.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5211488805682731330" /&gt;&lt;/a&gt;&lt;br /&gt;Por lo general, me gusta comentar en que lenguaje está desarrollado el servicio o el programa...Pero en este caso...no tengo idea...Flex no es...PHP? Rails? Python? JSP? Le preguntaría al Team pero al parecer todos son animales...En el buen sentido de la palabra -;)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_eKAKUbdu3CI/SFLundkrwyI/AAAAAAAAAbU/IUkrPfC2qzE/s1600-h/Plunk_05.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_eKAKUbdu3CI/SFLundkrwyI/AAAAAAAAAbU/IUkrPfC2qzE/s400/Plunk_05.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5211490080541885218" /&gt;&lt;/a&gt;&lt;br /&gt;Que más hace interesante a &lt;a href="http://www.plurk.com"&gt;Plurk&lt;/a&gt;? Bueno, podemos compartir videos e imágenes.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_eKAKUbdu3CI/SFLu2aR_rXI/AAAAAAAAAbc/Cb_zAw3G-H4/s1600-h/Plunk_06.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_eKAKUbdu3CI/SFLu2aR_rXI/AAAAAAAAAbc/Cb_zAw3G-H4/s400/Plunk_06.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5211490337356230002" /&gt;&lt;/a&gt;&lt;br /&gt;Otro tema interesante es que contamos con emociones predeterminadas (Aunque claro, podemos elegir personalizarlas).&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_eKAKUbdu3CI/SFLvHg496jI/AAAAAAAAAbk/SZGJEQYJ9AA/s1600-h/Plunk_03.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp3.blogger.com/_eKAKUbdu3CI/SFLvHg496jI/AAAAAAAAAbk/SZGJEQYJ9AA/s400/Plunk_03.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5211490631188081202" /&gt;&lt;/a&gt;&lt;br /&gt;Como último punto, las conversaciones se mantienen enlazadas al post original al que estamos respondiendo...Algo así como en los foros...&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_eKAKUbdu3CI/SFLvvZYlObI/AAAAAAAAAbs/h2zvNWTMIOU/s1600-h/Plunk_04.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp2.blogger.com/_eKAKUbdu3CI/SFLvvZYlObI/AAAAAAAAAbs/h2zvNWTMIOU/s400/Plunk_04.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5211491316367964594" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Saludos,&lt;br /&gt;&lt;br /&gt;Blag.&lt;br /&gt;&lt;/DIV&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13698376-2631784304530197508?l=atejada.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atejada.blogspot.com/feeds/2631784304530197508/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13698376&amp;postID=2631784304530197508' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/2631784304530197508'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/2631784304530197508'/><link rel='alternate' type='text/html' href='http://atejada.blogspot.com/2008/06/plurk-el-clon-de-twitter-ms-extrao.html' title='Plurk - El clon de Twitter más extraño...'/><author><name>Alvaro "Blag" Tejada Galindo</name><uri>http://www.blogger.com/profile/12061593528820409779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='https://weblogs.sdn.sap.com/images/people/alvaro_tajeda.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_eKAKUbdu3CI/SFLslY8A7fI/AAAAAAAAAbE/_IZBKBQQsEQ/s72-c/Plunk_01.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13698376.post-5379344810377156710</id><published>2008-06-13T13:26:00.000-07:00</published><updated>2008-06-13T13:55:15.910-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='FLEX'/><title type='text'>Sixent - Construye tu red social al estilo Flex</title><content type='html'>&lt;DIV ALIGN="JUSTIFY"&gt;&lt;br /&gt;Desde el lanzamiento de &lt;a href="http://www.adobe.com/products/flex/"&gt;Adobe Flex&lt;/a&gt;, muchas y variadas aplicaciones han visto la luz...Aunque...Una red de contactos en Flex? Ver para creer...Pues vean &lt;a href="http://www.sixent.com"&gt;Sixent&lt;/a&gt;...Que aunque se encuentra en fase Alpha Cerrada (Es decir, solo se permite el registro mediante invitación), ya me ha sorprendido muy gratamente.&lt;br /&gt;&lt;br /&gt;Veamos mi página pública (Si...pública...aunque no pública como en &lt;a href="http://www.twitter.com/Blag"&gt;Twitter&lt;/a&gt; sino pública como en &lt;a href="http://www.sixent.com"&gt;Sixent&lt;/a&gt; te permite tener 3 perfiles, uno público, otro para los amigos y otro profesional...Así puedes controlar que colocar en cada uno y quines pueden acceder a que datos tuyos).&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_eKAKUbdu3CI/SFLbEJW2eJI/AAAAAAAAAas/a5o7UgTAExc/s1600-h/Sixent_01.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp2.blogger.com/_eKAKUbdu3CI/SFLbEJW2eJI/AAAAAAAAAas/a5o7UgTAExc/s400/Sixent_01.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5211468583098808466" /&gt;&lt;/a&gt;&lt;br /&gt;Cambiar entre perfiles es bastante sencillo, solo basta escoger el queremos de una lista y comenzar a hacer las modificaciones necesarias.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_eKAKUbdu3CI/SFLbaCPU_lI/AAAAAAAAAa8/o6mggNRtmb8/s1600-h/Sixent_03.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_eKAKUbdu3CI/SFLbaCPU_lI/AAAAAAAAAa8/o6mggNRtmb8/s400/Sixent_03.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5211468959145328210" /&gt;&lt;/a&gt;&lt;br /&gt;Seguramente estarán pensando...Claro, muy interesante, pero que más hace de este servicio algo diferente a los demás?...Muy simple...Podemos crear PODs, que son pequeñas aplicaciones que se insertan en nuestra página y que podemos configurar (Tamaño, color, estado, posición). Crear los PODs es muy sencillo y tenemos a disposición cualquier servicio de internet (Inclusive hay PODs listos para usar). El &lt;a href="http://atejada.blogspot.com/2008/06/sprout-builder-construyendo-en-flex.html"&gt;Sprout de Twitter&lt;/a&gt; que hice con &lt;a href="http://greenhouse.sproutbuilder.com/"&gt;Sprout Builder&lt;/a&gt; funcionó perfectamente cuando lo integré a &lt;a href="http://www.sixent.com"&gt;Sixent&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_eKAKUbdu3CI/SFLbSScgQ5I/AAAAAAAAAa0/OETAPY0Y5QQ/s1600-h/Sixent_02.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp1.blogger.com/_eKAKUbdu3CI/SFLbSScgQ5I/AAAAAAAAAa0/OETAPY0Y5QQ/s400/Sixent_02.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5211468826056606610" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Si esto les parece bueno...esperen a ver lo que viene...Recuerden que están aún en fase Alpha...Muchas cosas pueden cambiar y otras mejorar -;)&lt;br /&gt;&lt;br /&gt;La verdad es que no se cuantas invitaciones tendré disponibles...Pero si alguien quiere probar, pues que envié un mail para poder crearles una cuenta -:)&lt;br /&gt;&lt;br /&gt;Saludos,&lt;br /&gt;&lt;br /&gt;Blag.&lt;br /&gt;&lt;/DIV&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13698376-5379344810377156710?l=atejada.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atejada.blogspot.com/feeds/5379344810377156710/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13698376&amp;postID=5379344810377156710' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/5379344810377156710'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/5379344810377156710'/><link rel='alternate' type='text/html' href='http://atejada.blogspot.com/2008/06/sixent-construye-tu-red-social-al.html' title='Sixent - Construye tu red social al estilo Flex'/><author><name>Alvaro "Blag" Tejada Galindo</name><uri>http://www.blogger.com/profile/12061593528820409779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='https://weblogs.sdn.sap.com/images/people/alvaro_tajeda.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_eKAKUbdu3CI/SFLbEJW2eJI/AAAAAAAAAas/a5o7UgTAExc/s72-c/Sixent_01.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13698376.post-7162195913933545348</id><published>2008-06-13T13:08:00.000-07:00</published><updated>2008-06-13T13:24:47.427-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='FLEX'/><title type='text'>Sprout Builder - Construyendo en Flex</title><content type='html'>&lt;DIV ALIGN="JUSTIFY"&gt;&lt;br /&gt;Alguna vez has utilizado Flash? Saben programar en Flex? Si no han utilizado Flash, o se les hace muy complicado...Y tampoco saben programar en Flex...&lt;a href="http://greenhouse.sproutbuilder.com/"&gt;Sprout Builder&lt;/a&gt; les alegrará la vida...&lt;br /&gt;Qué es &lt;a href="http://greenhouse.sproutbuilder.com/"&gt;Sprout Builder&lt;/a&gt;? Es un nuevo (Ok...No tan nuevo, es solo que no había blogeado antes sobre ellos...Y recién ahora visito la página nuevamente LOL) servicio que nos permite crear impresionantes interfaces Flex con algunos cuantos clicks...&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_eKAKUbdu3CI/SFLVMIlWlzI/AAAAAAAAAaE/jcbnVxG4t6I/s1600-h/Sprout_01.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp2.blogger.com/_eKAKUbdu3CI/SFLVMIlWlzI/AAAAAAAAAaE/jcbnVxG4t6I/s400/Sprout_01.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5211462123260385074" /&gt;&lt;/a&gt;&lt;br /&gt;Cuenta con una interfaz bastante amigable, componentes ya construidos (Twitter, Seesmic, Google Maps) y por supuesto capacidad para agregar música y video.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_eKAKUbdu3CI/SFLVq-9QGeI/AAAAAAAAAaM/dzJ7AW0LveI/s1600-h/Sprout_04.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp3.blogger.com/_eKAKUbdu3CI/SFLVq-9QGeI/AAAAAAAAAaM/dzJ7AW0LveI/s400/Sprout_04.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5211462653252213218" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Como era de esperarse, podemos hacer una previsualización de nuestro Sprout para ver como está quedando...&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_eKAKUbdu3CI/SFLWZAi0lUI/AAAAAAAAAaU/hjLDpEoCUJ0/s1600-h/Sprout_02.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_eKAKUbdu3CI/SFLWZAi0lUI/AAAAAAAAAaU/hjLDpEoCUJ0/s400/Sprout_02.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5211463443952211266" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Y cuando estamos listo, no tenemos que hacer más publicarlo y copiar el código donde queramos...&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_eKAKUbdu3CI/SFLXJl262-I/AAAAAAAAAak/7i6RZ1xklDY/s1600-h/Sprout_03.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_eKAKUbdu3CI/SFLXJl262-I/AAAAAAAAAak/7i6RZ1xklDY/s400/Sprout_03.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5211464278602341346" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Si son observadores, notarán que mi Sprout de Twitter está en la página principal del blog...Como ven, simple, rápido y efectivo.&lt;br /&gt;&lt;br /&gt;Saludos,&lt;br /&gt;&lt;br /&gt;Blag.&lt;br /&gt;&lt;/DIV&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13698376-7162195913933545348?l=atejada.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atejada.blogspot.com/feeds/7162195913933545348/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13698376&amp;postID=7162195913933545348' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/7162195913933545348'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/7162195913933545348'/><link rel='alternate' type='text/html' href='http://atejada.blogspot.com/2008/06/sprout-builder-construyendo-en-flex.html' title='Sprout Builder - Construyendo en Flex'/><author><name>Alvaro "Blag" Tejada Galindo</name><uri>http://www.blogger.com/profile/12061593528820409779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='https://weblogs.sdn.sap.com/images/people/alvaro_tajeda.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_eKAKUbdu3CI/SFLVMIlWlzI/AAAAAAAAAaE/jcbnVxG4t6I/s72-c/Sprout_01.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13698376.post-4500188542629414729</id><published>2008-06-09T15:02:00.000-07:00</published><updated>2008-06-09T15:08:51.401-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SDN'/><category scheme='http://www.blogger.com/atom/ns#' term='Misc'/><category scheme='http://www.blogger.com/atom/ns#' term='GAMES'/><title type='text'>Community Clubhouse en SmallWorlds</title><content type='html'>&lt;DIV ALIGN="JUSTIFY"&gt;&lt;br /&gt;En mi blog anterior &lt;a href="http://atejada.blogspot.com/2008/06/smallworlds.html"&gt;SmallWorlds&lt;/a&gt; hablé sobre la idea de tener un Community Clubhouse dentro de este mundo virtual...Adivinen que...No quise esperar...Y sacrifiqué mi "casa" en favor de la comunidad.&lt;br /&gt;&lt;br /&gt;Si tenemos una isla de SAP dentro de &lt;a href="http://www.secondlife.com/"&gt;Second Life&lt;/a&gt;...¿Por qué no podemos tener una casa aquí?&lt;br /&gt;&lt;br /&gt;Aquí hay algunas imágenes...Necesito más dinero para hacerla mejor...Pero todos son libres de hacerme una vista y firmar el libro de visitas...Solo busquen a &lt;span style="font-weight:bold;"&gt;Alvaro Tejada &lt;/span&gt; y teletransportense al Clubhouse.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_eKAKUbdu3CI/SE2pXce0RwI/AAAAAAAAAZs/d6WcKTj7UCc/s1600-h/Community_Clubhouse_1.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_eKAKUbdu3CI/SE2pXce0RwI/AAAAAAAAAZs/d6WcKTj7UCc/s400/Community_Clubhouse_1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5210006564185065218" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_eKAKUbdu3CI/SE2pby0g5uI/AAAAAAAAAZ0/zSPpXYvgyMw/s1600-h/Community_Clubhouse_2.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp2.blogger.com/_eKAKUbdu3CI/SE2pby0g5uI/AAAAAAAAAZ0/zSPpXYvgyMw/s400/Community_Clubhouse_2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5210006638901126882" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_eKAKUbdu3CI/SE2pfvQvjII/AAAAAAAAAZ8/fWS52ZV-WzM/s1600-h/Community_Clubhouse_3.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_eKAKUbdu3CI/SE2pfvQvjII/AAAAAAAAAZ8/fWS52ZV-WzM/s400/Community_Clubhouse_3.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5210006706665262210" /&gt;&lt;/a&gt;&lt;br /&gt;Estoy seguro que con estas imagenes van a interesarse más en esto...Creanme...Es muy divertido -:)&lt;br /&gt;&lt;br /&gt;Quien se apunta para un Community Day???&lt;br /&gt;&lt;br /&gt;Saludos,&lt;br /&gt;&lt;br /&gt;Blag.&lt;br /&gt;&lt;/DIV&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13698376-4500188542629414729?l=atejada.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atejada.blogspot.com/feeds/4500188542629414729/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13698376&amp;postID=4500188542629414729' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/4500188542629414729'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/4500188542629414729'/><link rel='alternate' type='text/html' href='http://atejada.blogspot.com/2008/06/community-clubhouse-en-smallworlds.html' title='Community Clubhouse en SmallWorlds'/><author><name>Alvaro "Blag" Tejada Galindo</name><uri>http://www.blogger.com/profile/12061593528820409779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='https://weblogs.sdn.sap.com/images/people/alvaro_tajeda.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_eKAKUbdu3CI/SE2pXce0RwI/AAAAAAAAAZs/d6WcKTj7UCc/s72-c/Community_Clubhouse_1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13698376.post-7506326206201987519</id><published>2008-06-09T08:52:00.000-07:00</published><updated>2008-06-09T08:56:51.159-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Community Day'/><title type='text'>Cuando el "Gran Jefe" está mirando...</title><content type='html'>&lt;DIV ALIGN="JUSTIFY"&gt;&lt;br /&gt;Hoy día en la mañana...Antes de escribir mi blog sobre el Community Day Lima 2008, recibí una sorpresa muy agradable (Ok...Casi me desmayo...jejeje) en mi &lt;a href="http://twitter.com/Blag"&gt;Twitter&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="https://www.sdn.sap.com/irj/sdn/wiki?path=/display/profile/Mark%2bYolton"&gt;Mark Yolton&lt;/a&gt; &lt;span style="font-weight:bold;"&gt;Vice Presidente Senior del SAP Community Network...Que incluye a las Comunidades del SDN y el BPX, además de los eventos TechEd y el TechTour&lt;/span&gt; me envío el siguiente mensaje...&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_eKAKUbdu3CI/SE1STVOabjI/AAAAAAAAAZk/dayrGsPu5Sg/s1600-h/MarkYolton_Tweet.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp2.blogger.com/_eKAKUbdu3CI/SE1STVOabjI/AAAAAAAAAZk/dayrGsPu5Sg/s400/MarkYolton_Tweet.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5209910836006121010" /&gt;&lt;/a&gt;&lt;br /&gt;En otras palabras, me agradece por haber organizado y dirigido el Community Day Lima...Si eso no es impresionante...Entonces no se que es...&lt;br /&gt;&lt;br /&gt;Saludos,&lt;br /&gt;&lt;br /&gt;Blag.&lt;br /&gt;&lt;br /&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/sdn%20blogger" rel="tag"&gt;sdn blogger&lt;/a&gt;&lt;br /&gt;&lt;/DIV&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13698376-7506326206201987519?l=atejada.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atejada.blogspot.com/feeds/7506326206201987519/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13698376&amp;postID=7506326206201987519' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/7506326206201987519'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/7506326206201987519'/><link rel='alternate' type='text/html' href='http://atejada.blogspot.com/2008/06/cuando-el-gran-jefe-est-mirando.html' title='Cuando el &quot;Gran Jefe&quot; está mirando...'/><author><name>Alvaro "Blag" Tejada Galindo</name><uri>http://www.blogger.com/profile/12061593528820409779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='https://weblogs.sdn.sap.com/images/people/alvaro_tajeda.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_eKAKUbdu3CI/SE1STVOabjI/AAAAAAAAAZk/dayrGsPu5Sg/s72-c/MarkYolton_Tweet.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13698376.post-2309528059910501282</id><published>2008-06-09T07:52:00.000-07:00</published><updated>2008-06-09T08:07:48.796-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='SDN'/><category scheme='http://www.blogger.com/atom/ns#' term='Misc'/><category scheme='http://www.blogger.com/atom/ns#' term='FLEX'/><category scheme='http://www.blogger.com/atom/ns#' term='Community Day'/><category scheme='http://www.blogger.com/atom/ns#' term='ABAP'/><title type='text'>Community Day Lima 2008 - Lo que fué...</title><content type='html'>&lt;DIV ALIGN="JUSTIFY"&gt;&lt;br /&gt;Este sábado pasado, 25 personas asistieron al Community Day Lima 2008 en las oficinas de &lt;a href="http://www.tsnetglobal.com"&gt;TSNet Global.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_eKAKUbdu3CI/SE1EIO8ikRI/AAAAAAAAAYc/bNdyilv1HzY/s1600-h/DSC02863.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp1.blogger.com/_eKAKUbdu3CI/SE1EIO8ikRI/AAAAAAAAAYc/bNdyilv1HzY/s400/DSC02863.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5209895252179194130" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_eKAKUbdu3CI/SE1EOjujkII/AAAAAAAAAYk/4BP_fCZq__0/s1600-h/DSC02864.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_eKAKUbdu3CI/SE1EOjujkII/AAAAAAAAAYk/4BP_fCZq__0/s400/DSC02864.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5209895360836898946" /&gt;&lt;/a&gt;&lt;br /&gt;Fué un evento realmente bueno, la pasamos muy bien y compartimos un poco del espíritu de la Comunidad.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_eKAKUbdu3CI/SE1EbjZDYkI/AAAAAAAAAYs/EXt00LHHYXs/s1600-h/DSC02857.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_eKAKUbdu3CI/SE1EbjZDYkI/AAAAAAAAAYs/EXt00LHHYXs/s400/DSC02857.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5209895584085008962" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_eKAKUbdu3CI/SE1EjHNL4YI/AAAAAAAAAY0/bMvJYYo9gxs/s1600-h/DSC02858.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp2.blogger.com/_eKAKUbdu3CI/SE1EjHNL4YI/AAAAAAAAAY0/bMvJYYo9gxs/s400/DSC02858.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5209895713957994882" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.tsnetglobal.com/"&gt;TSNet Global&lt;/a&gt; y &lt;a href="http://www.sap.com/Peru/index.epx"&gt;SAP Peru&lt;/a&gt; auspiciaron el evento brindándones el Coffee Break y un paquete con regalos (Un cuaderno, lapiceros, lápices, porta foto y un borrador).&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_eKAKUbdu3CI/SE1EyzAOhqI/AAAAAAAAAY8/VW5Ybxq_Bww/s1600-h/DSC02866.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_eKAKUbdu3CI/SE1EyzAOhqI/AAAAAAAAAY8/VW5Ybxq_Bww/s400/DSC02866.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5209895983412840098" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_eKAKUbdu3CI/SE1E5qYfdBI/AAAAAAAAAZE/V0lJCjlGOV8/s1600-h/DSC02869.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_eKAKUbdu3CI/SE1E5qYfdBI/AAAAAAAAAZE/V0lJCjlGOV8/s400/DSC02869.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5209896101357777938" /&gt;&lt;/a&gt;&lt;br /&gt;Yo hablé sobre el SDN/BPX y Lenguajes Script y SAP.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_eKAKUbdu3CI/SE1FCCRnadI/AAAAAAAAAZM/yBdBcEBX_a4/s1600-h/DSC02873.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp2.blogger.com/_eKAKUbdu3CI/SE1FCCRnadI/AAAAAAAAAZM/yBdBcEBX_a4/s400/DSC02873.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5209896245210343890" /&gt;&lt;/a&gt;&lt;br /&gt;Lennon Shimokawa de &lt;a href="http://www.synopsis.ws/inicio.html"&gt;Synopsis&lt;/a&gt; habló sobre el conector JCO y SAP. &lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_eKAKUbdu3CI/SE1FN35FlpI/AAAAAAAAAZU/lBBn4XpaMk0/s1600-h/DSC02865.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp3.blogger.com/_eKAKUbdu3CI/SE1FN35FlpI/AAAAAAAAAZU/lBBn4XpaMk0/s400/DSC02865.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5209896448581539474" /&gt;&lt;/a&gt;&lt;br /&gt;Mario Galvis de &lt;a href="http://www.sap.com/colombia/index.epx"&gt;SAP Colombia&lt;/a&gt; hizo una presentación WebEx sobre Master Data Management. &lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_eKAKUbdu3CI/SE1FY1H7_mI/AAAAAAAAAZc/AO2zP9hTxek/s1600-h/DSC02879.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp1.blogger.com/_eKAKUbdu3CI/SE1FY1H7_mI/AAAAAAAAAZc/AO2zP9hTxek/s400/DSC02879.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5209896636817079906" /&gt;&lt;/a&gt;&lt;br /&gt;Juan Carlos Velarde Saravia de &lt;a href="http://www.actualisap.com/"&gt;ActualiSap Peru&lt;/a&gt; habló sobre ABAP Enhancements (BADI's, User-Exits, Enhacement Points, Customer-Exits).&lt;br /&gt;&lt;br /&gt;Al final, tres afortunados ganadores se llevaron una copia gratuita de mi libro, &lt;a href="http://www.lulu.com/content/1190485"&gt;El Arte de Programar SAP NetWeaver&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://weblogs.sdn.sap.com/weblogs/images/48024/ArtePrograma_NetWeaver.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px;" src="https://weblogs.sdn.sap.com/weblogs/images/48024/ArtePrograma_NetWeaver.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;Esperamos por supuesto repetir este evento el año que viene...Con más personas participando...Más presentaciones y más diversión -:)&lt;br /&gt;&lt;br /&gt;Saludos,&lt;br /&gt;&lt;br /&gt;Blag.&lt;br /&gt;&lt;/DIV&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13698376-2309528059910501282?l=atejada.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atejada.blogspot.com/feeds/2309528059910501282/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13698376&amp;postID=2309528059910501282' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/2309528059910501282'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/2309528059910501282'/><link rel='alternate' type='text/html' href='http://atejada.blogspot.com/2008/06/community-day-lima-2008-lo-que-fu.html' title='Community Day Lima 2008 - Lo que fué...'/><author><name>Alvaro "Blag" Tejada Galindo</name><uri>http://www.blogger.com/profile/12061593528820409779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='https://weblogs.sdn.sap.com/images/people/alvaro_tajeda.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_eKAKUbdu3CI/SE1EIO8ikRI/AAAAAAAAAYc/bNdyilv1HzY/s72-c/DSC02863.JPG' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13698376.post-178067519063554139</id><published>2008-06-05T08:50:00.001-07:00</published><updated>2008-06-05T08:58:14.961-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Misc'/><category scheme='http://www.blogger.com/atom/ns#' term='FLEX'/><title type='text'>SmallWorlds</title><content type='html'>&lt;DIV ALIGN="JUSTIFY"&gt;&lt;br /&gt;Ayer creé mi cuenta en este mundo virtual llamado &lt;a href="http://www.smallworlds.com/"&gt;SmallWorlds&lt;/a&gt;...Al principio pensé que era como &lt;a href="www.secondlife.com/"&gt;Second Life&lt;/a&gt;...Pero luego de mi cuenta dos diferencias bastante obvias...&lt;br /&gt;&lt;br /&gt;1.- SmallWorld funciona 95% en el browser...Así que no hay que descargar ningún cliente.&lt;br /&gt;2.- SmallWorlds está desarrollado en Flash (Flex?).&lt;br /&gt;&lt;br /&gt;Actualmente se encuentran en Beta abierta y no hay mucho por hacer...&lt;br /&gt;&lt;br /&gt;1.- Ir a la tienda a comprar una silla.&lt;br /&gt;2.- Colocar la silla en tu cuarto.&lt;br /&gt;3.- Navegar por algunas tiendas.&lt;br /&gt;&lt;br /&gt;Hasta el momento, me parece bastante interesante...Aunque se necesita una conexión a Internet bastante veloz...Y el último &lt;a href="http://www.adobe.com/go/getflashplayer"&gt;Plug-In de Flash&lt;/a&gt; instalado...&lt;br /&gt;&lt;br /&gt;Si quieren buscarme...Estoy como &lt;span style="font-weight:bold;"&gt;Alvaro Tejada&lt;/span&gt; -;)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_eKAKUbdu3CI/SEgMtOak1oI/AAAAAAAAAYU/xJ9nHB0V_Ps/s1600-h/Blag_SmallWorld.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp2.blogger.com/_eKAKUbdu3CI/SEgMtOak1oI/AAAAAAAAAYU/xJ9nHB0V_Ps/s400/Blag_SmallWorld.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5208426940157187714" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Saludos,&lt;br /&gt;&lt;br /&gt;Blag.&lt;br /&gt;&lt;/DIV&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13698376-178067519063554139?l=atejada.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atejada.blogspot.com/feeds/178067519063554139/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13698376&amp;postID=178067519063554139' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/178067519063554139'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/178067519063554139'/><link rel='alternate' type='text/html' href='http://atejada.blogspot.com/2008/06/smallworlds.html' title='SmallWorlds'/><author><name>Alvaro "Blag" Tejada Galindo</name><uri>http://www.blogger.com/profile/12061593528820409779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='https://weblogs.sdn.sap.com/images/people/alvaro_tajeda.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_eKAKUbdu3CI/SEgMtOak1oI/AAAAAAAAAYU/xJ9nHB0V_Ps/s72-c/Blag_SmallWorld.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13698376.post-3312310751938174792</id><published>2008-06-05T06:53:00.000-07:00</published><updated>2008-06-05T06:56:07.504-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='SDN'/><category scheme='http://www.blogger.com/atom/ns#' term='Misc'/><category scheme='http://www.blogger.com/atom/ns#' term='FLEX'/><category scheme='http://www.blogger.com/atom/ns#' term='ABAP'/><title type='text'>Community Day Lima - Sábado 7 de Junio</title><content type='html'>&lt;DIV ALIGN="JUSTIFY"&gt;&lt;br /&gt;Este sábado 7 de Junio...&lt;a href="https://wiki.sdn.sap.com/wiki/display/profile/Alvaro+Tejada+Galindo"&gt;Blag&lt;/a&gt; (Ese soy yo), &lt;a href="http://www.tsnetglobal.com/"&gt;TSNet Global&lt;/a&gt; y &lt;a href="http://www.sap.com/Peru/index.epx"&gt;SAP Perú&lt;/a&gt; vamos a traer el Community Day Lima por primera vez en la historia.&lt;br /&gt;&lt;br /&gt;Que pueden esperar? Colaboración, Intercambios y Contactos.&lt;br /&gt;&lt;br /&gt;Qué sesiones van a ser cubiertas? Aquí está una pequeña pero interesante lista.&lt;br /&gt;&lt;br /&gt;    * SDN y BPX (Incluyendo un video del TechEd cortesía de &lt;a href="https://wiki.sdn.sap.com/wiki/display/profile/Craig+Cmehil"&gt;Craig Cmehil&lt;/a&gt;)&lt;br /&gt;    * MDM (Webex)&lt;br /&gt;    * Lenguajes Script y SAP&lt;br /&gt;    * Conector JCO y SAP&lt;br /&gt;    * User-Exits, BADI's, BTE's, Enhacement Points y Customer Exits&lt;br /&gt;    * Adobe Forms (Por confirmar)&lt;br /&gt;&lt;br /&gt;Dónde va a ser? Aquí está la dirección.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;TSnet S.A.&lt;br /&gt;Av. Javier Prado Este # 2612&lt;br /&gt;San Borja- Lima 41 &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Desde las 9:00 a.m a la 1:00 p.m&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Esperamos por lo menos a 40 participantes...Así que si tu eres uno de ellos, no te olvides de pasar por mi lado para decirme "Hola" -;)&lt;br /&gt;&lt;br /&gt;Saludos,&lt;br /&gt;&lt;br /&gt;Blag. &lt;br /&gt;&lt;br /&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/sdn%20blogger" rel="tag"&gt;sdn blogger&lt;/a&gt;&lt;br /&gt;&lt;/DIV&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13698376-3312310751938174792?l=atejada.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atejada.blogspot.com/feeds/3312310751938174792/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13698376&amp;postID=3312310751938174792' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/3312310751938174792'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/3312310751938174792'/><link rel='alternate' type='text/html' href='http://atejada.blogspot.com/2008/06/community-day-lima-sbado-7-de-junio.html' title='Community Day Lima - Sábado 7 de Junio'/><author><name>Alvaro "Blag" Tejada Galindo</name><uri>http://www.blogger.com/profile/12061593528820409779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='https://weblogs.sdn.sap.com/images/people/alvaro_tajeda.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13698376.post-4480577733725374086</id><published>2008-04-30T12:20:00.000-07:00</published><updated>2008-04-30T12:36:45.546-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GAMES'/><title type='text'>Inform 7 - Creando Ficción Interactiva</title><content type='html'>&lt;DIV ALIGN="JUSTIFY"&gt;&lt;br /&gt;Mi pasión por los juegos de &lt;a href="http://es.wikipedia.org/wiki/Aventura_conversacional"&gt;Ficción Interactiva&lt;/a&gt; ha regresado gracias a que descargué la última versión de &lt;a href="http://www.inform-fiction.org/I7/Inform%207.html"&gt;Inform 7&lt;/a&gt; un motor para creación de juegos de este genero.&lt;br /&gt;&lt;br /&gt;El creado de Inform &lt;a href="http://en.wikipedia.org/wiki/Graham_Nelson"&gt;Graham Nelson&lt;/a&gt; es todo un Gurú puesto que su creación hace que la programación de juegos IF sea muy sencilla...Sobre todo con la versión 7, puesto que se utiliza el Natural Language...Es decir, se programa como si se estuviera escribiendo un libro.&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;"Hello World" by "I.F. Author"&lt;br /&gt;&lt;br /&gt;The story headline is "An Interactive Example".&lt;br /&gt;&lt;br /&gt;The Living Room is a room. "A comfortably furnished living room." The Kitchen is north of the Living Room. The Front Door is south of the Living Room. The Front Door is a closed locked door.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;El entorno de programación es simple pero directo, es decir, ayuda mucho -:)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_eKAKUbdu3CI/SBjI3fmc64I/AAAAAAAAAXI/Z78DHFAGMaY/s1600-h/Inform_1.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp3.blogger.com/_eKAKUbdu3CI/SBjI3fmc64I/AAAAAAAAAXI/Z78DHFAGMaY/s400/Inform_1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5195123025873005442" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_eKAKUbdu3CI/SBjJA_mc65I/AAAAAAAAAXQ/si7qRWGYcoI/s1600-h/Inform_2.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp1.blogger.com/_eKAKUbdu3CI/SBjJA_mc65I/AAAAAAAAAXQ/si7qRWGYcoI/s400/Inform_2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5195123189081762706" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_eKAKUbdu3CI/SBjJKfmc66I/AAAAAAAAAXY/tYts5MfIz8g/s1600-h/Inform_3.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp3.blogger.com/_eKAKUbdu3CI/SBjJKfmc66I/AAAAAAAAAXY/tYts5MfIz8g/s400/Inform_3.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5195123352290519970" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_eKAKUbdu3CI/SBjJPvmc67I/AAAAAAAAAXg/f9adX0Le8Mc/s1600-h/Inform_4.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_eKAKUbdu3CI/SBjJPvmc67I/AAAAAAAAAXg/f9adX0Le8Mc/s400/Inform_4.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5195123442484833202" /&gt;&lt;/a&gt;&lt;br /&gt;Claro, si les preocupa que todo esté en Inglés...Pues bueno, siempre hay una solución -;) Pueden descargar &lt;a href="http://www.caad.es/modulos.php?modulo=descarga&amp;id=1096"&gt;InformATE!&lt;/a&gt; que es una versión de Inform 6 totalmente en Español...Y por supuesto, la página del &lt;a href="http://www.caad.es/"&gt;CAAD&lt;/a&gt; es al lugar donde hay que ir para conseguir juegos, ayuda y algunos buenos amigos -;)&lt;br /&gt;&lt;br /&gt;Saludos,&lt;br /&gt;&lt;br /&gt;Blag.&lt;br /&gt;&lt;/DIV&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13698376-4480577733725374086?l=atejada.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atejada.blogspot.com/feeds/4480577733725374086/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13698376&amp;postID=4480577733725374086' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/4480577733725374086'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/4480577733725374086'/><link rel='alternate' type='text/html' href='http://atejada.blogspot.com/2008/04/inform-7-creando-ficcin-interactiva.html' title='Inform 7 - Creando Ficción Interactiva'/><author><name>Alvaro "Blag" Tejada Galindo</name><uri>http://www.blogger.com/profile/12061593528820409779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='https://weblogs.sdn.sap.com/images/people/alvaro_tajeda.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_eKAKUbdu3CI/SBjI3fmc64I/AAAAAAAAAXI/Z78DHFAGMaY/s72-c/Inform_1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13698376.post-2754442627783019839</id><published>2008-04-29T14:53:00.001-07:00</published><updated>2008-04-29T14:59:30.405-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SDN'/><category scheme='http://www.blogger.com/atom/ns#' term='GAMES'/><category scheme='http://www.blogger.com/atom/ns#' term='ABAP'/><title type='text'>Master Mind  - Juego en ABAP</title><content type='html'>&lt;DIV ALIGN="JUSTIFY"&gt;&lt;br /&gt;En la tarde, publiqué este blog en el SDN &lt;a href="https://weblogs.sdn.sap.com/pub/wlg/9508"&gt;ABAP's Mind Game&lt;/a&gt;, así que me toca publicarlo aquí también -;)&lt;br /&gt;&lt;br /&gt;Hice un juego al estilo de Master Mind, que es donde la PC piensa en el orden de 5 números y nosotros tenemos que adivinar cual es...Claro que el sistema nos indica si las posiciones que ingresamos son correctas o incorrectas.&lt;br /&gt;&lt;br /&gt;Primero comencé con un simple Dynpro...&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_eKAKUbdu3CI/SBeZevmc60I/AAAAAAAAAWo/xFtRFJ_QM6o/s1600-h/ABAP_Mind_Game_1.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp3.blogger.com/_eKAKUbdu3CI/SBeZevmc60I/AAAAAAAAAWo/xFtRFJ_QM6o/s400/ABAP_Mind_Game_1.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5194789448648026946" /&gt;&lt;/a&gt;&lt;br /&gt;Luego, escribí el código fuente...&lt;br /&gt;&lt;PRE&gt;&lt;br /&gt;REPORT ZABAP_MIND_GAME.&lt;br /&gt;&lt;br /&gt;*&amp;---------------------------------------------------------*&lt;br /&gt;* CONSTANTS                                                *&lt;br /&gt;*&amp;---------------------------------------------------------*&lt;br /&gt;CONSTANTS: line_length TYPE i VALUE 254.&lt;br /&gt;&lt;br /&gt;*&amp;---------------------------------------------------------*&lt;br /&gt;* TYPES                                                    *&lt;br /&gt;*&amp;---------------------------------------------------------*&lt;br /&gt;TYPES: BEGIN OF ty_rand_table,&lt;br /&gt;       value(1) TYPE c,&lt;br /&gt;       END OF ty_rand_table.&lt;br /&gt;&lt;br /&gt;*&amp;---------------------------------------------------------*&lt;br /&gt;* INTERNAL TABLES                                          *&lt;br /&gt;*&amp;---------------------------------------------------------*&lt;br /&gt;DATA: t_rand_table TYPE STANDARD TABLE OF ty_rand_table,&lt;br /&gt;      t_user_table TYPE STANDARD TABLE OF ty_rand_table,&lt;br /&gt;      t_game_lines TYPE TABLE OF tline-tdline,&lt;br /&gt;      data_rand TYPE REF TO data,&lt;br /&gt;      data_lines TYPE REF TO data.&lt;br /&gt;&lt;br /&gt;*&amp;---------------------------------------------------------*&lt;br /&gt;* FIELD-SYMBOLS                                            *&lt;br /&gt;*&amp;---------------------------------------------------------*&lt;br /&gt;FIELD-SYMBOLS: &amp;lt;fs_rand_table&amp;gt; LIKE LINE OF t_rand_table,&lt;br /&gt;               &amp;lt;fs_user_table&amp;gt; LIKE LINE OF t_user_table,&lt;br /&gt;               &amp;lt;fs_rand_value&amp;gt; LIKE LINE OF t_rand_table.&lt;br /&gt;&lt;br /&gt;*&amp;---------------------------------------------------------*&lt;br /&gt;* VARIABLES                                                *&lt;br /&gt;*&amp;---------------------------------------------------------*&lt;br /&gt;DATA: custom_container TYPE REF TO cl_gui_custom_container,&lt;br /&gt;      text_editor TYPE REF TO cl_gui_textedit,&lt;br /&gt;      w_ucomm TYPE sy-ucomm,&lt;br /&gt;      ran_int TYPE qf00-ran_int,&lt;br /&gt;      flag TYPE c,&lt;br /&gt;      counter TYPE c,&lt;br /&gt;      gv_line TYPE string,&lt;br /&gt;      button_count TYPE c,&lt;br /&gt;      xtext TYPE tline-tdline,&lt;br /&gt;      game_win TYPE string,&lt;br /&gt;      game_counter TYPE string.&lt;br /&gt;&lt;br /&gt;DATA: message_one TYPE string,&lt;br /&gt;      message_two TYPE string,&lt;br /&gt;      message_three TYPE string,&lt;br /&gt;      message_four TYPE string,&lt;br /&gt;      message_five TYPE string.&lt;br /&gt;&lt;br /&gt;DATA: gv_one TYPE c,&lt;br /&gt;      gv_two TYPE c,&lt;br /&gt;      gv_three TYPE c,&lt;br /&gt;      gv_four TYPE c,&lt;br /&gt;      gv_five TYPE c.&lt;br /&gt;&lt;br /&gt;DATA: gv_flag_one TYPE c,&lt;br /&gt;      gv_flag_two TYPE c,&lt;br /&gt;      gv_flag_three TYPE c,&lt;br /&gt;      gv_flag_four TYPE c,&lt;br /&gt;      gv_flag_five TYPE c.&lt;br /&gt;&lt;br /&gt;DATA: gv_user_one TYPE c,&lt;br /&gt;      gv_user_two TYPE c,&lt;br /&gt;      gv_user_three TYPE c,&lt;br /&gt;      gv_user_four TYPE c,&lt;br /&gt;      gv_user_five TYPE c.&lt;br /&gt;&lt;br /&gt;*----------------------------------------------------------*&lt;br /&gt;*   START-OF-SELECTION                                     *&lt;br /&gt;*----------------------------------------------------------*&lt;br /&gt;START-OF-SELECTION.&lt;br /&gt;  CALL SCREEN 0100.&lt;br /&gt;&lt;br /&gt;*&amp;---------------------------------------------------------*&lt;br /&gt;*&amp;      Form  call_editor                                  *&lt;br /&gt;*&amp;---------------------------------------------------------*&lt;br /&gt;FORM call_editor.&lt;br /&gt;&lt;br /&gt;  IF text_editor IS INITIAL.&lt;br /&gt;    CREATE OBJECT custom_container&lt;br /&gt;      EXPORTING&lt;br /&gt;        container_name              = 'CUSTOM_CONTROL'&lt;br /&gt;      EXCEPTIONS&lt;br /&gt;        cntl_error                  = 1&lt;br /&gt;        cntl_system_error           = 2&lt;br /&gt;        create_error                = 3&lt;br /&gt;        lifetime_error              = 4&lt;br /&gt;        lifetime_dynpro_dynpro_link = 5.&lt;br /&gt;&lt;br /&gt;    CREATE OBJECT text_editor&lt;br /&gt;      EXPORTING&lt;br /&gt;        wordwrap_mode              =&lt;br /&gt;cl_gui_textedit=&amp;gt;wordwrap_at_fixed_position&lt;br /&gt;        wordwrap_position          = line_length&lt;br /&gt;        wordwrap_to_linebreak_mode = cl_gui_textedit=&amp;gt;true&lt;br /&gt;        parent                     = custom_container&lt;br /&gt;      EXCEPTIONS&lt;br /&gt;        error_cntl_create          = 1&lt;br /&gt;        error_cntl_init            = 2&lt;br /&gt;        error_cntl_link            = 3&lt;br /&gt;        error_dp_create            = 4&lt;br /&gt;        gui_type_not_supported     = 5&lt;br /&gt;        others                     = 6.&lt;br /&gt;&lt;br /&gt;    CALL METHOD text_editor-&amp;gt;set_readonly_mode&lt;br /&gt;      EXPORTING readonly_mode = 1.&lt;br /&gt;  ENDIF.&lt;br /&gt;&lt;br /&gt;  PERFORM get_randoms.&lt;br /&gt;&lt;br /&gt;ENDFORM.&lt;br /&gt;&lt;br /&gt;*&amp;---------------------------------------------------------*&lt;br /&gt;*&amp;      Form  get_randoms                                  *&lt;br /&gt;*&amp;---------------------------------------------------------*&lt;br /&gt;FORM get_randoms.&lt;br /&gt;&lt;br /&gt;  CREATE DATA data_rand TYPE ty_rand_table.&lt;br /&gt;  ASSIGN data_rand-&amp;gt;* TO &amp;lt;fs_rand_table&amp;gt;.&lt;br /&gt;&lt;br /&gt;  WHILE flag EQ space.&lt;br /&gt;    CALL FUNCTION 'QF05_RANDOM_INTEGER'&lt;br /&gt;         EXPORTING&lt;br /&gt;              ran_int_max   = 5&lt;br /&gt;              ran_int_min   = 1&lt;br /&gt;         IMPORTING&lt;br /&gt;              ran_int       = ran_int&lt;br /&gt;         EXCEPTIONS&lt;br /&gt;              invalid_input = 1&lt;br /&gt;              OTHERS        = 2.&lt;br /&gt;&lt;br /&gt;    READ TABLE t_rand_table ASSIGNING &amp;lt;fs_rand_value&amp;gt;&lt;br /&gt;    WITH KEY value = ran_int.&lt;br /&gt;    IF sy-subrc NE 0.&lt;br /&gt;      &amp;lt;fs_rand_table&amp;gt;-value = ran_int.&lt;br /&gt;      APPEND &amp;lt;fs_rand_table&amp;gt; TO t_rand_table.&lt;br /&gt;      counter = counter + 1.&lt;br /&gt;      IF counter EQ 5.&lt;br /&gt;        flag = 'X'.&lt;br /&gt;      ENDIF.&lt;br /&gt;    ENDIF.&lt;br /&gt;  ENDWHILE.&lt;br /&gt;&lt;br /&gt;  game_counter = 1.&lt;br /&gt;&lt;br /&gt;ENDFORM.                    " get_randoms&lt;br /&gt;&lt;br /&gt;*&amp;---------------------------------------------------------*&lt;br /&gt;*&amp;      Form  validate_game                                *&lt;br /&gt;*&amp;---------------------------------------------------------*&lt;br /&gt;FORM validate_game.&lt;br /&gt;&lt;br /&gt;  LOOP AT t_rand_table ASSIGNING &amp;lt;fs_rand_value&amp;gt;.&lt;br /&gt;    IF gv_one IS INITIAL.&lt;br /&gt;      gv_one = &amp;lt;fs_rand_value&amp;gt;-value.&lt;br /&gt;    ELSEIF gv_two IS INITIAL.&lt;br /&gt;      gv_two = &amp;lt;fs_rand_value&amp;gt;-value.&lt;br /&gt;    ELSEIF gv_three IS INITIAL.&lt;br /&gt;      gv_three = &amp;lt;fs_rand_value&amp;gt;-value.&lt;br /&gt;    ELSEIF gv_four IS INITIAL.&lt;br /&gt;      gv_four = &amp;lt;fs_rand_value&amp;gt;-value.&lt;br /&gt;    ELSEIF gv_five IS INITIAL.&lt;br /&gt;      gv_five = &amp;lt;fs_rand_value&amp;gt;-value.&lt;br /&gt;    ENDIF.&lt;br /&gt;  ENDLOOP.&lt;br /&gt;&lt;br /&gt;  CLEAR: gv_user_one,gv_user_two,gv_user_three,&lt;br /&gt;         gv_user_four,gv_user_five.&lt;br /&gt;&lt;br /&gt;  LOOP AT t_user_table ASSIGNING &amp;lt;fs_user_table&amp;gt;.&lt;br /&gt;    IF gv_user_one IS INITIAL.&lt;br /&gt;      gv_user_one = &amp;lt;fs_user_table&amp;gt;-value.&lt;br /&gt;    ELSEIF gv_user_two IS INITIAL.&lt;br /&gt;      gv_user_two = &amp;lt;fs_user_table&amp;gt;-value.&lt;br /&gt;    ELSEIF gv_user_three IS INITIAL.&lt;br /&gt;      gv_user_three = &amp;lt;fs_user_table&amp;gt;-value.&lt;br /&gt;    ELSEIF gv_user_four IS INITIAL.&lt;br /&gt;      gv_user_four = &amp;lt;fs_user_table&amp;gt;-value.&lt;br /&gt;    ELSEIF gv_user_five IS INITIAL.&lt;br /&gt;      gv_user_five = &amp;lt;fs_user_table&amp;gt;-value.&lt;br /&gt;    ENDIF.&lt;br /&gt;  ENDLOOP.&lt;br /&gt;&lt;br /&gt;  CLEAR: game_win.&lt;br /&gt;&lt;br /&gt;  IF gv_one EQ gv_user_one.&lt;br /&gt;    message_one = 'First is Ok!'.&lt;br /&gt;    game_win = game_win + 1.&lt;br /&gt;  ELSE.&lt;br /&gt;    message_one = 'First is Wrong!'.&lt;br /&gt;    game_win = game_win - 1.&lt;br /&gt;  ENDIF.&lt;br /&gt;  IF gv_two EQ gv_user_two.&lt;br /&gt;    message_two = 'Second is Ok!'.&lt;br /&gt;    game_win = game_win + 1.&lt;br /&gt;  ELSE.&lt;br /&gt;    message_two = 'Second is Wrong!'.&lt;br /&gt;    game_win = game_win - 1.&lt;br /&gt;  ENDIF.&lt;br /&gt;  IF gv_three EQ gv_user_three.&lt;br /&gt;    message_three = 'Third is Ok!'.&lt;br /&gt;    game_win = game_win + 1.&lt;br /&gt;  ELSE.&lt;br /&gt;    message_three = 'Third is Wrong!'.&lt;br /&gt;    game_win = game_win - 1.&lt;br /&gt;  ENDIF.&lt;br /&gt;  IF gv_four EQ gv_user_four.&lt;br /&gt;    message_four = 'Forth is Ok!'.&lt;br /&gt;    game_win = game_win + 1.&lt;br /&gt;  ELSE.&lt;br /&gt;    message_four = 'Forth is Wrong!'.&lt;br /&gt;    game_win = game_win - 1.&lt;br /&gt;  ENDIF.&lt;br /&gt;  IF gv_five EQ gv_user_five.&lt;br /&gt;    message_five = 'Fifth is Ok!'.&lt;br /&gt;    game_win = game_win + 1.&lt;br /&gt;  ELSE.&lt;br /&gt;    message_five = 'Fifth is Wrong!'.&lt;br /&gt;    game_win = game_win - 1.&lt;br /&gt;  ENDIF.&lt;br /&gt;&lt;br /&gt;  IF game_win EQ 5.&lt;br /&gt;    CLEAR: message_one,message_two,message_three,&lt;br /&gt;           message_four,message_five.&lt;br /&gt;    message_one = 'You win!'.&lt;br /&gt;    CONCATENATE 'In' game_counter 'tries'&lt;br /&gt;    INTO message_two SEPARATED BY space.&lt;br /&gt;  ELSE.&lt;br /&gt;    game_counter = game_counter + 1.&lt;br /&gt;    CLEAR: gv_flag_one,gv_flag_two,gv_flag_three,&lt;br /&gt;           gv_flag_four,gv_flag_five,sy-ucomm.&lt;br /&gt;  ENDIF.&lt;br /&gt;&lt;br /&gt;ENDFORM.                    " validate_game&lt;br /&gt;&lt;br /&gt;*&amp;---------------------------------------------------------*&lt;br /&gt;*&amp;      Module  STATUS_0100  OUTPUT                        *&lt;br /&gt;*&amp;---------------------------------------------------------*&lt;br /&gt;MODULE status_0100 OUTPUT.&lt;br /&gt;&lt;br /&gt;  SET PF-STATUS 'MAIN'.&lt;br /&gt;  SET TITLEBAR 'TITLE'.&lt;br /&gt;&lt;br /&gt;  IF flag EQ space.&lt;br /&gt;    PERFORM call_editor.&lt;br /&gt;  ELSE.&lt;br /&gt;&lt;br /&gt;    LOOP AT SCREEN.&lt;br /&gt;      IF screen-name EQ 'ONE' AND gv_flag_one EQ 'X'.&lt;br /&gt;        screen-invisible = 1.&lt;br /&gt;        MODIFY SCREEN.&lt;br /&gt;      ENDIF.&lt;br /&gt;      IF screen-name EQ 'TWO' AND gv_flag_two EQ 'X'.&lt;br /&gt;        screen-invisible = 1.&lt;br /&gt;        MODIFY SCREEN.&lt;br /&gt;      ENDIF.&lt;br /&gt;      IF screen-name EQ 'THREE' AND gv_flag_three EQ 'X'.&lt;br /&gt;        screen-invisible = 1.&lt;br /&gt;        MODIFY SCREEN.&lt;br /&gt;      ENDIF.&lt;br /&gt;      IF screen-name EQ 'FOUR' AND gv_flag_four EQ 'X'.&lt;br /&gt;        screen-invisible = 1.&lt;br /&gt;        MODIFY SCREEN.&lt;br /&gt;      ENDIF.&lt;br /&gt;      IF screen-name EQ 'FIVE' AND gv_flag_five EQ 'X'.&lt;br /&gt;        screen-invisible = 1.&lt;br /&gt;        MODIFY SCREEN.&lt;br /&gt;      ENDIF.&lt;br /&gt;    ENDLOOP.&lt;br /&gt;&lt;br /&gt;    IF button_count EQ 5.&lt;br /&gt;&lt;br /&gt;      CLEAR button_count.&lt;br /&gt;&lt;br /&gt;      SHIFT gv_line LEFT DELETING LEADING space.&lt;br /&gt;&lt;br /&gt;      SPLIT gv_line AT space INTO TABLE t_user_table.&lt;br /&gt;&lt;br /&gt;      PERFORM validate_game.&lt;br /&gt;&lt;br /&gt;      xtext = gv_line.&lt;br /&gt;      APPEND xtext TO t_game_lines.&lt;br /&gt;&lt;br /&gt;      CLEAR gv_line.&lt;br /&gt;&lt;br /&gt;      CALL METHOD text_editor-&amp;gt;set_text_as_r3table&lt;br /&gt;      EXPORTING table = t_game_lines.&lt;br /&gt;&lt;br /&gt;    ENDIF.&lt;br /&gt;  ENDIF.&lt;br /&gt;&lt;br /&gt;ENDMODULE.                 " STATUS_0100  OUTPUT&lt;br /&gt;&lt;br /&gt;*&amp;---------------------------------------------------------*&lt;br /&gt;*&amp;      Module  USER_COMMAND_0100  INPUT                   *&lt;br /&gt;*&amp;---------------------------------------------------------*&lt;br /&gt;MODULE user_command_0100 INPUT.&lt;br /&gt;&lt;br /&gt;  w_ucomm = sy-ucomm.&lt;br /&gt;&lt;br /&gt;  CASE w_ucomm.&lt;br /&gt;    WHEN 'BACK' OR 'CANCEL' OR 'EXIT'.&lt;br /&gt;      SET SCREEN 0.&lt;br /&gt;      EXIT.&lt;br /&gt;    WHEN 'ONE'.&lt;br /&gt;      CONCATENATE gv_line '1' INTO&lt;br /&gt;      gv_line SEPARATED BY space.&lt;br /&gt;      button_count = button_count + 1.&lt;br /&gt;      gv_flag_one = 'X'.&lt;br /&gt;    WHEN 'TWO'.&lt;br /&gt;      CONCATENATE gv_line '2' INTO&lt;br /&gt;      gv_line SEPARATED BY space.&lt;br /&gt;      button_count = button_count + 1.&lt;br /&gt;      gv_flag_two = 'X'.&lt;br /&gt;    WHEN 'THREE'.&lt;br /&gt;      CONCATENATE gv_line '3' INTO&lt;br /&gt;      gv_line SEPARATED BY space.&lt;br /&gt;      button_count = button_count + 1.&lt;br /&gt;      gv_flag_three = 'X'.&lt;br /&gt;    WHEN 'FOUR'.&lt;br /&gt;      CONCATENATE gv_line '4' INTO&lt;br /&gt;      gv_line SEPARATED BY space.&lt;br /&gt;      button_count = button_count + 1.&lt;br /&gt;      gv_flag_four = 'X'.&lt;br /&gt;    WHEN 'FIVE'.&lt;br /&gt;      CONCATENATE gv_line '5' INTO&lt;br /&gt;      gv_line SEPARATED BY space.&lt;br /&gt;      button_count = button_count + 1.&lt;br /&gt;      gv_flag_five = 'X'.&lt;br /&gt;  ENDCASE.&lt;br /&gt;&lt;br /&gt;ENDMODULE.                 " USER_COMMAND_0100  INPUT&lt;br /&gt;&lt;/PRE&gt;&lt;br /&gt;Finalmente, tomé algunos pantallazos -;)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_eKAKUbdu3CI/SBeZ2fmc61I/AAAAAAAAAWw/X0jF3sU7eE0/s1600-h/ABAP_Mind_Game_2.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp2.blogger.com/_eKAKUbdu3CI/SBeZ2fmc61I/AAAAAAAAAWw/X0jF3sU7eE0/s400/ABAP_Mind_Game_2.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5194789856669920082" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_eKAKUbdu3CI/SBeZ9Pmc62I/AAAAAAAAAW4/LuD55sNjHOU/s1600-h/ABAP_Mind_Game_3.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp1.blogger.com/_eKAKUbdu3CI/SBeZ9Pmc62I/AAAAAAAAAW4/LuD55sNjHOU/s400/ABAP_Mind_Game_3.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5194789972634037090" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_eKAKUbdu3CI/SBeaC_mc63I/AAAAAAAAAXA/A4kR_6uRMdk/s1600-h/ABAP_Mind_Game_4.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_eKAKUbdu3CI/SBeaC_mc63I/AAAAAAAAAXA/A4kR_6uRMdk/s400/ABAP_Mind_Game_4.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5194790071418284914" /&gt;&lt;/a&gt;&lt;br /&gt;Espero que les guste -:)&lt;br /&gt;&lt;br /&gt;Saludos,&lt;br /&gt;&lt;br /&gt;Blag.&lt;br /&gt;&lt;/DIV&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13698376-2754442627783019839?l=atejada.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atejada.blogspot.com/feeds/2754442627783019839/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13698376&amp;postID=2754442627783019839' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/2754442627783019839'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/2754442627783019839'/><link rel='alternate' type='text/html' href='http://atejada.blogspot.com/2008/04/master-mind-juego-en-abap.html' title='Master Mind  - Juego en ABAP'/><author><name>Alvaro "Blag" Tejada Galindo</name><uri>http://www.blogger.com/profile/12061593528820409779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='https://weblogs.sdn.sap.com/images/people/alvaro_tajeda.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_eKAKUbdu3CI/SBeZevmc60I/AAAAAAAAAWo/xFtRFJ_QM6o/s72-c/ABAP_Mind_Game_1.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13698376.post-3525288774285165405</id><published>2008-04-28T09:11:00.000-07:00</published><updated>2008-04-28T09:19:57.685-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Misc'/><title type='text'>Ein Ami comes to Lippstadt</title><content type='html'>&lt;DIV ALIGN="Justify"&gt;&lt;br /&gt;El sábado recogí de la oficina de correos el libro de mi amigo &lt;a href="http://stores.lulu.com/cmehil"&gt;Craig Cmehil&lt;/a&gt; titulado &lt;a href="http://www.lulu.com/content/393220"&gt;&lt;span style="font-weight:bold;"&gt;Ein Ami comes to Lippstadt&lt;/span&gt;&lt;/a&gt; que vendría a significar &lt;span style="font-weight:bold;"&gt;Un Norte Americano viene a Lippstadt&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_eKAKUbdu3CI/SBX35fmc6zI/AAAAAAAAAWg/8pBMwpfZrLU/s1600-h/Ein_Ami.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_eKAKUbdu3CI/SBX35fmc6zI/AAAAAAAAAWg/8pBMwpfZrLU/s400/Ein_Ami.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5194330312349117234" /&gt;&lt;/a&gt;&lt;br /&gt;El libro, es bastante interesante, puesto que cuenta en versión resumida como Craig salió de Estados Unidos para irse a Alemania. A modo de historias cortas nos damos cuenta de como las costumbres y modo de vida pueden cambiar tanto de un país a otro o de un continente a otro...Realmente disfruté mucho leyendo el libro, así que les recomiendo que lo compren -;)&lt;br /&gt;&lt;br /&gt;Saludos,&lt;br /&gt;&lt;br /&gt;Blag.&lt;br /&gt;&lt;/DIV&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13698376-3525288774285165405?l=atejada.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atejada.blogspot.com/feeds/3525288774285165405/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13698376&amp;postID=3525288774285165405' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/3525288774285165405'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/3525288774285165405'/><link rel='alternate' type='text/html' href='http://atejada.blogspot.com/2008/04/ein-ami-comes-to-lippstadt.html' title='Ein Ami comes to Lippstadt'/><author><name>Alvaro "Blag" Tejada Galindo</name><uri>http://www.blogger.com/profile/12061593528820409779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='https://weblogs.sdn.sap.com/images/people/alvaro_tajeda.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_eKAKUbdu3CI/SBX35fmc6zI/AAAAAAAAAWg/8pBMwpfZrLU/s72-c/Ein_Ami.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13698376.post-1671790782260928954</id><published>2008-04-23T07:23:00.000-07:00</published><updated>2008-04-23T07:32:55.038-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Misc'/><title type='text'>Mis discos favoritos de Punk</title><content type='html'>&lt;DIV ALIGN="JUSTIFY"&gt;&lt;br /&gt;Llevo escuchando Punk desde hace 16 años...Así que está es una pequeña lista gráfica de mis discos favoritos de todos los tiempos -;)&lt;br /&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Never Mind the Bollocks - Sex Pistols&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_eKAKUbdu3CI/SA9HDfmc6tI/AAAAAAAAAVw/mr6syGbJHEs/s1600-h/Never+Mind+the+Bollocks.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp2.blogger.com/_eKAKUbdu3CI/SA9HDfmc6tI/AAAAAAAAAVw/mr6syGbJHEs/s400/Never+Mind+the+Bollocks.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5192447020729428690" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Fresh Fruit for Rotting Vegetables - Dead Kennedys&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_eKAKUbdu3CI/SA9Hjvmc6uI/AAAAAAAAAV4/aEdXbDL0sac/s1600-h/Fresh+Fruit.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp3.blogger.com/_eKAKUbdu3CI/SA9Hjvmc6uI/AAAAAAAAAV4/aEdXbDL0sac/s400/Fresh+Fruit.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5192447574780209890" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Against the Grain - Bad Religion&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_eKAKUbdu3CI/SA9H0_mc6vI/AAAAAAAAAWA/Ma9_nlI6AFg/s1600-h/Against+the+grain.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_eKAKUbdu3CI/SA9H0_mc6vI/AAAAAAAAAWA/Ma9_nlI6AFg/s400/Against+the+grain.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5192447871132953330" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Are young and good looking - The Dwarves&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_eKAKUbdu3CI/SA9IF_mc6wI/AAAAAAAAAWI/8ScpnqHqX3A/s1600-h/Are+young.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_eKAKUbdu3CI/SA9IF_mc6wI/AAAAAAAAAWI/8ScpnqHqX3A/s400/Are+young.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5192448163190729474" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;White Trash, Two Heebs and a Bean - NOFX&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_eKAKUbdu3CI/SA9IOPmc6xI/AAAAAAAAAWQ/2eQixbQp_uo/s1600-h/White+Trash.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp1.blogger.com/_eKAKUbdu3CI/SA9IOPmc6xI/AAAAAAAAAWQ/2eQixbQp_uo/s400/White+Trash.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5192448304924650258" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Famous Monsters - Misfits&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_eKAKUbdu3CI/SA9IYPmc6yI/AAAAAAAAAWY/9xTdNWZ1usc/s1600-h/Famous+Monsters.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp1.blogger.com/_eKAKUbdu3CI/SA9IYPmc6yI/AAAAAAAAAWY/9xTdNWZ1usc/s400/Famous+Monsters.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5192448476723342114" /&gt;&lt;/a&gt;&lt;br /&gt;Saludos,&lt;br /&gt;&lt;br /&gt;Blag.&lt;br /&gt;&lt;/DIV&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13698376-1671790782260928954?l=atejada.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atejada.blogspot.com/feeds/1671790782260928954/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13698376&amp;postID=1671790782260928954' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/1671790782260928954'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/1671790782260928954'/><link rel='alternate' type='text/html' href='http://atejada.blogspot.com/2008/04/mis-discos-favoritos-de-punk.html' title='Mis discos favoritos de Punk'/><author><name>Alvaro "Blag" Tejada Galindo</name><uri>http://www.blogger.com/profile/12061593528820409779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='https://weblogs.sdn.sap.com/images/people/alvaro_tajeda.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_eKAKUbdu3CI/SA9HDfmc6tI/AAAAAAAAAVw/mr6syGbJHEs/s72-c/Never+Mind+the+Bollocks.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13698376.post-7337034939271623654</id><published>2008-04-22T06:52:00.000-07:00</published><updated>2008-04-22T06:57:57.279-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SDN'/><category scheme='http://www.blogger.com/atom/ns#' term='Misc'/><title type='text'>Bienvenida Kiarita!!!</title><content type='html'>&lt;DIV ALIGN="JUSTIFY"&gt;&lt;br /&gt;Algunos de ustedes deben saberlo...otros seguramente no...Pero ya soy padre -:')&lt;br /&gt;&lt;br /&gt;Mi hija Kiara nació el Jueves 17 de Abril pesando 2,854 kilos y midiendo 48.5 centimetros...No expresar la alegría cuando la vi por primera vezy cuando la sostuve en mis brazos...No hay nada que se compare con la experiencia de ser un padre...&lt;br /&gt;&lt;br /&gt;&lt;a href="https://www.sdn.sap.com/irj/sdn/weblogs?blog=/pub/u/1915"&gt;Marilyn Pratt&lt;/a&gt; escribió un emotivo blog en el SCN para celebrar este evento &lt;a href="https://weblogs.sdn.sap.com/pub/wlg/9405"&gt;SAP Community Network: An Extended Family To Some&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Les dejo un par de fotos -:)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_eKAKUbdu3CI/SA3umvmc6rI/AAAAAAAAAVg/AEWlt3L1euw/s1600-h/DSC02642.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp1.blogger.com/_eKAKUbdu3CI/SA3umvmc6rI/AAAAAAAAAVg/AEWlt3L1euw/s400/DSC02642.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5192068294808234674" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_eKAKUbdu3CI/SA3uvvmc6sI/AAAAAAAAAVo/Dnyf6FNuuuo/s1600-h/DSC02653.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp1.blogger.com/_eKAKUbdu3CI/SA3uvvmc6sI/AAAAAAAAAVo/Dnyf6FNuuuo/s400/DSC02653.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5192068449427057346" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Saludos,&lt;br /&gt;&lt;br /&gt;Blag.&lt;br /&gt;&lt;/DIV&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13698376-7337034939271623654?l=atejada.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atejada.blogspot.com/feeds/7337034939271623654/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13698376&amp;postID=7337034939271623654' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/7337034939271623654'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/7337034939271623654'/><link rel='alternate' type='text/html' href='http://atejada.blogspot.com/2008/04/bienvenida-kiarita.html' title='Bienvenida Kiarita!!!'/><author><name>Alvaro "Blag" Tejada Galindo</name><uri>http://www.blogger.com/profile/12061593528820409779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='https://weblogs.sdn.sap.com/images/people/alvaro_tajeda.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_eKAKUbdu3CI/SA3umvmc6rI/AAAAAAAAAVg/AEWlt3L1euw/s72-c/DSC02642.jpg' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13698376.post-652580540295067233</id><published>2008-04-16T08:10:00.000-07:00</published><updated>2008-04-16T08:13:51.286-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Misc'/><title type='text'>Quien está mal...SAP o los negocios?</title><content type='html'>&lt;DIV ALIGN="JUSTIFY"&gt;&lt;br /&gt;Revisando el &lt;a href="http://sapfacts.elsewhat.com/"&gt;SAP Facts&lt;/a&gt; encontré uno realmente muy bueno... &lt;a href="http://sapfacts.elsewhat.com/275"&gt;Fact&lt;/a&gt;&lt;br /&gt;&lt;blockquote&gt;SAP doesn't need enhanced. It is your business process that is wrong.&lt;/blockquote&gt;&lt;br /&gt;Traduciendo...&lt;br /&gt;&lt;blockquote&gt;SAP no necesita ser mejorado. Es tu proceso de negocio el que está mal.&lt;/blockquote&gt;&lt;br /&gt;Saludos,&lt;br /&gt;&lt;br /&gt;Blag.&lt;br /&gt;&lt;/DIV&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13698376-652580540295067233?l=atejada.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atejada.blogspot.com/feeds/652580540295067233/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13698376&amp;postID=652580540295067233' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/652580540295067233'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/652580540295067233'/><link rel='alternate' type='text/html' href='http://atejada.blogspot.com/2008/04/quien-est-malsap-o-los-negocios.html' title='Quien está mal...SAP o los negocios?'/><author><name>Alvaro "Blag" Tejada Galindo</name><uri>http://www.blogger.com/profile/12061593528820409779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='https://weblogs.sdn.sap.com/images/people/alvaro_tajeda.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13698376.post-2983250894661223643</id><published>2008-04-16T07:53:00.001-07:00</published><updated>2008-04-16T07:58:23.358-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='FLEX'/><title type='text'>Flex 4?</title><content type='html'>&lt;DIV ALIGN="JUSTIFY"&gt;&lt;br /&gt;Al parecer, la gente de &lt;a href="http://www.adobe.com"&gt;Adobe&lt;/a&gt; no descanza...A pesar de que hace relativamente poco tiempo lanzaron &lt;a href="http://www.adobe.com/products/flex/"&gt;Flex 3&lt;/a&gt; ahora están trabando en &lt;a href="http://opensource.adobe.com/wiki/display/flexsdk/Flex+4"&gt;Flex 4&lt;/a&gt; código clave &lt;span style="font-weight:bold;"&gt;Gumbo&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Definitivamente estas son buenas noticias, Flex me encanta...Es versatil, fácil de programar y realmente ha redefinido las páginas web...Pero yo digo...Uno se compró Flex 2...Al poco tiempo tuvo que actualizarse a Flex 3 y a finales de año podría actualizar a Flex 4 Beta? Además...Adobe no tiene tiendas en Perú...Por lo cual por más que quiera no podría comprarlo -:(&lt;br /&gt;&lt;br /&gt;En fin...Supongo que no podemos detener la tecnología solamente por el hecho de que avanza más rápido de lo que nosotros aprendemos...&lt;br /&gt;&lt;br /&gt;Saludos,&lt;br /&gt;&lt;br /&gt;Blag.&lt;br /&gt;&lt;/DIV&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13698376-2983250894661223643?l=atejada.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atejada.blogspot.com/feeds/2983250894661223643/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13698376&amp;postID=2983250894661223643' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/2983250894661223643'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/2983250894661223643'/><link rel='alternate' type='text/html' href='http://atejada.blogspot.com/2008/04/flex-4.html' title='Flex 4?'/><author><name>Alvaro "Blag" Tejada Galindo</name><uri>http://www.blogger.com/profile/12061593528820409779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='https://weblogs.sdn.sap.com/images/people/alvaro_tajeda.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13698376.post-3986344401520667704</id><published>2008-04-16T07:36:00.000-07:00</published><updated>2008-04-16T07:51:08.767-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Misc'/><title type='text'>La caída de Windows?</title><content type='html'>&lt;DIV ALIGN="JUSTIFY"&gt;&lt;br /&gt;Estuve leyendo un post bastante interesante ahora en la mañana &lt;a href="http://www.pe.terra.com/tecnologia/interna/0,,OI2745401-EI4128,00.html"&gt;La evolución tecnológica marcaría el final de Windows&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Según el artículo, Microsoft no está haciendo nada nuevo, solamente "mejorando" lo que ya tiene...&lt;br /&gt;&lt;br /&gt;Veamos...Yo he utilizando una gran variedad de Sistemas Operativos a lo largo de mi vida y mi carrera...&lt;br /&gt;&lt;br /&gt;* Windows (3.1,95,98,ME,NT,2003 Server,XP,Vista)&lt;br /&gt;* Novell Netware&lt;br /&gt;* Mac OS (Varias versiones incluida OS X)&lt;br /&gt;* Linux (RedHat, Suse, Knoppix, Slax)&lt;br /&gt;&lt;br /&gt;Algunos han sido buenos, otros no tanto, otros eran casi copias de los anteriores y otros simplemente distribuciones.&lt;br /&gt;&lt;br /&gt;En el caso específico de Windows, antes del XP, windows era malo, muy malo...Con XP para mi todo cambió puesto que me encanta...Con Vista...Tuvieron un retroceso...&lt;br /&gt;&lt;br /&gt;Cual es el problema? Muy simple...Una cosa es tomar un sistema operativo sólido como XP y mejorarlo...Pero otra cosa muy distinta es tomar XP y utilizar su código fuente para crear algo totalmente nuevo...&lt;br /&gt;&lt;br /&gt;Yo no digo que Microsoft debería haber escrito Vista de cero...No es necesario reinventar la rueda...Pero repitiendo lo que ya dije, tomar el código existente para crear algo nuevo, simplemente no funciona...&lt;br /&gt;&lt;br /&gt;Los que hayan utilizado Vista, saben que muchos de los programa que usamos actualmente no son compatibles, pero aún cuando hablamos de los Drivers...En muchos casos no basta con formatear el disco para instalar otro SO, puesto que Vista es un sistema que no se deja matar facilmente...Lo que queda es crear una partición o utilizar el WMWare o el Virtual PC para instalar un XP dentro de Vista...&lt;br /&gt;&lt;br /&gt;Lo mismo pasó como Windows ME...Windows 98 logró ser bueno luego de miles de Service Packs...Pero el ME fué totalmente una desgracias y verguenza para todos...&lt;br /&gt;&lt;br /&gt;Se habrán dado cuenta también de que muchas empresas están apostando seriamente por la web...Versiones on-line de Photoshop, Google Docs, Zoho y demás ofrecen suites de ofimatica totalmente gratuitas y vía web...No más instalaciones ni espacio en disco duro...Pero que hace Microsoft? Me parece que hay un Office On-Line...Pero quien lo usa? Está hecho con ASP y Ajax? O están aprovechando Silverlight así como Adobe hace con Flex y AIR?&lt;br /&gt;&lt;br /&gt;El problema con Microsoft es que practimante nos obliga a comprar Vista, puesto la mayoría de Laptops viene con Vista instalado por defecto...Gracias a dios mi LG T1 vino con XP...De otra manera, no la habría comprado -;)&lt;br /&gt;&lt;br /&gt;Saludos,&lt;br /&gt;&lt;br /&gt;Blag.&lt;br /&gt;&lt;/DIV&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13698376-3986344401520667704?l=atejada.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atejada.blogspot.com/feeds/3986344401520667704/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13698376&amp;postID=3986344401520667704' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/3986344401520667704'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13698376/posts/default/3986344401520667704'/><link rel='alternate' type='text/html' href='http://atejada.blogspot.com/2008/04/la-cada-de-windows.html' title='La caída de Windows?'/><author><name>Alvaro "Blag" Tejada Galindo</name><uri>http://www.blogger.com/profile/12061593528820409779</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='https://weblogs.sdn.sap.com/images/people/alvaro_tajeda.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13698376.post-6677438954730980366</id><published>2008-04-16T07:33:00.000-07:00</published><updated>2008-04-16T07:36:40.030-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><title type='text'>Cuanto meses de vida tienes?</title><content type='html'>&lt;DIV ALIGN="JUSTIFY"&gt;&lt;br /&gt;Alguien en los foros de &lt;a href="https://forums.sdn.sap.com/category.jspa?categoryID=39"&gt;Scripting Languages del SCN&lt;/a&gt; preguntó como podía hacer en PHP para determinar la edad en meses de una persona...Est
