The Third Renaissance: Game Development (Part 1).

My personal story of how I bounced from tech stack to another and you can too!

Hello folks!

So I am bringing back from death my personal blog. The title (which is related to the Animatrix movie), I think it fits of what is happening right now with my professional path.

The last time I posted something was related to web development. Most of you don’t know the story, but yes, I came back to the world of websites, e-commerce solutions, blogs in WordPress and stuff, so I am going back to 2018 right now, starting from the last post I created here:

TL;DR -> After starting in game development, stop believing myself and went to web development, moving to AS400/iSeries development and goind back (again) to web development…I returned home as a game developer.

Now, the details:

April 2018 I was developing a web app for productivity and gamification stuff so I can turn it into a startup or business and fulfill my desire of having something of my own. After many pitches, improvements, feedback and running out of money, it was put “on hold”.

No, in fact, I still was programming the app after work, but my day job was demanding, there were a lot of things to learn and improve in the agency (Oh, right, I was in a Digital Marketing Agency) and you know that this kind of business demand a lot, since you have to work for a lot of clients.

I stayed there for seven months. To be honest, I needed more money since life got a little bit complicated so I took part from there, everything was cool and I appreciated the opportunity.

Usually I first quit the job before start searching for jobs but in this case, things got way more complicated. So me and my girlfriend moved to a cheaper place to live, cut down expenses, I have to attend some personal matters and then look for a job.

In the meantime I was freelancing projects from existing clients but that would not pay all the bills, I had to find a job soon. My web application needed more research and development in  order to be a viable product, I was thinking that maybe I was not that passionate about the project.

What I did was to improve my skills in web development. Since I was in the IBM world, I had to take off the rust I gained fast. I was suffering from the “impostor syndrome”, thinking that I did not have what it takes to be a competitive programmer.

Despite the thought, I kept learning and practicing. Finally I got a job in a worldwide sport’s retailer as a back-end developer for their new e-commerce solution. I pass all the tests, the manager was stoked of my personality and knowledge, he immediately hires me (cool Spanish dude BTW).

I was looking forward to do a great job in the company and I was aligned to their values and work culture. I had to work as a salesman in the store to get their business processes (smart!).

I had a good time in there, until my work was so overwhelmed that I stopped enjoying it…

You see, I was proficient in PHP programming but the company required a Python developer as well and…I did not know Python enough to mantain an enterprise application. The e-commerce solution based in Prestashop required some experience in it and I did not have it.

Also, it was like a copy-paste from the company’s branch in Canada…so if I needed something I should contact the people from there.

I had to learn the fastest way possible, both Prestashop framework, Python and Django…

It was a HUGE learning curve but I accepted the challenge!

I thought everything was working as expected. The release of the new store would be January 2020. I made some code changes, ran some tests, all good, maybe not, clock is ticking and well…

…it was a disaster for me.

I have never felt that I could not get the job done until that experience. I told my manager that this was way beyond me and I presented my resignation.

I did not want to leave but, facts are facts. I was blocking the progress of the e-commerce solution and I recommended them that they should bring someone who can do it.

It is not easy to admit defeat, but I had to.

I stayed in the job for (guess what?) 7 months again and well, so after some days after release of the project I was a free agent.

Ok, this post became way more longer than expected. I think it could be a part 2 later.

…to be continued!

 

Web development improvement: Learning ReactJS

Folks,

Sometimes I believe that being in the software engineering world is like a doctor: You have to catch up all the time in the new technology, frameworks and tools that are out there. 

Most of the time I have written programs and stuff for the back end, but you know that as a web developer you need to have the knowledge to work both front (at least something that can be eye-candy for the customer) and back.

I have a personal love-hate relationship with javascript, because I know it has a lot of potential but it is frustrating at the same time. Being honest tough, I empirically learned this programming language, but I wanted more.

Polishing my javascript coding skills is a must for me right now, specially when I was first introduced to ReactVR. I am a huge fan of this new way of doing things with the computer and I have my dreams where I want to create something fantastic using Virtual Reality. Therefore, little by little I will start creating that opportunity learning ReactJS.

So I looked up for nice books and courses, starting in codecademy and then moving to something else. I don’t remember how but I found the Complete React Course link , created by Andrew Mead which I paid in a sale he offered (can’t remember if I found him on twitter or somewhere else), it has been a hell of experience!

I had no clue how this new way of using javascript worked, but then I starting to understand how to use this in order to create nice web applications.

The course is long but I think it covers important stuff like setting up your environment, build your first web app, third party tools, understanding components, props, states, etc.

So yeah, I’ll keep posting stuff about the course here, which helps me to go over again the concepts and exercises in the course. When I finish it, I could share new tips and tricks and keep learning!

How to redirect after payment confirmation in your website using Paypal?

Hello again…

I want to share with you some tips on how to use the Paypal module in your website, specially when you try to redirect to your website after the payment is verified and completed.

I am not going to explain the whole process, just want to share a few tips on how to complete the purchase flow and get back to your site. There should be many other options out there as well, hopefully this one can be useful in your project.

