Ir al contenido principal

Entradas

Mostrando las entradas de diciembre, 2022

¿Qué es un sistema GDS?

Los GDS son sistemas que almacenan informacion y se comunican con otros GDS para compartir itinerarios de viaje de turistas al rededor del mundo. Por lo regular muchas empresas de turismo tienen la posibilidad de ver el historial de viaje y destino de un cliente, esto mediante el uso de consultas a GDS. Cada GDS posee soporte a un grupo deteeminado de empresas, esto permite proveer mayor eficiencia en cuanto a control de viajeros y ‘calidad de servicio’. Los servicios turisticos del mundo(denominados O.T.A) te identifican con un PNR( Registro Númerico de pasajero ). En el mundo existen muy pocos GDS, hasta donde yo se existen 5 GDS, los cuales se encargan de almacenar todos los itinerarios de viaje de servicios como por ejemplo: Transporte de tren Transporte aereo Transporte de autobuses Reservaciones de hoteles Paquetes vacacionales Cada hotel, cada vuelo, cada tren, cada autobus del pais que sea: México, Estados Unidos, Argentina, España, China, etc… tiene conocimiento de quién ere...

HTML DOCTYPE

Cuando escribimos documentos html es indispensable que le digamos al navegador la versión de dtd (documento de definición de reglas) que usaremos, esto lo logramos mediante el doctype: < !DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd" > Esto es un doctype para html5: <!DOCTYPE html> El doctype le permite al navegador saber cuales son las reglas que se deben validar cuando va a renderizarse una página web, esto es un comportamiento heredado de SGML y que se comparte con XML. El doctype es una instrucción en el que se define el set de validaciones(dtd) que se van a seguir para saber si un documento esta bien formado, si es válido o no. De este modo se puede determinar la versión y si las etiquetas en un sitio o documento xml serán entendidas por el interprete. Normalmente el doctype hará referencia al dtd de tres maneras: Reglas incrustadas en el doctype: se utiliza cuando generas reglas s...

Exception vs error

En programación el concepto de “Exception” y “Error” son diferentes. Una excepción se podría considerar un tipo de “comportamiento inesperado”: Se puede atrapar para aplicar una estrategia de recuperación (guardar los datos de tu usuario antes de morir mostrando un mensaje de lo ocurrido). La excepción se utiliza cuando no puedes predecir o verificar con anticipación que un recurso existe o este disponible, pero que no es fatal. El ejemplo más usado, es cuando quieres leer un archivo de la computadora de tu usuario: En tiempo de desarrollo no puedes prevenir este comportamiento inesperado (es algo excepcional), pero no es fatal; basta con notificarle al usuario que “el archivo no existe y que intente cargar otro”. Esto causará que tu programa se recupere y le notifique al usuario. Un error es un evento inesperado que no se puede atrapar por la fatalidad del mismo, pues si se atrapa y se deja que el programa continué puedes causarle daños al usuario o a la maquina del mis...

El octubre negro de 2016

En Octubre de 2016 fue atacado DYN , el cuál es uno de los mayores proveedores de DNS de internet del mundo y utilizado por la mayoría de compañías de internet. El resultado de este ataqué fue que muchos sitios de internet fueron inhabilitados durante horas. Es evidente que la cantidad de dinero que se perdió en este ataqué y las afectaciones a los empleos y operaciones no tienen precedentes. Imagina los servicios de seguridad, salud, comunicaciones y más fueron interrumpidos por unas horas: causando el caos. Se denomina como el mayor ataque en la historia de internet hasta ahora. El ataque fue llevado acabo por el grupo de hackers denominado “ New World Hackers ” [1] al realizar un DNS hijacking [2] : Algo así como un mega ataque DDOS pero al DNS. Mapa de las afectaciones en América y Europa. Sitios afectados durante horas [3] : Airbnb Online Shopping for Electronics, Apparel, Computers, Books, DVDs & more Genealogy, Family Trees & Family History Records The A.V. Cl...

Wordpress vs Wix

WordPress es un CMS(content management system) el cual ayuda a crear sitios y blogs configurables y personalizables. A primera vista pareciera que es exactamente lo mismo que Wix, pero nada que ver. Por un lado Wix permite crear sitios Webs usando un editor WYSIWYG, de modo que dependas en las plantillas que te ofrece el servicio. Los efectos, ya están prediseñados y el alojamiento es en el mismo sitio web de WIX. Para WordPress existe un servicio similar en el sitio WordPress.com: Crea un sitio web o un blog , existen tantos paquetes gratuitos como de paga los cuales te brindan funcionalidades parecidas o mejores a los proporcionados por Wix. Una de las diferencias que se deben tomar en cuenta es que WordPress es una comunidad que desarrolla y mantiene el CMS por lo que su código fuente es libre. Está implementado en PHP y corre en servidores Apache o NGNX. ¿Que ventajas te da a ti como usuario ? Pues bien, con Wix no podrías descargar tus datos y migrarlo a algun ser...

¿Qué había antes del Big Bang?

