style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">

Operaciones con fechas en java

Hola que tal a todos pues nadamas los quiero invitar a que vean este post de operaciones con fechas, es una libreria que estoy haciendo ojala me puedan dar sus opiniones

http://kloneton.wordpress.com/2010/06/29/operaciones-con-fechas2-java/

no copie el texto por razones personales, Saludos Javeros

Comentarios

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de ezamudio

JodaTime

Has revisado JodaTime? Tiene mucha de la funcionalidad que estás implementando, además de tener operaciones para obtener intervalos de tiempo entre fechas y algunas otras monerías.

Imagen de fcodiaz

uta reinventas la rueda!! LOL

jajaj.. usp creo que en javamexico no hay que postear rutinas que crees por que seguro te traen la contra propuesta en lugar de retroalimentarte en como mejorarla.. y casi casi que mejor antes de que se te ocurra hacer algo posteas en javamexico, ¿exite una rutina para..?. , digo para que no vallas a pecar!(sarcasmo) ,

usted no se aguite que si existe jodaTime o las que sea.. en primera con que te sirva a ti ya Ch·"$tes, si le sirve a otro pues chido, bueno esa es mi filosofía, hago librerías para dejarlas tan fácil como me de mi gana, y creo que es una buena Librería, solo hay que documentarla mas y sobretodo hacerla de un fácil uso,la neta jodaTime se me hiso compleja..

hay una diferencia entre crear y usar.. y para mi es mas chingón crear..! hechele ganas!...

Imagen de klone

Bueno pues, primero que nada

Bueno pues, primero que nada gracias @fcodiaz por apoyar mi INICIATIVAMX jejejejje nhaaa y @ezamudio creo que no esta demas tener variedad de rutinas de cualquier tipo estas librerias que hago no son para poder sobresalir entre el mundo de developers solamente lo hago por gusto, amor al arte y aporte a la comunidad GNU(ya que siempre he querido aportar algo interesante), como sea mi libreria no es una mala opcion y con un poco mas de desarrollo, tiempo y RETROALIMENTACION se puede mejorar muchisimo, ademas de que es un proyecto meramente mexicano :D Saludos a todos

Imagen de fcodiaz

LOL mi #iniciativaMx LOL

el titulo lo dice LOL!

Imagen de ezamudio

No es crítica

Era una pregunta honesta. Si estás implementando funcionalidad que no ofrece JodaTime, pues qué bien. Pero si estás replicando solamente su funcionalidad, no es que esté mal; tal vez no puedes usar JodaTime por la licencia (siendo ASL 2 no sé qué bronca podría tener pero bueno, hay empresas alérgicas al software libre) o haya otras razones por las que debas implementar esto.