That being said, let us proceed with this quick tip!

I have used the basic implementation of Paypal: Express Checkout. Once you set up the script provided by Paypal according to your needs, pay attention on the ‘OnAuthorize’ function:

paypal-1

You can use the window.location.href object in Javascript to redirect to your site once the REST api authorized the payment. Originally, the script has the window.alert object so it shows you the window with the ‘Payment completed’ message.

This small snippet has worked for me in basic implementations when I only want to know if the user paid correctly. If you need any extra information (i.e. transaction ID) then I think you should need a different solution.

 

RPG All free: CRUD example

Hello everyone!

This is a quick example of how to create a CRUD program using the “new” all free format which helps to have a neat and easy to understand code. I have been practicing this new sintax, basically transforming RPGIV or RPGLE programs with the traditional HFDC sheet so it has been really fun!

Most of the program is written in the very well known free format and the “all free” format is easy to understand. Maybe the challenge is to learn and get used to the new syntax.

Many of the developers I know don’t know how to code in all free mode so they stick even in the old RPGIV with the fixed format which sometimes is way too hard to read (loops and conditionals, everyone?).

Now, you can try this in the SEU but in order to avoid the error syntax messages, you need to disable this option when pressing Shift+F1 (or F13) and then turn off syntax validation. It is a shame that the SEU do not recognize this new way to code and if you have access to RDi it is a big advatange when coding in all free.

The original DDS for the physical and dspf file, and the original RPG code was taken from the great website of David Mount, which content has helped me to understand the basics and more when I was a rookie years ago so feel free to pay him a visit here.

From there I took the RPGLE program and transform it to free format.

Hope this helps you to start learning this new way to work in the iSeries plattform.

DDS for physical file:

A               R CSREC                                                        
A                 CSNBR          6S 0       TEXT('CUSTOMER')                   
A                 CSNAME        30A         TEXT('NAME')                       
A                 CSADR1        30A         TEXT('ADDRESS 1')                  
A                 CSCITY        20A         TEXT('CITY')                       
A                 CSSTAT         2A         TEXT('STATE')                      
A                 CSZIP         10A         TEXT('ZIP')                        
A                 CSPOINTS       6S 0       TEXT('POINTS')                     
A               K CSNBR                                                        

DDS Specification for display file:

A*%%TS  SD  20170316  162419  SGPLUIS     REL-V7R2M0  5770-WDS
     A*%%EC
     A                                      DSPSIZ(24 80 *DS3)
     A                                      REF(*LIBL/CUST)
     A                                      CA03(03 'F3=EXIT')
     A          R SCR1
     A*%%TS  SD  20170221  094610  SGPLUIS     REL-V7R2M0  5770-WDS
     A                                  1  2USER
     A                                      COLOR(BLU)
     A                                  1 28'ADD/UPDATE/DELETE/INQUIRE'
     A                                      DSPATR(HI)
     A                                  1 72DATE
     A                                      EDTCDE(Y)
     A                                      COLOR(BLU)
     A                                  2  2'CUSTR01'
     A                                      COLOR(BLU)
     A                                  2 72TIME
     A                                      COLOR(BLU)
     A                                  6 12'(A)dd,(U)pdate,(D)elete'
     A                                      COLOR(WHT)
     A                                  6 36'(I)nquire, (N)ext'
     A                                      COLOR(WHT)
     A            ACTION         1A  B  6 55DSPATR(HI)
     A                                  8 28'Cust#'
     A                                      COLOR(YLW)
     A            CSNBR     R        B  8 35REFFLD(CSNBR)
     A                                      DSPATR(HI)
     A                                      EDTCDE(Z)
     A                                      CHECK(RZ)
     A            ERRLIN        78A  O 22  2
     A  90                                  DSPATR(RI)
     A                                      COLOR(RED)
     A                                 23 14'F3 = Exit'
     A                                      COLOR(WHT)
     A          R SCR2
     A*%%TS  SD  20170316  162419  SGPLUIS     REL-V7R2M0  5770-WDS
     A                                      CA09(09 'F9=Delete')
     A                                  1  2USER
     A                                      COLOR(BLU)
     A                                  1 28'Customer File Maintenance'
     A                                      COLOR(WHT)
     A                                  1 72DATE
     A                                      EDTCDE(Y)
     A                                      COLOR(BLU)
     A                                  2  2'CUSTR01'
     A                                      COLOR(BLU)
     A            MODE           7A  O  2 37
     A                                  2 72TIME
     A                                      COLOR(BLU)
     A                                  3 28'Cust#'
     A            CSNBR     R        O  3 37EDTCDE(4)
     A                                      DSPATR(RI)
     A                                  9 28'Name'
     A                                      COLOR(WHT)
     A            CSNAME    R        B  9 42
     A N80                                  DSPATR(HI)
     A  80                                  DSPATR(PR)
     A                                 10 28'Address'
     A                                      COLOR(WHT)
     A            CSADR1    R        B 10 42
     A N80                                  DSPATR(HI)
     A  80                                  DSPATR(PR)
     A                                 11 28'City'
     A                                      COLOR(WHT)
     A            CSCITY    R        B 11 42
     A N80                                  DSPATR(HI)
     A  80                                  DSPATR(PR)
     A                                 12 28'State'
     A                                      COLOR(WHT)
     A            CSSTAT    R        B 12 42
     A N80                                  DSPATR(HI)
     A  80                                  DSPATR(PR)
     A                                 13 28'Zip'
     A                                      COLOR(WHT)
     A            CSZIP     R        B 13 42
     A N80                                  DSPATR(HI)
     A  80                                  DSPATR(PR)
     A            ERRLIN        78A  O 22  2
     A  90                                  DSPATR(RI)
     A                                      COLOR(RED)
     A                                 23 14'F3 = Exit'
     A                                      COLOR(WHT)
     A                                 14 28'Points'
     A                                      COLOR(WHT)
     A            CSPOINTS  R        B 14 42REFFLD(CSREC/CSPOINTS *LIBL/CUST)
     A                                      COLOR(WHT)