Según lo que cuenta Stephen Hawking en su libro “La teoría del Todo”, antes del Big Bang: No existía nada y aún que hubiera existido no se puede saber, no hay rastro de lo que hubo antes. Cuando ocurrió el Big Bang las leyes de la física que pudieron existir desaparecieron y se forjaron nuevas leyes que son las que rigen este mundo. El Big Bang - de acuerdo con lo que explica Hawking- es una singularidad , es decir un punto en el tiempo en el cual las leyes de la física que conocemos hoy día no existen o son muy distintas para reconocerlas. Por lo tanto el tiempo y todo lo demás es distinto. Antes del Big Bang - si es que hubo un antes - es irreconocible y muy distinto, incapaz de detectarse y conocerse por ende no deberíamos de preocuparnos por eso. De modo que a los físicos de hoy en día, - quienes defienden las diversas variaciones de la teoría del Big Bang así como de la expansión del universo- solo se interesan por entender las leyes del universo que ha existido de...

Baúl de los recuerdos - Construyendo un crawler con python

 En 2012 encontré un sitio (muy importante de aplicaciones telefónicas de ese entonces) que tenía una falla grave. Desde una cookie podías inyectar un fragmento de código ejecutable que se podía usar para leer archivos del servidor. Esa falla me emocionó demasiado y puse manos a la obra para construir un script que explotara la falla. Intente desarrollarlo en diversos lenguajes, pero al final tenía el problema de la modificación dinámica de estructuras de datos en loop. Fue cuando descubrí que python eliminaba dicho problema de forma nativa y entonces surgió el POC. Sin darme cuenta (y sin saber lo que estaba programando) el resultado final fue un pequeño crawler con un comportamiento algo curioso. Algoritmo Leía un archivo “pivote” (index.php) Buscaba posibles archivos a los que se hacía referencia el archivo pivote (include, require, require_once, link, elementos a). Una vez encontradas las referencias, se procedía a almacenar cada referencia en una de dos listas: Si...

Joyitas de la biblioteca - The Mythical Man-Month

The Mythical Man-Month nos narra la historia de la creación de la IBM System/360. El “project manager” nos cuenta los errores y aciertos que tuvieron al crear el primer sistema operativo avanzado de la historia. Una época donde no se sabía nada de como desarrollar proyectos empresariales masivos y cómo abordaron cada solución, no dice que no tuvieron retrasos, dice lo que hicieron para sobre llevar esas problemáticas y que soluciones plantearon. Muchas veces el problema esta ante nuestros ojos y no sabemos interpretarlos. Tu proyecto esta atrasado pero no sabes el motivo. Ya contrataste diez programadores nuevos para el proyecto que se entrega en un mes. El programador “nivel dios” es el que se encargará de lo más difícil pero no se ve avances. Todos se van a las 10 de la noche y entran a las 7 de la mañana. Trabajan de lunes a domingo y la presión esta que explota. No contribuyes a que continúen aprendiendo, la empresa promete cursos pero nunca los ve El departamento no ve el...

Joyitas de la biblioteca - The pragmatic programmer

  The pragmatic programmer es un libro que me fascina y no puedo dejar pasar la oportunidad de recomendarlo. Este libro nos explica la verdadera ciencia detrás del desarrollo ágil, clásico y la forma en que se debe desarrollar software. No importa si es un proyecto critico o no critico, no importa si tu software utiliza mil millones de metodologías o si usas simplemente “XP”. Lo que importa es lo que esta en el corazón de tu cultura organizacional y el modo en que tus desarrolladores piensan. Puedo decir que desarrollar software es desarrollar arte, y para desarrollar arte debes tener la habilidad de observar lo que otros no pueden ver. Pensar diferente pero con raciocinio y es ahí donde muchas empresas fallan. No piensan de forma lógica y no usan su sentido común. Están casados con la idea de que un documento, una certificación o que una organización las calificará pensando que con eso será suficiente para decir que ellos desarrollan buen software. De nada va a s...

El queso Suizo

Imagina un queso suizo - Si, ese queso amarillo con huecos como el de las caricaturas-. Ahora imagina que tomas un cuchillo y vas cortando el queso en rebanadas finas: Cortas y cortas y cortas… hasta el infinito. Solo recuerda que cada  rebanada la debes colocar encima de la capa anterior. Durante este proceso infinito de cortar, notarás como en cada rebanada existen unos agujeros que permiten ver la capa de abajo. Existirán agujeros por aquí, por allá y por “acuya”. Vas a dejar de cortar rebanadas de queso hasta que al menos tres capas tengan huecos que coincidan entre ellas. El queso suizo representa cualquier proceso crítico de la vida real; llámese pilotear un avión, construir un cohete, construir un puente o construir productos de software. Los huecos vendrían a ser los desperfectos y malas desiciones que hayamos tomado. Cuando los huecos de dos o mas capas de queso suizo coinciden entre si es cuando ocurre la desgracia, y el riesgo latente se materializa producto de nuestro d...