El principio DRY (Don't Repeat Yourself). Como dice fcodiaz, estás reinventando la rueda (sé que lo dijo con sarcasmo, pero no importa, no deja de ser cierto). El problema con eso es que si inviertes mucho tiempo escribiendo código de infraestructura, como aritmética de fechas o inyección de dependencias o simplificarte tareas en JSP, te queda menos tiempo para hacer las cosas que realmente importan, como la aplicación que el cliente pide (asumiendo que seas un programador profesional que vive del desarrollo de software). Y el tiempo es un recurso finito, por lo que es importante aprovecharlo en lo que realmente importa. Si alguien más ya hizo software para resolver ciertos problemas y lo pone a tu disponibilidad, y se adapta a tus necesidades y realmente lo puedes usar, pues qué mejor... te ahorraron bastante tiempo, el cual puedes aprovechar ya escribiendo el software que va encima de todo eso que ya no tuviste que escribir.

En fin... una pregunta para fcodiaz aprovechando... sé que no usas frameworks y estás en contra de su proliferación. El otro día me dio curiosidad de saber qué piensas acerca de las metodologías, patrones de diseño, cosas así... usas algo de eso o tampoco?

Imagen de fcodiaz

eso si

siempre he tratado de enfocarme al reciclaje de código, y a los patrones de diseño, metodologías etc... vengo trabajando desde hace un buen con PHP(2002), java la puritita verdad viene de la universidad y de rato lo tomo como hobbie espero que no se convierta en mi lenguaje universitario frustrado y llegue a crear algún proyecto real en el..

como sabes PHP siempre ha sido criticado por generar código spaguetti y de una programación algo revuelta, desde que aprendí a crear funciones analizo el problema y creo una función para la siguiente vuelta no tener que hacer lo que ya hice una vez, luego con la OOP pues ya empece a encapsular y ha hacer clases etc.. la primera ves que escuche que me un profesor en la universidad me dijo.. ha husas puro PHP,, ha puro código spaguetti.. amm no sabia a que se refería.. pero por el tono y el adjetivo deduje que era algo despectivo(el es .netero ). y pues investigue y pues si de cierta forma tenia razón, la verdad hoy no concibo un código como en el que muchos manuales de PHP enseñan. de allí siempre hice y trate de seguir digamos las "buenas practicas", hoy te puedo decir que en mi metodología no encontraras en uno de mis PHP de procesos (modelos y controles) una sola etiqueta HTML, CSS o JS, en las vistas no encontraras mas que un <?=$var?>, en los HTML no encontrarás un "onclick" ni una sola linea de JS solo la llamada al .js, ni una la definición de clases CSS, tal vez si alguno que otro atributo directo a un style="", pero que igual como sabrás si quieres modificar un atributo css tiene que estar allí si te vas a clases no puedes crear clases(CSS) dinámicas ni modificarlas, pero solo los styles estrictamente necesarios, en cuanto a los métodos de proceso no encontraras un solo método mio que sobrepase las 10 lineas de código, casi la mayoría son solo de 3 a 5 linea por lo mucho.

tal vez cuando me llegaron a ofrecer un framework ya tenia el mio que me solventaban lo que necesitaba y en muy pocas lineas de código(inconscientemente lo fue creando), la verdad al final terminando una metodología que me gusta mucho y no cambio por una que me ofrezca un framework, hasta ahorita no he encontrado uno que diga con este trabajo menos, alguna vez un profe como que nos intento enseñar JSF si no mal recuerdo pero el chiste es que miraba que x ejemplo en el JSP se escribían nuevas etiquetas que en si para mi lo único que hacían era traducir lo que se hace en un scriplet a etquetas XML, pero al final terminabas con lógica en el HTML, quisas un poco mas lipio por el formato pero al final revolvías de igual manera presentación de lógica,

hasta hoy dia el unico framework que uso es jQuery y eso es mas un toolkit que donde si digo esto no tiene m.. es en las consultas al DOM, las animaciones no tanto, mas si me imagino las cosas que tiene que hacer para hacer lo que hace mientras mas simple dejas algo a un usuario es mas complejo lo que se tiene que hacer y muchas veces implica un montón de procesos que no ve el usuario de la clase/librería, y otro lo que no me gusta es que no esta orientada a objetos, en si mi forma de trabajo es muy similar a como trabaja CodeIgniter no lo he visto mucho pero cuando vi su introductorio, dije no ma..! me copiaron mi idea :P.., en estos momentos como proyecto alternativo de pasatiempo estoy tratando de reescribir las librerías que al final conforma un framework luego publicarlas, pero como es un proyecto de tiempo libre pues va lento, antes aunque tenia la intención de publicar mi metodología practicamnte me quedaban 6hrs libres al día y las tenia que utilizar para dormir, ahora que termine la universidad ya tengo un poquito mas de tiempo libre, así que tal vez pronto te presuma mi trabajo,, =), y dirás para que otro framework, pues primero es un pasatiempos! si me sirve a mi que bien, si le sirve a otros mejor!

y en cuanto al tiempo de inversión en una librería, pues si es tiempo pero realmente no creo que sea tiempo perdido, ademas que dependiendo de las capacidades del programador la librería la puede tener en una o dos tardes, en el caso de klone a la mejor fue una tarde de no tengo nada que hacer.. me pongo a hacer esto.. o hasta es un simple quiero hacer esto!... lo cual creo que al fin es valido, cada quien es dueño de su tiempo, en mi caso entre a jQuery por que mi patrón me lo pidió, y así es como pienso, si mi jefe o lider de proyecto me dice hay que hacerlo bajo esto, pues hay que hacerlo, pero al dominar el lenguaje en esta caso JS el framework lo domine en 1 tarde