RPG program in all free:

       
      Ctl-Opt Option(*nodebugio) Dftactgrp(*No);
      *----------------------------------------------------
      *Archivos
      *----------------------------------------------------
       Dcl-F cust disk(*ext) usage(*update:*delete:*output) Keyed;
       Dcl-F custd01 workstn;
      *----------------------------------------------------------
      *constants which stores output messages to users
      *----------------------------------------------------------
       dcl-c Err1 CONST('Record already on file');
       dcl-c Err2 CONST('Record not on file');
       dcl-c Err3 CONST('No more records');
       dcl-c Err4 CONST('No more records');
       dcl-c Err5 CONST('Zip cannot be blank');
       dcl-c Err6 CONST('Name is mandatory');
       dcl-c Err7 CONST('State is mandatory');
       dcl-c Err8 CONST('Invalid action');
       dcl-c Err10 CONST('Points are not valid');
       dcl-c Msg1 CONST('Record Added');
       dcl-c Msg2 CONST('Record Updated');
       dcl-c Msg3 CONST('Record Deleted');
       dcl-c Msg4 CONST('Hit F9 to delete');
       dcl-c Msg9 CONST('No action taken');
      *----------------------------------------------------
      *variables
      *----------------------------------------------------
       dcl-s RecOk char(1);
       dcl-s cust_ like(csnbr);
       dcl-s points_ like(cspoints);
      
      *Program start
      *----------------------------------------------------------
       exsr main;
       *InLR = *On;
      *----------------------------------------------------------
      * main - Main subroutine
      *----------------------------------------------------------
       begsr main;
         dow *in03 = *off;
           exsr clearfld;
           exfmt scr1;
           ERRLIN = *blanks;
           *in90 = *off;
           if *in03 = *off;
             select;
               when Action = 'A';
                 exsr AddRecord;
               when Action = 'D';
                 exsr DltRecord;
               when Action = 'I';
                 exsr InqRecord;
               when Action = 'N';
                 exsr NextRecord;
               when Action = 'U';
                 exsr UpdRecord;
               other;
               ERRLIN = Err8;
               *in90 = *On;
             endsl;
           endif;
         enddo;
       endsr;
        //**********************************************
        // Add Record Subroutine
        // Indicator 80 is used by the display file to
        // protect more fields since we are in ADD mode
        // set the indicator off to allow field entry
        //**********************************************
        begSr AddRecord;
          *in80 = *off;
          MODE = 'ADD';
          // See if customer is already on file. If so,
          // display error
          //chain KEYLST CUST;
          chain csnbr CUST;
            if %found(CUST);
              errlin = err1;
              // In90 draws attention to the error line with rev
              // display
              *in90 = *On;
            else;
              exSr AddScreen;
            endif;
        endSr;
        // ***End of AddRecord**************************
        //**********************************************
        // AddScreen subroutine - New record
        //**********************************************
        begSr AddScreen;
          //Clear all fields except the key field
          RecOK = 'n';
          //Stay on this screen until user gets it right or hits F3
          dow RecOK = 'n' and *in03 = *off;
            exfmt scr2;
            if *in03 = *off;
              ExSr EditRecord;
              if recOK = 'y';
                write CSREC;
                *in90 = *On;
                errlin = Msg1;
              endif;
            else;
              *in90 = *On;
              errlin = Msg9;
            endif;
          enddo;
          *in03 = *off;
        endsr;
        //*****End of sr*****************
        //*****************************************
        // DltRecord - Delete a record from file
        //*****************************************
        begSr DltRecord;
          //*in80 is used by the display file to protect
          //most fields since we are in DLT mode, set the
          //*in on for no field entry
          *in80 = *On;
          MODE = 'DELETE';
          //Display "Hit F9 to delete" in ERRLIN
          errlin = Msg4;
          *in90 = *on;
          //See if customer is in file. If not, show errMsg
          // chain KEYLST CUST;
          chain csnbr CUST;
          if not %found(CUST);
            errlin = Err2;
          else;
            //If customer is on file, show screen again and see
            // if user hit F9 to confirm delete
            exfmt scr2;
            *in90 = *off;
            if *in09 = *on;
              delete CSREC;
              errlin = msg3;
            else;
              errlin = msg9;
            endif;
          endif;
          *in03 = *off;
        endsr;
        //*********************************************************
        // InqRecord - Looks for one record
        // Indicator 80 is used by the display file to protect
        // most fields since we are in DLT mode, set the indicator
        // on for no field entry
        //*********************************************************
        begSr InqRecord;
          *in80 = *on;
          mode = 'INQUIRY';
          // chain KEYLST CUST;
          chain csnbr CUST;
          if not %found(CUST);
            errlin = Err2;
            *in90 = *On;
          else;
            exfmt scr2;
          endif;
          *in03 = *off;
        endsr;
        // *****end InqRecord *****************
        //*************************************************
        // NextRecord - See the next record from selected *
        //*************************************************
        begSr NextRecord;
          *in80 = *On;
          mode = 'INQUIRY';
          errlin = *blanks;
          //Set file cursor at cust from screen
          // setll KEYLST CUST;
          setll csnbr CUST;
          if %equal(CUST);
            errlin = err3;
            *in90 = *On;
          endif;
          //Read file to get next customer
          if errlin = *blanks;
            read cust;
            if not %equal;
              errlin = err3;
              *in90 = *On;
            endif;
          endif;
          //If *in93 = *On, we are at an existing record
          //and need to read pass it
          if errlin = *blanks;
            exfmt scr2;
          endif;
          *in03 = *off;
        endsr;
        //*******end-sr*****************
        //*****************************************************
        // updRecord - Updates existing record                *
        //*****************************************************
        begsr updRecord;
          *in80 = *off;
          mode = 'UPDATE';
          // chain KEYLST CUST;
          chain csnbr CUST;
          if not %found(CUST);
            errlin = Err2;
            *in90 = *On;
          else;
            exSr UpdScreen;
          endif;
        endsr;
        //*******end-sr*****************
        //******************************************************
        // UpdScreen - update the screen during navigation     *
        //******************************************************
        begSr UpdScreen;
          RecOK = 'n';
          DoW RecOk = 'n' and *in03 = *off;
            exfmt scr2;
            if *in03 = *off;
              exSr EditRecord;
              if RecOk = 'y';
                update CSREC;
                Errlin = Msg2;
              endif;
            else;
              Errlin = Msg9;
            endif;
          enddo;
          *in03 = *off;
        endSr;
        //******end-sr***************************
        //**********************************************
        // EditRecord - Updates selected record        *
        //**********************************************
        begSr EditRecord;
          RecOK = 'y';
          if CSNAME = *blanks;
            RecOK = 'n';
            errlin = err5;
            *in90 = *on;
          endif;

          if CSSTAT = 'y';
            RecOK = 'n';
            errlin = Err6;
            *in90 = *On;
          endif;

          if CSZIP = *zero;
            RecOK = 'n';
            errlin = Err4;
            *in90 = *On;
          endif;

          if CSPOINTS <= 0;
            RecOK = 'n';
            errlin = Err10;
            *in90 = *On;
        endSr;
        //*****end-sr****************

        //***********************************
        // ClearFld - Clear all fields used
        //***********************************
        begSr ClearFld;
          ACTION = *blanks;
          CSNBR = *zeros;
        endsr;