Minificar para reducir costos

Minificar Reducir espacios entre constructos y elementos de un sitio trae como ventaja que el navegador se ocupe de la renderización de una forma más rápida y tarde menos consumiendo cada porción de código. Traduciendose en menos espera para el visitante. Por otro lado, cuando visitas un sitio web, lo que estas haciendo es realizar una transferencia de archivos entre el servidor remoto y tu computadora. Cada archivo tiene un peso especifico que va a variar si esta o no minificado. Si es un sitio con muchos visitantes (piensa en amazon.com ) el peso de los archivos se multiplica por el número de visitas y el número de recargas a la pagina dando como resultado una cantidad de kb de transferencia entre los clientes y el servidor. Hay que tener en cuenta que muchos servidores de hosting en internet proporcionan una cantidad de ancho de banda para transferencias a los sitios webs. Si estos sitios webs se exceden, se les cobrará una tarifa por la cantidad de kb transferidos...

XML no ha muerto

XML es un lenguaje de marcado que sigue siendo relevante por la versatilidad que posee. Es verdad que tiende a ser un tanto “verbose” pero cuando conoces a fondo las herramientas, la historia y las posibilidades que XML te ofrece, entiendes las ventajas que se presentan al incluirlo en proyectos que ameriten este tipo de lenguaje. Existe un debate muy amplio entre la utilidad de XML y JSON. Ambas estructuras suelen ser utilizadas como formato de intercambio, sin embargo XML no fue originalmente pensado para usarse como un “DTO”. JSON en cambio, su finalidad es simplemente transportar datos y reducir el tamaño del response o request. Además de que JSON es muy útil cuando estas en proyectos donde javascript es el lenguaje principal, pero eso no lo hace exclusivo de javascript en Java o .NET existen “parsers” que facilitan la conversión de JSON a “POJO’s” o “POCO’s”. XML es muy útil cuando necesitas manipular los datos o la semántica de un set de información. Existen tant...

¿ECMA script o javascript?

ECMA es una organización que se dedica a estandarizar cosas relevantes a las tecnologías de la información. En 1996 ECMA decidió crear una especificación para describir un lenguaje de scripting de propósito general, a esta especificación se le denominó ECMA-262 y es lo que hoy se conoce como “ECMAScript”. Sin embargo, una especificación es solo la descripción de los componentes y aspectos escritos en un documento para que otras personas puedan consultarlas o tomarlas de referencia. No es como tal el motor, interprete o lenguaje de programación en concreto. JavaScript es la implementación de ECMA-262, y es normalmente conocido como un dialecto de ECMAScript, pues no respeta al cien por ciento la especificación de ECMA. Existen muchísimos motores de JavaScript, ya que del lado del cliente dependerá del navegador que se utilice. El motor más utilizado es el denominado V8. Otros dialectos de ECMAScript son JScript y ActionScript . Como dato interesante C# de Microsoft ta...

Joyitas de la biblioteca - Regular Expressions

Aprender Regular Expressions en un principio puede aparentar ser algo complejo por la gran cantidad de simbolos necesarios: /\b[A-Z0-13._%+-]+@[A-Z0-13.-]+\.[A-Z]{02,}\b/i; Sin embargo puedo decir que no es nada difícil, basta con: Aprender los constructos Palabras claves Símbolos  Entender el “matching” de los textos  Además dependerá del uso que pretendes darle al ReGEx. ¿Es algo personal que no implica criticidad? ¿Trabajas en yahoo? ¿Pretendes que sea algo pequeño y no importa si es eficiente? ¿Pretendes que sea robusto, seguro y eficiente? ¿Que lenguaje de programación utilizarás para aplicarlo? ¿Qué tipo de motor de RegEx pretendes implementar? Desde mi perspectiva siempre es bueno saber si existen constructos avanzados para hacer ciertas cosas en un texto sobre todo si pretendes utilizar RegEx para una aplicación profesional donde la cantidad de procesamiento de texto es brutal y el tiempo de espera es crítico. Esta regla te la puedes saltar si es de uso personal, dond...

Java: equals() vs =

  En java las referencias son bits que representan la dirección de memoria donde se encuentra un objeto dentro del “ Garbage Collectible Heap ”. Cuando utilizamos valores y tipos primitivos, lo que se obtiene son los bits que representan dicho valor, ejemplo un int . Luego entonces una variable de un tipo almacena los bits de referencia o los bits que representen los valores primitivos. Cuando utilizamos “ == ” lo que estamos comparando son los bits que se encuentran dentro de las variables. == con objetos Date a = new java.util.Date(); Date b = new java.util.Date(); Date c = a; // false, pues el contenido realmente difiere pues ambas variables contienen bits diferentes. a == b; // true, pues son los mismos bits de referencia. c == a; == Con primitivos int x = 12;   int y = 12;   int z = x;   x == y; // true pues al ser primitivos, los bits representan el valor que almacenan.   x == z; // true, son el mismo valor.   Equals Como los objetos son bits de r...