en pocas palabras trato de seguir las metodologías que me lleven a un menos trabajo en el futuro, no me gusta los frameworks por que me gusta crear mis soluciones es por lo que me gusta programar la verdad, cuando sabes crear una buena clase, tienes libertades de crear algo tan complejo que en una solo método lo encapsulas y lo conoces bien, no le veo chiste a una programación donde ya todo este hecho, donde ya solo es cosa de llamar cosas. y ya esta todo resulto se me hace una programación sumamente desabrida pero creo que al fina es una cuestión de gustos, ahora si como dice la canción, "mi gusto es ! y ¿quien me lo quitara?"...

Imagen de ezamudio

no-respuesta

Es bien sabido que no te gustan los frameworks, pero no comentaste nada de metodologías, que era mi pregunta, y que no tienen absolutamente nada que ver con ningún framework. Ya no estamos hablando de que uses o no uses Spring o jQuery o Tapestry o Hibernate o lo que sea, sino que hagas las cosas de cierta forma, llevando un cierto orden. Me refiero a cosas como XP o Scrum, PSP, etc. La no-respuesta me hace pensar que tampoco usas nada de eso.

Por otra parte, es cierto que en PHP hay escritas muchísimas porquerías. Es como el Visual Basic del nuevo milenio. En los 90's te encontrabas toda clase de porquerías hechas en VB y la razón es que era tan fácil de aprender que muchos programadores con poco o ningún talento ya se sentían que podían hacer lo que fuera, y se quedaban muy al principio del aprendizaje, habiendo visto solamente cosas de sintaxis pero nunca aprendieron nada de patrones de diseño ni algunas mejores prácticas ni nada de eso, solamente aventaban código hasta que las cosas medio funcionaran.

Ahora eso es muy común verlo en PHP, porque tiene una curva de aprendizaje bastante gentil, con lo que cualquier cuate aunque no sea programador toma un libro de sanborns o lee un tutorial y piensa que ya sabe programar porque le salió un "hola mundo", y luego hacen cada monstruosidad... el lenguaje ciertamente te permite hacer muchas porquerías, pero pues porquerías se pueden hacer en cualquier lenguaje (he visto también cosas para llorar en Java, C# y Objective-C). Es poco común ver código bien hecho en PHP, fuera de ciertas librerías que los mismos creadores ofrecen, o algunos sistemas de software libre que ya tienen cierta madurez y han podido crecer justamente porque tienen un buen diseño.

Exactamente que tipo de retroalimentación buscas?

Es decir, comentarios en general? Comentarios a tu API? ( por cierto no encontré el Javadoc, pero vi los .class ) Comentarios a tu blog? O en que es en lo que te gustaría tener más retroalimentación?

Como no especificas aquí te van algunos al azar.

1.- El constructor que recibe java.util.Date esta roto, falla con  NullPointerException
2.- Parece que interpretaste mal el termino isBefore con isAfter. Entiendo que quizá intentabas ver si el parametro es el que esta antes o después pero no se entiende así.

Ejemplo

        MathDate a = new MathDate();
        MathDate b = new MathDate();
       
        a.addDays( 2 ); // add two hours to a
       
        boolean isBefore = a.isBefore( b );

El resultado es true Cuando lo esperado es que sea false ( por que a + 2 dias es después de b ) Comparalo por ejemplo con el método before de la clase Date

3.- Los nombres de los métodos de MathCalendar no deberían de llevar guiones bajos, sería mejor getDayOfTheYear() que getDay_of_the_year y lo mismo para el resto de los métodos.

4. No deberías de exponer lo que el objeto lleva dentro, porque tu objeto se vuelve inestable y pueden producir errores.

Por ejemplo el siguiente caso:

// Crear un objeto
// y pasarselo a dos funciones

MatchDate mathDate = new MathDate();

doSomethingWith( mathDate );
doSomethingElse( mathDate);

Como tu objeto esta exponiendo su Date interno y no hace una copia defensiva, si el primer método lo modifica, entonces el segundo ya no sabrá si lo que esta recibiendo esta bien o esta alterado. ( Por ejemplo si se ejecuta: mathDate.getDate().setTime( 0 ) )

Esto puede hacer que una aplicación que antes jalaba perfectamente de repente ya nomás no jale.

Eso en cuanto a las mejoras grandes.

En cuanto a las mejoras menores:

1.- Usa "minus" o "subtract" en vez de "reduct" para quitarle unidades a tu clase.
2.- El "millis" lleva doble ele,
3.- No sé si estas sobreescribiendo equals y hashCode, pero si no lo estas haciendo, hazlo, se vuelve primordial cuando estos objetos se utilizan en una Lista o en un Mapa.

Y ... pues ya nada más.

El resto se ve bien. Entiendo que tu proposito es experimentar para aprender a programar.

Si necesitas utilizar esto en producción considera utilizar una biblioteca que tenga más madurez como Joda time. La razón es simple:

1) Que al ser usados/desarrollados por más personas se hacen más robustos y tienen más pruebas. y
2) Cuando se encuentra un bug, uno obtiene la actualización inmediatamente cuando el bug se actualiza en la libreria externa.