La verdad de iSeries IBM (según yo)

Aprovechando un poco de tiempo libre puedo REGRESAR a este blog después de mucho tiempo. Muchas cosas han pasado, pero básicamente les hablaré de un tema interesante y que a la nueva generación de programadores/desarrolladores…y estoy hablando del mundo de iSeries de IBM (o AS400 para los cuates).

Honestamente nunca pensé toparme con esta tecnología para que pudiera pagar mis vicios, pero he aprendido lo suficiente para poder hacer un juicio de esta plataforma, cuál es el panorama y si realmente hay oportunidad en ella. En éstos tiempos, los jóvenes interesados en el mundo de la programación son bombardeados con información relevante a desarrollo de aplicaciones de escritorio, web, móviles, videojuegos, etc. con lenguajes comunes actualmente como es C#, Java, PHP, Ruby, C++, entre otros más, pero muy pocos (si acaso saben de esto por sus clases en la escuela) recuerdan que hace unos años era COBOL, Basic, C y RPG.

Por el motivo anterior, éstos lenguajes “viejos” ya no han podido transferir el interés a nuevas generaciones, las cuales se enfocan en las nuevas tecnologías, pero a pesar de esto, los “viejos” lenguajes siguen siendo solicitados por las empresas y con una paga más que aceptable.

Me enfocaré en iSeries o AS400, ya que es el tema en cuestión. ¿Cómo es que me topé con un trabajo así? Pues bueno, quise tratar una tecnología diferente a web y entré a un programa de capacitación para aprender a desarrollar en iSeries. En este programa eramos un grupo de jóvenes con antecedentes de desarrollo y para los instructores con eso bastaba…nos prepararon y después nos involucraron en los proyectos para una empresa muy grande que vende a montones y que uno de sus canales de venta y manejo de operaciones se basa en iSeries.

iSeries de IBM es una plataforma o sistema operativo que utilizan principalmente grandes empresas (MUUUY grandes) como lo son bancos, tiendas wholesaler como Sam’s Club/Costco, almacenes tipo Liverpool, Staples, Office Depot, CASINOS, Adidas, entre otras más. Este sistema operativo permite manejar muchísimas operaciones y transacciones de manera robusta y confiable, los expertos en el este mundo consideran a esta plataforma una de las más confiables en cuanto a rendimiento, nada que ver con los sistemas actuales.

Entonces si es muy bueno, ¿Por qué no es tan cotizado en el mercado como una chamba de Java o .NET? Como lo dije anteriormente, aprender estos lenguajes nuevos es relativamente fácil; Con que un estudiante tenga su laptop y el IDE listo, puede comenzar a aprender. En iSeries es distinto, ya que se requiere la adquisición de un equipo IBM y eso, es un buen billete, por lo que no es viable para universidades.

Aprender los fundamentos de RPG/CL/RPGLE/Free tiene una dificultad moderada, pero es todo un estilo o forma de trabajar si eres más de lo que trabajan en OOP. Uno de los choques culturales más fuertes era el hecho de que esto es 90% código, 10% gráfico (vieja escuela pues). Pero se ha modernizado que el formato “free” te permite programar con mayor soltura, a tal punto de estar programando en los lenguajes conocidos.

Hablando en México, hay ofertas, pero principalmente para los señores (seniors), creo que los de RH se sorprenderían al ver un desarrollador de iSeries menor a 35 años porque casi todos los que conocen superan el cuarto escalón. La oferta es sumamente mayor en el extranjero eso sí, países como España, Finlandia, EU, Alemania que hay empresas de grueso calibre y por lo tanto siguen confiando en los sistemas de IBM, aunque hay que admitir que otras más se han movido a nuevas ofertas como Oracle.

He leído mucha información respecto al futuro de este SO, ya que lleva más de 30 años en el mercado. Como dije, en otros países fuera de México aprecian demasiado al iSeries y siguen en busca de gente joven para prepararla y sepan trabajar en ella, así que si tu, lector que estás viendo esta entrada llegaras a ver una academia/entrenamiento como tu primera oportunidad laboral y no eres de los que se casa con un lenguaje sino que eres versátil y hábil para programar, puede ser un puente para probar suerte en el extranjero, pero eso sí, no esperes que la competencia sea fácil.

 

 

Microsoft Technology Associate (MTA): Certificaciones para estudiantes y mi experiencia personal.

MTA

La mayoría de los estudiantes de TI desean la mejor preparación para poder aspirar a un empleo que les dé muchas satisfacciones y lo mejor: Que hagan lo que realmente les gusta. Han escuchado la frase “Allá afuera hay mucha competencia” pero eso no quiere decir que no tengas oportunidad de ejercer tu profesión como tú quieres y para esto se requiere demasiada preparación.

La universidad es importante, pero un plus es tener alguna certificación de cualquier tema relacionado con TI. Muchos se preguntan: ¿Por dónde empiezo? y lo que muchos (incluyéndome) también piensan es que resulta muy costoso pagar cursos y exámenes, más para estudiantes que su economía no es fuerte, por lo cual no es una opción.

Recientemente Microsoft ha empezado a impulsar certificaciones entry-level (para estudiantes) para que puedan empezar su camino a ser un profesional reconocido en una área especializada. Estas certificaciones llevan como nombre Microsoft Technology Associate, una serie de exámenes de certificación con temas fundamentales en cuanto a desarrollo de software, bases de datos, infraestructura, redes, seguridad, entre otros.

Con estos exámenes se busca comprobar que el candidato tenga los conocimientos fundamentales, tanto teóricos y prácticos, en los temas mencionados y así pueda aspirar a certificaciones superiores que ya requieren experiencia laboral o profundizar más como las MCSA y MCSE.

¿Por qué escribo sobre esto? Porque yo he tomado mi primera certificación de este nivel, la cual fue: MTA 98-365:Windows Server Administration Fundamentals. Les cuento brevemente mi experiencia:

Siempre me ha interesado el mundo de la infraestructura de TI y ahora con los temas de virtualización y la nube se ha incrementado el interés. Mientras estaba en mi servicio social en dicha área, llegué con conocimientos “empíricos” y deseaba concretar lo poco que sabía y profundizar en temas. Me enteré de las certificaciones MTA y vi que estaba la de Windows Server (que es lo que usan en donde hago el SS). Busqué material de preparación como lo fue el libro oficial de Microsoft Press, algunas preguntas demo y experiencias de otras personas que lo hayan tomado. En poco menos de un mes estaba listo y comprendía los conceptos y ejercicios del libro.