Por ejemplo, pocos piensan tener que escribir su propio java.util.ArrayList

Digo, no hay problema, pero habiendo tantos problemas no resueltos, es mejor enfocar los esfuerzos en resolver esos, y no en volver a resolver otros que ya fueron cubiertos ( y tener que repetir los mismos errores y después de mucho tiempo encontrar que la solución ya estaba hecha )

Siempre esta la opción de que participes en algún proyecto open source para contribuir.

Nota final

Te recomiendo un libro excelentísimo. Creo yo sin temor a equivocarme que es el mejor libro de Java que puedas comprar en la vida: Effective Java escrito por Joshua Bloch. Joshua fue quién escribió gran parte del paquete java.util. y java.math y que le dio buena parte de la forma que Java tiene ahora.

Se puede encontrar el Google Books y el PDF es fácil de hallar, pero nada como tener el impreso y leerlo en los ratos de ocio, mientras termina el build o se estar reiniciando el servidor.

Imagen de klone

1.- Use lo guines bajos por

1.- Use lo guines bajos por que quise respetar las variables de la clase Calendar ya que al final del dia terminan siendo estas.
2.- Lo del is before mas bien tu los estas interpretando mal, ya que el que se compara es el objeto que se pasa por parametro
3.- Por que no exponer el objeto? de echo no se trabaja con un Date y no con un calendar, y decido exponerlo por que al final termina siendo un objeto nativo del api y esto ayudara mucho a los que reciban objetos Date o Calendar (que terminan siendo lo mismo) si protegieran todos los objetos imagínate que seria del api de Java ,espero poder subir los codigos al svn.
4.- Si viste la entrada de mi blog hay un método que se llama reset este resguarda el objeto Date con el que se inicializo y de ahi en mas tu puedes hacer "matematicas con tu fecha" :D
5.- Toda libreria que ahorita es gigante comenzo por una persona, asi que no pierdo la esperanza

y por ultimo aceptaria esta critica de otra persona que no fueras tu (he visto tus post)
El resto se ve bien. Entiendo que tu proposito es experimentar para aprender a programar.
pero bueno, pues explico:

de ahi mas buena tu retroalimentacion se ve bien, entiendo que tengas que hablar de mas para aprender a hablar :D Saludos

Imagen de fcodiaz

El primero no tiene por que ser el primero!

@OscarRyz son buenas observaciones pero hay lugares donde ojo puedes faltar al respeto a alguien "Entiendo que tu proposito es experimentar para aprender a programar", yo conosco personalmente a klone, y creme que sabe programar...!, hasta hoy es de los mejores desarrolladores en Java que conozco,

la verdad me desespera esa forma de pensar de el que fue primero deba de ser el único, y que traten de bobos a los que desean crear una alternativa,

en cuanto a "al ser usados/desarrollados por más personas se hacen más robustos y tienen más pruebas", tal ves en eso tengas razón pero para eso se libera y se pide alimentación para seguir madurando el proyecto,

en cuanto a: " Cuando se encuentra un bug, uno obtiene la actualización inmediatamente cuando el bug se actualiza en la librería externa." no lo creo tanto por que la verdad vas a tener que esperar a que el bug se repare en la versión oficial y no por que seas el primero y a ti te urja que se repare el bug, te van a pelar! y no inmediatamente te van a resolver el bug, te podrán en la lista de pendientes a revisión, pero no creo que digan "ha nos llego este bug.. vamos a repararlo y en media hr subimos la nueva release..." y si fuera código libre y tu lo pudieras resolver, tu versión queda incompatible con la próxima versión oficial actualizas tu librería y adiós cambios que allas hecho..