Agendé mi examen aquí en México en un centro Prometic (http://www.prometric.com), el examen tiene un costo de $1061 pesos. El examen son preguntas fáciles de entender y si estudiaste y practicaste lo que viene en el libro, no tendrás muchos problemas. Son 36 preguntas con un límite de tiempo de 45 minutos. Afortunadamente en el primer intento acredité el examen y logré la certficiación 🙂

Algunas consideraciones que puedo compartir:

-La preparación para el examen requiere dedicación para desarrollar toda la guía, pero no es muy compleja. Lo sentirás como si estuvieras estudiando para un examen final de una materia. El contenido es extenso pero digerible. Por este motivo, no recomiendo tomar un curso (ya que los que he visto son costosos). Las guías son estas:

http://www.wiley.com/college/sc/mta/

-Estos exámenes funcionan bien para concretar tus conocimientos en lo que te interesa, desde hacer una aplicación en Visual Studio con C# y saber utilizar el IDE, configurar un servidor, aspectos de seguridad, uso de SQL Server, hay para todos los intereses y gustos. Además de que te dan un impulso moral demostrando que tienes conocimientos y más adelante te ayude a postularte para un puesto de traineé. El camino ideal para certificación en Microsoft lo puedes ver aquí:

MTA Path
Certification Path

-Las certificaciones MTA no son un pre-requisito para las de mayor nivel como se ve acá arriba. Si tienes experiencia y crees tener los suficientes conocimientos para obtener una MCSA,adelante!

-Leer,leer,leer y practicar mucho los temas a evaluar dentro del examen.

Para finalizar puedo decir que las certificaciones te darán un plus en tu currículum y tendrás un diferenciador en comparación de los demás. El sitio oficial para saber más de éstas certificaciones es el siguiente:

http://www.microsoft.com/learning/en-us/mta-certification.aspx

Espero les haya gustado la información y se animen tener algún tipo de certificaciones mientras sean estudiantes. Yo por lo mientras voy en camino para ser MCSA 😀

Un saludo.

First Certificate English (FCE): Lo que debes de saber para el examen

Este año es el año de las certificaciones para mí,ahora por haber completado otra meta al  adquirir mi certificación del idioma Inglés por medio del examen First Certificate (FCE), ofrecido por la Universidad de Cambridge. Para los que no saben, existen varios niveles dentro del enfoque de esta universidad y este que presenté es el nivel inicial para después pasar a Advanced (CAE) y finalmente Proficiency (CPE).

Esta prueba la toman, por lo que he visto, jóvenes estudiantes de prepa y universidad principalmente, pero cualquiera puede aplicar. Algunos candidatos que desean ser profesores certificados por Cambridge, tienen que presentar y acreditar este examen para tomar después otro examen (llamada TKT). Pero eso es contenido para otro tema.

Mi objetivo al tomar este examen era demostrar mi nivel de inglés en todas las habilidades y este examen, al igual que el TOEFL IBT, son una buena opción para saber concretamente el nivel de inglés de cada individuo. Vayamos a lo importante

Este examen se divide en 5 secciones:

-Use of English: Uso del idioma de distintas formas como expresiones coloquiales, phrasal verbs, tiempos de conjugación, vocabulario, sintaxis de oraciones, etc. Esta para mí es la prueba de fuego de todo el examen para demostrar tus habilidades del idioma

-Reading: Lectura de compresión en 3 formatos distintos de ejercicios.

-Listening: Escuchar y entender lo que una grabación quiso decir. Aquí el problema que tuve fue que la calidad del audio no era muy buena (hubiera sido mejor por medio de audífonos).

-Speaking: Una serie de preguntas y análisis de situaciones que el evaluador propone. Aquí no es lo típico de presentarse y hablar de tí, vas más allá, para que demuestres los fundamentos para entablar una conversación fluída en el idioma

-Writing: Escribir contenido en ingles usando una estructura de cuento,carta,ensayo o artículo usando expresiones gramaticales correctas y una redacción aceptable.

Evaluar todas estas habilidades toma tiempo, por esa razón, el examen tiene una duración de 4 a 5 hrs aproximadamente, más que nada porque todas las secciones del examen tienen su tiempo definido para poder contestar (1 hr por sección), si fuera el caso contrario, muchos podrían terminar el examen en un tiempo menor.

En mi caso particular,mi examen se dividio en dos días, uno para speaking y otro para las demás habilidades. Speaking es en donde tuve unos errores (por los malditos nervios) pero a fin de cuentas pude conversar de una manera aceptable.

Hay que tener presente que el examen es para personas que creen que el dominio del idioma lo tienen y que solo presentan fallas puntuales que pueden ser corregidas en poco tiempo. El curso que tomé (en México asistí a The Anglo que es una escuela certificadora de Cambridge) trata de dar tips y practicar los tipos de ejercicios que se presentan en el examen, rara vez se tratan aspectos de aprender algo del idioma,sino de aterrizarlo de acuerdo al examen.

Recomiendo que personas como yo que tienen un dominio del ingles prueben sus capacidades tomando un examen como éste, o el TOEFL por mencionar algo. No sé que tanta ventaja me dé para estudiar en el extranjero o un trabajo que involucre ser bilingüe, pero me voy satisfecho por haber completado mi curso y aprobar el examen. Si leen esto y quieren tomar el examen, puedo resolver algunas dudas que se les ocurra.

Ahora vamos por el CAE!

Examen ITIL Foundation v3: Lo que debes de saber.

Saludos lectores.

Recientemente aprobé mi certificación ITIL v3 Foundation gracias a que pude aprovechar el curso de preparación y examen (por parte de la consultora Pink Elephant y convenio con México First) a un excelente precio y dije ¿Por qué no?

ITIL tiene varios niveles pero se debe de empezar por Foundation para después pasar a un nivel intermedio (dividido en varias categorías dependiendo la necesidad que quieras cubrir en tu empresa, por ejemplo) y de ahí llegar a Expert. Honestamente sabía poco de ITIL, no consideraba tomar este camino pero ahora que lo conozco y todo lo que involucra estas buenas prácticas me ha interesado bastante y querer profundizar. Por otro lado, esta certificación viene a hacer un poco más “gordo” mi currículum y expander mis posibilidades de un trabajo.

Pero pasemos a mi experiencia en mi proceso de certificación: Basicamente fue un curso intensivo de 5 sábados donde se estudió el material proporcionado por Pink y un instructor de la consultora. El contendio es fácil de digerir y entender, especialmente para gente que ya tiene experiencia laboral o algunas prácticas profesionales, en mi caso, éramos un grupo de estudiantes de diversos semestres, todos llegaban a tener idea de lo que se habla.

Foundation cubre el ciclo de vida del servicio, desde Estrategia hasta Mejora Continua y todos los procesos de cada fase, mucha teoría y manejo de conceptos puntuales. El chiste no es aprendérselos, sino entenderlos y relacionarlos con situaciones reales de servicios de TI. Los procesos se pueden relacionar con aspectos de administración o el ciclo de desarrollo de software, ya que hay actividades similares en los anteriores (más no quiere decir son lo mismo).

Este material proporcionado incluye varios exámenes de muestra para practicar que por cierto, el examen es de 40 preguntas con duración de media hora.

El examen: Siendo honestos, el examen no presenta un nivel de complejidad elevado, basta con entender los conceptos de la teoría e identificar de que fase o proceso se habla. Es un examen de opción múltiple, algunas con la respuesta muy obvia 😛 No necesité más que estudiar el manual, practicar en los simuladores y repito, entender de lo que se está hablando. Además, los resultados salen en unos 4-5 días así que la espera no es tan larga.

Me parece que esta certificación inicial, si eres autodidacta y disciplinado, la puedes sacar sin necesidad de un curso estudiando por tu propia cuenta. Eso no quiere decir que el curso este de más siempre, ya que mi instructor nos ayudaba con conceptos clave que podrían venir en el examen, así como tips para el mismo.

Desde luego lo mejor es preparase y estudiar para un nivel intermedio que creo yo, es más específico a algunos procesos dentro del ciclo de gestión de servicio de ITIL así que, si ustedes me disculpan, ya me gusto este tema y seguiré aprendiendo!

Espero les sirva esta experiencia para que se animen a tomar estar certificación para poder tener una ventaja sobre los demás profesionistas de TI.

<comercial>Este es el link para que chequen más de Pink Elephant https://www.pinkelephant.com/home/?LangType=2058 </comercial>

PS: Antes de iniciar el curso investigué sobre cómo es el examen y su complejidad. El “IT Skeptic” propone estos tips que igual pueden funcionarles:

http://www.itskeptic.org/pass-itil-v3-foundation-exam-six-easy-and-free-ste

Calcular el porcentaje de disponibilidad de componentes y servicios de TI

En mis tiempos de aprendizaje sobre planes de disponibilidad y continuidad siempre tuve la duda sobre cómo calcular el porcentaje de disponibilidad de un sistema o servicio en TI, vamos, incluso llegué a pensar que era “a ojo de buen profesionista de TI” (como suele pasar en uno que otro cálculo en las empresas).

Pues bien, durante mi preparación a la certficación de ITIL (gracias MéxicoFirst!) el instructor del curso por fin aclaró mi duda, lo cual resulto bastante interesante y me gustaría compartirlo. Aquí el ejemplo:

Queremos saber la disponibilidad mensual de un servidor que recibe un mantenimiento de 4 hrs x mes. Bien, la fórmula para realizar el cálculo es como sigue:

Component Availability = (Agreed Time Service – Downtime/ Agreed Time Service) X 100

Dicho de otra forma más simplificada:

CA = (ATS – DT/ ATS) X 100

Tomando el ejemplo que menciono hacemos los cálculos:

Primero: El Agreed Time Service (Tiempo acordado del servicio) se determina tomando en cuenta que el servidor trabaja las 24/7 por mes, es decir: 24X30 = 720 hrs y a esto le reducimos las 4 hrs del mantenimiento del servidor que se considera, 720 – 4 = 716

Downtime: Este también se determina tomando en cuenta el tiempo que tardaríamos en dar el mantenimiento al servidor incluyendo algo muy importante, el Rollback que, deacuerdo a mi instructor debe de tomarse en cuenta. Entonces para este dato consideramos otras 4 hrs de rollback y sumamos con las otras 4 nos da 8 hrs.

Ya tenemos las variables, podemos hacer el cálculo:

CA = (AST – DT/ AST) X 100 = (716 – 8/716) * 100 = 98.88%

Con esto podemos decir que el componente mensualmente tiene una disponibilidad del 98.88%. Aquí no termina el asunto.

Supongamos ahora que este servidor (que es un componente) es parte de un SERVICIO de correo electrónico que incluye la aplicación y el enlace, componentes que tienen un nivel de disponibilidad también. Para la aplicación consideramos que tiene 95.9 % y para el enlace el 99.5%.

Dados estos datos podemos calcular la disponibilidad del servicio como tal, haciendo la multiplicación de los porcentajes:

Disponibilidad del Servicio = (DServidor * DAplicación * DEnlace) x 100

DS = (.9888 x .959 x .995)100 = 94.35% de disponibilidad del servicio de correo.

Es importante mencionar que el Tiempo Acordado del Servicio se define desde los SLA’s y OLA’s que como proveedores de servicios de TI tenemos que tener siempre en cuenta.

Bien, a mi en lo particular me parecio un buen tip que nos podría servir a la hora de hacer un plan de disponibilidad/continuidad de un servicio.

Uso de push notifications (iOS) y servicio PHP, lo que debes de considerar.

Hace unos meses participé en desarrollar para una aseguradora un centro de mensajes que se accede desde su servidor para que desde ahí se puedan enviar mensajes para dispositivos Android y iOS dependiendo algunos criterios, todo un reto ya que en donde trabajaba no teníamos experiencia para hacerlas.

En esta entrada, que no es realmente un tutorial para hacer un servicio de envío de push notifications para un app de iOS, sino que les daré algunos tips que pueden considerar a la hora de desarrollar, ya que, créanme, fue un dolor de cabeza por semanas encontrar la solución correcta para que funcionaran.

Espero sea una referencia para que no tengan problemas y puedan terminar en tiempo y quedarse calvos de la frustración.

1. Puertos SSL activos: Verifica que tu ISP (o si estas probando localmente, tu servidor local) tenga activos los puertos SSL, puerto 2195 o 2196. Esto evita que al probar tu servicio te aparezca el siguiente error:

Warning: stream_socket_client() [function.stream-socket-client]: unable to connect to ssl://gateway.push.apple.com:2195 (Connection refused) in SendPushNotification.php on line 28 Failed to connect: 111 Connection refused

También es recomendable que tu servidor de producción tenga habilitados dichos puertos. En casos particulares, algunos proveedores por default no los tienen activados así que habrá que pedir que los activen

2. Certificados: Este es otro problema que muchos desarrolladores llegan a tener, la generación de certificados tiene que ser al pie de la letra, porque esto puede provocar que simplemente no funcionen las pruebas de envíos de mensajes. Importante recordar que existen los certificados de desarrollo y producción y que dependiendo el ambiente en el que estés, los ID’s de los dispositivos cambiarán.

Ejemplo: Registras un dispositivo en ambiente de desarrollo, funciona todo bien. Pero después de que tengas que generar el certificado de producción, ese ID que tenías registrado ya no servirá por lo que tienes que registrarlo de nuevo en tu sistema que estes desarrollando. Esto me trajo una confusión que me costo algunas horas de trabajo así que tenlo presente.

3. Conexión de APN para envío de mensajes: Este si es un detalle muy particular que encontré al desarrollar el centro de mensajes. Cada vez que se envía el mensaje se crea una conexión nueva al servidor APN y después de que se envía el mensaje se tiene que cerrar por seguridad. El problema radica en que si quieres enviar mensajes de manera masiva usando una sola conexión, no será posible.

Por lo tanto, si necesitas enviar mensajes a n dispositivos simultáneamente, tienes que hacer una conexión por cada dispositivo al que vayas a mandarlo, de lo contrario, solo mandará al primer registrado o no mandará nada.

Este punto resulta algo truculento y lo solucioné de esta manera.

4. GET en vez de POST: Este punto realmente nunca lo encontramos como solución en sitios de ayuda como Stack Overflow y nos sorprendió el hecho de que funcionara.

Básicamente consiste en que todos los datos que envías en los formularios que vayas a utilizar (en mi caso, para escribir el mensaje al dueño del dispositivo) los mandes por GET y no por POST, curiosamente, al hacer este cambio, pude enviar mis mensajes sin problema alguno. Puede que mi situación haya sido una situación MUY particular y sabemos que a veces pasar por GET los datos no es buena idea, pero si tienes la oportunidad de hacerlo por este método, hazlo.

En esta experiencia que tuve, aprendí bastante sobre el desarrollo de este sistema de mensajes vía push notifications, algo muy divertido y retador. Algunos puntos quizás no apliquen a su situación, pero considérenlo como una especie de checklist cuando tengan problemas. Además, si tienen otro problema, es importante que lean a detalle la documentación que proporciona Apple para realizar este servicio.

Si tienen otra solución será bienvenida en este blog.

Game-on!

Design a site like this with WordPress.com
Get started