Bueno pero al final hay quienes nacieron para crear y otros para usar...

@ezamudio , haaa esas metodologías te referías, no la verdad, no.. bueno PSP algo pero eso mas bien te ayuda a medir tiempos y llegue a ver algo de TSP, pero la verdad esos dos me enfadaron, XP la verdad ni sabia que existía, pero por lo visto es mas para administración de proyectos en equipos y la verdad pocos poryectos me a tocado iniciarlos y trabajar en equipo de mas de 1 ademas de ser proyectos pequeños, y en los proyectos grandes que me he topado por lo regular traen un asco de practica y codificacion y mucho menos traen metodología alguna, por lo que solo hay que sacar la chamba como se pueda y muchas veces es bajarte al nivel de como fue programado el sistema, no vas a implementar una nueva metodología cuando el proyecto ya esta a un 70%, pues la verdad en cuanto a diseño algunas veces solo me apoyo de diagramado en UML, pero estaría compartieras esas metodologías es donde nos puedes apoyar a los programadores novatos que hay mas alla de lo que nos enseñan en la universidades, yo no soy tan novato en esto hay peores que yo aun, y creo que tu ya también tienes tu tramito recorrido y son de las cosas que la experiencia y las empresas donde trabajas te van inculcando, la verdad no creo que allas salido de la universidad sabiendo todo eso e implementarlas de manera correcta, lo bueno que aunque apenas tengo 8 meses de egresado de la ISC, así que estoy consiente que me falta mucho por aprender... esperemos ir escalando cada vez en mejores empresas

por cierto Feliz día del ingeniero @klone xP.. ha y a los demás que lo sea.. "yo no se pa' que hay tantos si con el primero vasta"(hay como diablos soy sarcástico vdd!!!!)

Precisamente por eso....

Precisamente por eso te pregunté inicialmente que tipo de retroalimentación buscabas!

Si lo que buscabas eran alabanzas a tu código, pues eso hubieras pedido: "Díganme en que estoy bien" Y con gusto te habría dicho varias cosas que me gustaron ( por ejemplo que la librería es bastante manejable en tamaño, o que sirve para abstraer la complejidad de java.util.Calendar )

Pero como lo único que dijiste fue: ojalá me puedan dar sus opiniones.... Entonces eso fue lo que hice; te dí mi opinión y ahí queda. Si algo de lo que escribí te sirve para mejorar y lo usas, bien por tí, si lo ignoras y mantienes tu diseño también es válido.

Pero no me vengas a decir: Opinen sobre esta liberaría, hay!, bueno todos menos tú y tú O Opinen pero no me digan lo que no quiero oir. En ese caso no pidas opiniones en primer lugar.

No existe eso de la crítica positiva y negativa. La crítica es crítica y punto. Es la persona que la oye, quién toma o no algo bueno o malo de ahí dependiendo lo que lleve internamente.

Efectivamente, la razón por la que escribo acá, es para aprender a escribir mejor. El tiempo que me tomé en bajar tu librería, crear un archivo para crear un programa básico, compilarlo, correrlo, cambiar los parámetros de entrada y demás, lo hice para tener argumentos con que hablar de más y poderte dar una opinión enterada. Tu sabes que hacer con esa retroalimentación.

edit

@FcoDiaz El hecho que Carlos ya sepa programar, no implica que no pueda aprender más o mejorar ( a menos que crea que ya lo sabe todo, pero entonces, no pediría opiniones ).

En fin, no era mi intención denostarlo. klone, no quería implicar que no sabias nada de programación, más bien supuse que tu objetivo era aprender ( más ) pues es obvio que algo ya sabías.

Coincido contigo, el primero no debe de ser el único. De hecho es a través de la mejora de lo existente que se logra la innovación. Pero para innovar y mejorar, es fundamental conocer y entender primero lo que ya existe.

Imagen de ezamudio

WTF?

por ultimo aceptaria esta critica de otra persona que no fueras tu (he visto tus post)

O sea que la opinión de Oscar es inválida... porque es Oscar? Si se tomó el tiempo de bajar tu código, revisarlo, probarlo, hacer un programita de prueba, etc creo que su opinión es bastante válida, no veo qué relevancia tenga lo que postee en otros foros/blogs/lo que sea del sitio.

Si realmente piensan liberar este proyecto (o cualquier otro) como una librería, es muy importante que aprendan a aceptar críticas de quien sea. Si les va a molestar estar recibiendo comentarios negativos de cualquier naturaleza o van a invalidar las opiniones de ciertas personas por razones ajenas a la misma crítica que les hagan del proyecto... eso no va muy de la mano con " para eso se libera y se pide alimentación para seguir madurando el proyecto"

@fcodiaz, " hay quienes nacieron para crear y otros para usar"... todos somos usuarios. Si no estás programando en tu propio lenguaje que tú inventaste, estás usando un lenguaje existente. Todos somos usuarios a cierto nivel. Si tanto problema tienen con la gente que usa frameworks en lugar de hacer todo desde cero, por qué tienen intenciones de liberar software? Para criticar a la gente que use el software que ustedes mismos liberaron?

Imagen de klone

bueno, tal vez no me explike

bueno, tal vez no me explike en mi post ya ke se supone ke hice una cita al texto El resto se ve bien. Entiendo que tu proposito es experimentar para aprender a programar. por ke yo se programar y estoy de acuerdo con que no hay criticas positivas ni negativas pero si hay criticas CONSTRUCTIVAS :)

yo entiendo que esto es foro y que se pueden dar puntos de vista de los contenidos, pero el venir y decir ke no se programar si cala asi ke por eso dije lo ke tenia ke decir, por cierto gracias por la descarga

Ayuda con JTable

hola estoy trabajando en una tarea utilizando archivos en java y tengo que hacer un programa donde guardo los datos de un contacto como ser el nombre, el telefono y correoelectronico en un archivo llamado contactos.txt y esa parte ya la hice asi como el cargar los datos de todos los contactos que han sido guardados en un Jtable para asi poder eliminar a un contacto ...Mi problema es q tengo un comboBox con los nombres de todos los contactos guardados y kiero que al dar click en su nombre me cargue en la tabla todo desde su nombre, telefono y correoelectronico y ahi me kede ya no se me ocurre nada porfavor ayudenme si pueden please!!!

Imagen de neko069

Que pena....

He leído el post, veo las fechas de los comentarios, y escribo no con el afán de revivirlo, pero es una pena que haya gente que no sepa tomar las cosas con la objetividad que se requiere, sobre todo para este medio de comunicación tan no-personal (por decirlo de alguna manera)....

Imagen de luxspes

Hay un tiempo para crear y un tiempo para usar...

On Junio 30th, 2010 fcodiaz says:

jajaj.. usp creo que en javamexico no hay que postear rutinas que crees por que seguro te traen la contra propuesta en lugar de retroalimentarte en como mejorarla.. y casi casi que mejor antes de que se te ocurra hacer algo posteas en javamexico, ¿exite una rutina para..?. , digo para que no vallas a pecar!(sarcasmo) ,

Pues en realidad, no solo en javamexico, en cualquier lado, no tiene caso reinventar la rueda, todavia no conozco un cliente que este feliz de que te tardes otro mes en su proyecto por que reinventaste JodaTime (o cualquier otra tecnologia) en ves de simplemente descargarlo y usarlo. Tu si?

hay una diferencia entre crear y usar.. y para mi es mas chingón crear..! hechele ganas!...

Si, definitivamente es mas chido crear, pero hay que saber cuando hacer que, si no, imaginate el caotico estado de la industria si cada que llegaramos a un proyecto dijeramos: "No, no uses Linux, ni Windows, ni MacOSX, ni Solaris ningun SO reconocido, primero, vamos hacerte uno, y cuando hayamos terminado, haremos una GUI para el, y luego, haremos un lenguaje para programar en el, y al final, si sobra tiempo, entonces hacemos tu sistema de nomina... ah, pero sabes que, ese microprocesador de Intel, no es tan bueno, y los de AMD, pues tampoco, deja que te diseñe una arquitectura de hardware especifica para tus necesidades y entonces..." ese si que seria el camino al colapso total de la industria... ;-)

style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">