Estos son los lenguajes de programación más populares según la cantidad de tutoriales que se buscan en Google

19/04/2019
Artículo original

Estos son los lenguajes de programación más populares según la cantidad de tutoriales que se buscan en Google

Existen varias formas de medir la popularidad de los lenguajes de programación, algunas mediciones como el índice TIOBE se basan en la cantidad de sitios web indexados por Google, Yahoo y Bing que mencionan un lenguaje.

Otros realizan encuestas entre desarrolladores y aquellos que ofrecen puestos de trabajo para determinar que tiene más demanda y que buscan aprender los desarrolladores. Relacionado con este último detalle, un índice interesante es el PYPL o "PopularitY of Programming Language Index".

El PYPL mide la popularidad de los lenguajes de programación analizando con qué frecuencia los desarrolladores buscan tutoriales en Google sobre un lenguaje determinado. Su premisa es que mientras más se busca esto, más popular es un lenguaje.

PYPL obtiene sus datos de Google Trends, y puede servir como un medidor bastante justo para conocer la tendencia actual. También explican que tiene más sentido incluir "tutorial" como indicador adicional en las búsquedas porque disminuye la inconsistencia de los resultados.

Python, el lenguaje de programación más popular

Photo 1526379095098 D400fd0bf935

Un ejemplo de esto es "Python", que además resulta ser el lenguaje más popular según el índice PYPL, según el índice TIOBE, y que como apuntan en Stack Overflow también ha venido siendo el de mayor crecimiento en los últimos años.

Contar menciones de "Python" en la web obviamente va a dar resultados mixtos porque la palabra tiene varios significados, pero con "tutorial Python" la historia es otra. Así que PYPL es un buen indicador a tener en cuenta.

Captura De Pantalla 2019 04 16 A Las 17 47 35 PYPL PopularitY of Programming Language - Abril 2019

Actualmente la tabla de abril 2019 tiene a Python a la cabeza, seguido de Java, JavaScript, C#, PHP, C/C++, R, Objective-C, Swift y Matlab cerrando las primeras 10 posiciones. En relación con el año pasado, solo Python y C# han subido posiciones, pero la forma en la que aumenta la tendencia a mencionar Python no tiene comparación con ningún otro lenguaje.

Podríamos destacar también que lenguajes como Go, TypeScript, Kotlin, y Rust también han estado creciendo relativamente desde 2018 con una tendencia al alza a diferencia de la pequeña disminución en el interés por los mismos Java y PHP.

Publicado Ruby 2.5.5

17/04/2019
Artículo original

Se ha publicado Ruby 2.5.5

Esta versión incluye la corrección a una falla que lleva a un punto muerto (deadlock) en aplicaciones multi-proceso o multi-hilos (que usan Process.fork), como por ejemplo Puma.

En la bitácora de cambios podrá ver el detalle de los cambios.

Descargas

  • https://cache.ruby-lang.org/pub/ruby/2.5/ruby-2.5.5.tar.bz2

    SIZE:   14165422 bytes
    SHA1:   1932db85ace80ecdbc5cfc7aada5b5123f7ad739
    SHA256: 1f2567a55dad6e50911ce42fcc705cf686924b897f597cabf803d88192024dcb
    SHA512: 1b56aa79569b818446440b9f2d13122bf7c2976ab9b2865f5fb62d247d7768dd4ac5b5e463709ffec0f757bff7088afd293c2a8c5349c3780763b6444bb354a8
    
  • https://cache.ruby-lang.org/pub/ruby/2.5/ruby-2.5.5.tar.gz

    SIZE:   15996436 bytes
    SHA1:   e6a063728950762925108abbdbf68968ec1ab5bb
    SHA256: 28a945fdf340e6ba04fc890b98648342e3cccfd6d223a48f3810572f11b2514c
    SHA512: 82d0ae019c02822668f7e8c7ad7f62170b059ea70a95a7a7cb26f809e2f2f0f5d25b5bb0ca147413ae42cf0fc5bf60329b56609c266556b1e9f04813c33bb4c9
    
  • https://cache.ruby-lang.org/pub/ruby/2.5/ruby-2.5.5.tar.xz

    SIZE:   11459832 bytes
    SHA1:   85cee62e47f0707808ff3d7cb68b6cd075a65509
    SHA256: 9bf6370aaa82c284f193264cc7ca56f202171c32367deceb3599a4f354175d7d
    SHA512: 06b1d58536ebfacb7b56c1e6ed4b8ab816fadc4f48c845a452554cd262e7908199a30e5793f3cbaec2db56a8803aa5c6089abf7bf06c8fc47867e97870b7dfec
    
  • https://cache.ruby-lang.org/pub/ruby/2.5/ruby-2.5.5.zip

    SIZE:   19186230 bytes
    SHA1:   c0b2bd2b09b40d098b1295303c820d7dd8d97d38
    SHA256: be630e814c796f3750bd892f1250851e67fc4379f75508a4cb7ca7ceb718ddef
    SHA512: 95604d47f3436e0be3a59742a89ac5f1c5c9493ddab8b53b154098b876b2fa12418d2adfc1c71e039a6876d209a7832efd88c0e297df5be56b8f7e92094eb487
    

Comentarios de la versión

Deseamos expresar nuestra gratitud a sorah y k0kubun por su reporte e investigación. Gracias.

Publicado por nagachika el 2019-03-15
Traducción de vtamara

El lenguaje SQL: por qué es uno de los conocimientos técnicos más valiosos que puedes adquirir

17/04/2019
Artículo original

La vorágine tecnológica en la que estamos siempre inmersos a veces nos hace perder la perspectiva. En el caso de los conocimientos, las modas y correr tras la "cosa brillante" más reciente, hace que a veces nos olvidemos de muchas cosas fundamentales e importantes. No solo eso, sino que muchas veces son ninguneadas (con muy mal criterio) por parte de algunos.

Yo llevo casi un cuarto de siglo dedicado de pleno a la programación y he aprendido infinidad de cosas por el camino: lenguajes, plataformas, sistemas, teoría... y muchas cosas que igual que han venido se han ido. Sin embargo, hay un conocimiento que adquirí casi al principio de mi carrera que siempre me ha sido útil y al que sigo sacándole partido aún hoy, 25 años después: el lenguaje SQL.

Si tuviera que elegir un solo lenguaje con el que quedarme, seguramente sería este por varios motivos que expondré a continuación...

SQL vale para mucho más que para programar

Es indudable que si programas, más temprano que tarde vas a tener que utilizar el lenguaje SQL. Al final, salvo contadas excepciones, la mayor parte de los programas deben almacenar y recuperar información en mayor o menor medida. Y la mayor parte de esta información se sigue guardando en bases de datos relacionales. Por ello, es muy difícil escapar de SQL, ya que este lenguaje es el que se utiliza para introducir y extraer información de estos almacenes de datos, y también incluso para administrarlos.

Pero es que da igual si programas o no. Quizá, con el tiempo, te conviertas en algún tipo de mando intermedio o jefe de proyectos. En ese caso, con toda seguridad, una de las tareas propias de tu puesto va a ser obtener información y consultar datos de todo tipo: tareas y tiempos, errores, uso de características, efectividad de cambios... Hay muchas probabilidades de que la mayor parte de esta información esté recogida en una base de datos, y querrás usar SQL para poder acceder a ella sin cortapisas ni ayuda externa.

Imagen de un tablero de datos, por Stephen Dawson, CC0

Si trabajas en marketing o en cualquier puesto de dirección, un poco más de lo mismo: necesitarás analizar crecimientos, efectividad de campañas, correlaciones entre acciones y resultados... y aunque uses algunas herramientas estándar para ver la información, seguro que muchos de estos datos acaban en una base de datos relacional o en un almacén que puede consultarse usando SQL. Hasta puedes usar el lenguaje SQL para acceder a información que luego meterás en una hoja de cálculo Excel para generar bonitos informes, con gráficos y cálculos basados en tus consultas previas.

Se dice muchas veces que la mayor base de datos del mundo es Excel, puesto que millones de personas la utilizan cada día para almacenar sus datos. ¿Quién no lo ha hecho?. Sin embargo, si todos esos que usan Excel de esta manera aprendiesen SQL y usasen una base de datos (aunque sea Access), serían mucho más productivos y mejorarían la capacidad de extraer y analizar la información, sin lugar a dudas.

Lo mismo ocurre en muchos otros puestos. Al final poder acceder por uno mismo y de manera nativa a la información es siempre mucho más eficiente y rápido que tener que depender de otros o limitarte a unos informes estándar.

Lo que aprendes, te vale para siempre

Esta afirmación parece una locura en los tiempos que corren, donde tienes que estar constantemente aprendiendo y cada dos años parece que hay que tirar con todo y volver a empezar.

Sin embargo el lenguaje SQL lleva siendo en esencia lo mismo desde hace muchas décadas. Siempre está ahí, como las pirámides, y no sigue asombrando.

Foto de las pirámides de Giza, por Leonardo Ramos, CC0

Sí, cada 3 o 6 años sale una nueva versión (han habido 9 versiones del estándar SQL en 30 años, de 1986 a 2016), y sí, todas añaden algunas cosas nuevas interesantes, pero la parte esencial que necesitas para el 90% de los casos sigue siendo la misma, y todo lo que sabes sigue siendo válido.

También es cierto que cada sistema gestor de bases de datos relacionales (o SGBDR: como Oracle, MySQL, SQL Server, PostgreSQL...) implementa sus propias características y sintaxis especiales para llevar a cabo tareas complejas y para adaptarse mejor a su funcionamiento. Pero, nuevamente, toda la parte esencial es exactamente la misma y solo debes aprender los detalles. Por supuesto luego puedes profundizar y hacer "virguerías", pero si conoces el lenguaje SQL puedes estar sacando información de cualquier sistema en unos pocos minutos. ¿Cuánto vale eso?

No me interpretes mal: lo de cambiar y aprender cosas nuevas está muy bien, pero para mí (y supongo que para muchos) también es reconfortante saber que hay cosas que no cambian y en las que puedes confiar para hacer el trabajo por mucho tiempo que pase.

Nunca te faltará trabajo

Otra afirmación osada en los tiempos que corren. Al fin y al cabo, parece que hoy en día, con lo complejo que es todo, debes conocer infinidad de herramientas para cualquier pequeño conjunto del trabajo como desarrollador que quieras realizar.

Por ejemplo, piensa en que quieres convertirte en un desarrollador web. Para empezar a hablar, debes pensar en qué quieres especializarte, porque no es ni parecida la parte de Front-End que la de Back-End y, siendo realistas, lo de ser un verdadero desarrollador Full-Stack no está ya al alcance de cualquiera. Vale, supongamos que te decides por la parte "fácil", Front-End. Para poder cubrir los mínimos deberás aprender: HTML5, CSS3, Responsive Web Design, JavaScript, ECMAScript y jQuery. Aparte de eso, si quieres tener un cierto nivel profesional sería recomendable que aprendieses también algún framework como Angular o Vue.js, por supuesto multitud de APIs de HTML5, y muchas herramientas transversales (Editores, Git, Markdown, BEM...) y específicas (npm, Gulp, Webpack, Jasmine, Linters...).

Sin embargo si sabes bien SQL ya tienes mucho camino andado para poder trabajar, aunque solo sea apoyando a otros desarrolladores y a varios departamentos de la empresa para explotar información. Pero es que, si además te especializas a fondo en algún gestor de datos concreto y dominas sus interioridades, puedes ser el rey del mambo. No conozco a nadie bueno con bases de datos a quien no le salga el trabajo por las orejas.

Mujer joven trabajando en cama con un portátil, foto de Victoria Heath, CC0

En resumen

En mi opinión, y siempre con todos los matices que quieras ponerle, la inversión que realices en aprender el lenguaje SQL se paga sola enseguida y te dura toda tu vida profesional.

Incluso aunque no realices un trabajo técnico, saber SQL te pone en otra liga respecto a la mayoría de tus colegas de profesión. Sino, a ver... ¿cuántas personas de marketing, de ventas o de gerencia conoces que sepan obtener por si mismos la información que necesitan para su trabajo? Pues eso... Poder hacer estas cosas por ti mismo te da superpoderes y marca una gran diferencia con otros profesionales.

Deja de pensar que SQL es algo desfasado o que si no te dedicas a nada técnico no te va a servir para nada. A mí me ha servido de mucho y le sigo sacando partido casi todos los días.

¿Crees que puede ser interesante para ti? Pues échale un ojo a nuestro curso de Lenguaje SQL. Aunque, lógicamente, requerirá un esfuerzo por tu parte para aprenderlo, en el corto plazo no te arrepentirás de haberlo hecho.

¡Espero que te haya resultado útil!

Los cuatro motivos con los que Google Cloud quiere arrebatar el control de la nube a AWS y Azure

13/04/2019
Artículo original

Los cuatro motivos con los que Google Cloud quiere arrebatar el control de la nube a AWS y Azure

Aunque tengamos tan asumido que todo se desarrolla y se despliega a la nube, aún estamos en un momento dónde tiene mucho margen de adopción todavía. Así es como el flamante nuevo CEO de Google Cloud lo interpreta, Thomas Kurian. En la reciente conferencia de Google Cloud Next, sacó toda la artillería disponible por parte de la plataforma para crecer y atraer a más usuarios: tanto de otras plataformas (ojo, sin tener que abandonarlas) y las compañías indecisas en apostar plenamente por la nube.

“Alrededor de un 80% de las carga de trabajo de los servidores actuales no están en la nube”, según Eyal Manor, VP de Engineering de Google Cloud. Lo cual supone una gran parte del pastel de mercado del Cloud Computing. Además, a eso se une las reticencias de los CIO de gran parte de las compañías buscando soluciones agnósticas y open source para no atarse a ningún sistema propietario en la nube.

Así, las previsiones del mercado sitúan que en 2024, el 88% de las empresas adopten una estrategia multi-nube, es allí donde Google Cloud aspira ser la pieza fundamental, arrebatando el control de esa infraestructura a AWS, Azure o, incluso, cualquier sistema on-premise que las empresas tengan actualmente.

Captura De Pantalla 2019 04 12 A Las 16 33 12

Anthos, la única forma de “competir” es ser una plataforma híbrida en la nube

“Alrededor de un 80% de las carga de trabajo de los servidores actuales no están en la nube”, según Eyal Manor, VP de Engineering de Google Cloud

Google Cloud está muy lejos de AWS. Claramente la mayoría de las compañías están ya en la nube de la mano de Amazon Web Services, un gigante indestructible durante más de diez años con su plataforma estrella EC2 y decenas de servicios que permiten a los devops configurarlo hasta el último extremo. Tampoco es fácil competir con Microsoft y un ecosistema completamente orientado a desarrolladores de extremo a extremo, cuyo buque insignia es Azure.

Google ha optado con ser el “amigo de todos”, y por ello, lanzó hace unos meses la plataforma de gestión en la nube de Google Cloud Sevices Platform, ahora renombrada a Anthos. Nada más empezar la Keynote de Google Cloud Next’19, no es extraño que fuera el gran anuncio que todos esperábamos.

Diagram 2x

Con Anthos, Google ofrecerá en un único servicio: la gestión, despliegue y monitorización de los distintas plataformas en la nube que el usuario quiera tener, incluso su propia infraestructura de hardware fuera de la nube. Google pretende con ello gestionar tus aplicaciones en AWS y Azure. Un movimiento que como decíamos antes se anticipa a sus competidores.

A todos os sonará Kubernetes, pues bien, como sabréis es la plataforma en la que se basa todas esta infraestructura agnóstica apoyada en contenedores fácilmente replicables y escalables. Google Kubernetes Engine se lanzó en 2015 aprovechando los más de 12 años de experiencia de Google en la ejecución de servicios como Gmail y Youtube en contenedores.

No es usual para los grandes competidores lanzar productos como Anthos que permiten a los usuarios ejecutar sus aplicaciones en otras plataformas. Después de todo, el dinero seguirá estando en los costes del tiempo de computación usados y el almacenamiento. Pero como argumenta Google, este tipo de herramientas es lo que sus usuarios están demandando para solventar el gran problema de tener un arquitectura híbrida con distintos productos que no se pueden comunicar o gestionar de forma conjunta.

Ahora, según promete Google, con Anthos sí será posible. Es difícil que veamos a AWS o Azure reaccionar de igual forma, por ello Google se ha apuntado el primer tanto, aunque aún es pronto para verlo en acción.

Google Cloud haciendo más amigos en la comunidad Open Source que AWS

Amazon AWS tiene una muy mala reputación, cogiendo algunas de las mejores soluciones Open Source y ofreciendo un fork bajo su propia marca

AWS no ha hecho demasiados amigos en la comunidad Open Source, debido a crear sus propios framework, librerías y servicios en la nube, en cierta forma propietarias en el entorno de Amazon. Así que Google ha jugado las cartas de ser más amistoso con la comunidad.

Google es uno de los grande abanderados de Kubernetes y lo ha demostrado fuertemente. Ha empujado a que AWS o Azure empiecen a usar Docker y la infraestructura de Kubernetes. Lo cual le abre la puerta a Google la nube de sus competidores como caballo de troya.

¿Pero qué pasa con el resto de herramientas que las empresas quiere utilizar en sus proyectos? Como bien explicaba el VP de Engineering de Google Cloud sobre el asunto: "muchos de los usuarios buscan soluciones Open Source para no atarse a un proveedor concreto ni una tecnologías. No queremos segregar a nuestros programadores”.

Captura De Pantalla 2019 04 12 A Las 16 56 14

El otro gran anuncio en la Google Cloud Next’19 fue la colaboración con un gran número de compañías relevante del Open Source, cuyas herramientas serán usadas por los usuarios que lo deseen, además de recibir el soporte oficial de cada una de ellas. Entre ellas se encuentran: Confluent, DataStax, Elastic, InfluxData, MongoDB, Neo4J y Redis Labs.

No es un secreto que Amazon AWS tiene una mala reputación en ese sentido, cogiendo algunas de las mejores soluciones Open Source y ofreciendo un fork bajo su propia marca. Incluso, sin dar nada a cambio a los proyectos originales.

En 2024, el 88% de las empresas tendrán una estrategia multi-nube

Hay un amplio debate de cómo es la mejor forma de distribuir este tipo de soluciones open source como servicios en la nube. Claramente, lanzar un servicio que imite la tecnología de estos proyectos Open Source va en contra del progreso de la industria.

De esta forma, Google ha dado un buen paso adelante aliándose con todos estas compañía ofreciendo un modelo que permita avanzar juntos ofreciendo un ecosistema más abierto donde usar, por ejemplo, MongoDB o Redis, sin problema. Ya sea en su propia infraestructura o desplegada en Google Cloud Platform sin ninguna diferencia.

La búsqueda de democratizar el desarrollo de aplicaciones de inteligencia artificial en la nube, incluso para los menos expertos

Tuvimos que esperar al segundo día de las conferencias de Google Cloud Next’19 para ver los productos enfocados en el desarrollo de aplicaciones relacionadas con la inteligencia artificial. Algo que no podía faltar viniendo de Google y su casi mentalidad obsesiva acerca de la IA.

El gran anuncio fue el lanzamiento en beta de AI Platform. Una manera de ofrecer a los desarrolladores y data scientists un servicio end-to-end que cubra todo el flujo desde la recolección de datos, la clasificación, el reconocimientos de objetos o la extracción de modelos para posteriormente pasarlo a producción.

Captura De Pantalla 2019 04 12 A Las 16 50 16

Junto a ello Google lanzó una serie de nuevos producto, casi todos en beta aún, como Cloud AutoML orientado a desarrolladores con poca experiencia en la materia preparar modelos de alta calidad adaptados a sus necesidades empresariales. Para ello cuenta distintas herramientas como AutoML Vision, AutoML Natural Language y AutoML Translation.

Además de ello, una de las presentaciones fue acerca del proyecto que pretende automatizar los data center. Aquí es donde la nube también forma parte indiscutible como solución para muchas compañías, así apoyandose en Twilio, Vonage, Cisco, Five9, Genesys y Mitel demostraron cómo podría ser el futuro de los centros de ayuda a los usuarios totalmente automatizados gracias a la IA. Para ello, también combinaron algunas herramientas de Google como Dialog Flow y Google text-to-speech.

La importancia de que Google Cloud se haya metido de lleno en el machine learning como proveedor de servicios en la nube es que aún es necesario simplificar la entrada a este tipo de herramientas. Hay muchas compañías que quiere hacer uso de ellas pero no cuentan con un equipo de expertos en machine learning en plantilla. De esta forma se pueden ofrecer servicios más concretos para cada sector con un conjunto de herramientas más intuitivas.

Google Cloud Code, más herramientas para desarrolladores que quieran construir aplicaciones nativas en la nube usando Kubernetes

Aunque muchos de los servicios en la nube ya cuenta con ciertas herramientas, plugins integradas para desarrolladores. En ello Google necesita tener un entorno más completo que Microsoft, por ejemplo, con Azure.

Google cloud

El anuncio de Google Cloud Code representa una colección de plugins y extensiones para los IDEs más populares como IntelliJ o Visual Studio Code. Con ello se pretende que los desarrolladores tengan un entorno más fácil de utilizar a la hora de testear y desplegar a los clúster de Kubernetes directamente desde el propio IDE.

Cloud Code combina una serie de herramientas open source, ya existentes como Kubectl, the command-line para trabajar con la API de Kuberntes; Jib para construir containers para aplicaciones Java; y Skaffold, para configurar las pipeline de desarrollo de aplicaciones Kubernetes.

Estas herramientas también integran otras herramientas de DevOps de Google como Cloud Build y StackDriver.

Buen paso para que los usuarios tenga un camino más orientado dentro de su propio marco de trabajo a la hora de usar la nube de Google Cloud.

En conclusión, Google está vendiéndose a sí mismo como el proveedor más abierto e híbrido

Introduciendo Anthos, Google puede ser capaz de ofrecer la herramienta unificada que ayude a las empresas a gestionar las diferentes nubes y servicios, incluso, en sus propias instalaciones. Siempre y cuando basen su arquitectura en Kubernetes. Además gracias a los acuerdos con distintos partners de la industria de Open Source serán los intermediarios del soporte premium a las empresas que lo necesiten, a través de una factura única.

Aunque Google ceda las horas de computación o el espacio de almacenamiento a sus competidores, podrá ser él que maneje realmente las necesidades de las compañías para ser el proveedor del siguiente servicio que demanden o fomentar la migración utilizando un panel de gestión ya familiar.

Curso de verano “Pensamiento computacional e Inteligencia Artificial: de cero a cien en un verano”

10/04/2019
Artículo original

Un año más, el próximo mes de julio desde Programamos participamos en la dirección e impartición del curso de verano "Pensamiento computacional e Inteligencia Artificial: de cero a cien en un verano", organizado por el Ministerio de Educación y Formación profesional, en colaboración con la Universidad Internacional Menéndez Pelayo (#MEFP_UIMP2019). El curso tiene una duración [...]

5 motivos por los que utilizar Java para desarrollar tus aplicaciones

10/04/2019
Artículo original

Imagen ornamental con el logo de Java sobre fondo rojo

Java es una plataforma de desarrollo de propósito general cuya principal oferta de valor siempre ha sido "Escribe una vez, ejecuta en todas partes". En la actualidad es prácticamente ubicua: puedes encontrar aplicaciones Java desde pequeños dispositivos conectados del "Internet de las Cosas" (IoT), hasta servidores, pasando por aplicaciones de gestión en escritorio, desarrollos para móviles, videojuegos...

Existen diversos motivos, técnicos y no técnicos, para la popularidad de Java, pero ¿cuáles son las principales propuestas de valor TÉCNICAS para desarrollar con Java?

Seguro que hay muchas más, y desde luego las siguientes no son exclusivas de Java en su mayor parte, pero la combinación de todas ellas, por lo que nos cuentan nuestros alumnos de Java, es lo que suelen valorar las empresas:

1.- Es multiplataforma

Aunque en la actualidad no es una ventaja tan grande como lo era cuando nació y hay muchas otras plataformas que ofrecen multiplataforma, lo cierto es que el hecho de que Java funcione en prácticamente cualquier dispositivo, servidor o sistema operativo, sigue siendo uno de sus principales atractivos para mucha gente.

Existe una implementación de la máquina virtual de Java para casi cualquier sistema que se nos ocurra.

Además no debemos olvidar que Java se diseñó inicialmente para ejecutarse en dispositivos embebidos, con muchas limitaciones de memoria y potencia, por lo que, dependiendo de dónde lo ejecutemos, puede resultar de gran ayuda apoyarse en el lenguaje.

2.- El código Java es robusto

Hay otros lenguajes como C++ que ofrecen más rendimiento y mayor control, pero que son mucho más difíciles de manejar sin meter la pata. Java es un lenguaje que ofrece manejo automático de la memoria y cuyos objetos no hacen referencia a datos fuera de sí mismos o de otros objetos de Java. Esto hace imposible que una instrucción de Java pueda corromper la memoria, ni "pisar" o comprometer los datos de otras aplicaciones o del propio sistema operativo. La máquina virtual realiza todo tipo de comprobaciones para asegurar la integridad que impiden que pueda romper el sistema operativo u otros programas.

También gestiona la liberación de memoria de manera automática, por lo que la usa eficientemente sin que el programador tenga que preocuparse de nada.

Nuevamente, esto no es exclusivo de Java, ya que otras plataformas, como .NET, disponen de las mismas protecciones, pero es una ventaja frente a plataformas más tradicionales.

3.- Es orientada a objetos

Otra cuestión que no llama la atención por especial en la actualidad, pero a mediados de los años 90, cuando se lanzó Java, no era algo tan frecuente como lo es ahora. Gracias a su orientación a objetos es más fácil crear aplicaciones modulares y reutilizar partes de las mismas, además de que permite implementar mejores patrones de diseño probados que contribuyen a la robustez que se comentaba en el apartado anterior.

También es uno de los motivos de que la propia plataforma sea tan extensible y disponga de tantas funcionalidades nativas o añadidas.

Lo cual nos lleva a...

4.- Funcionalidad de base y mucho código Open Source

Aparte de la enorme cantidad de funcionalidad base que ya incluye la propia plataforma listo para ser utilizado, con Java dispones de muchísimo código de terceros listo para ser utilizado.

Entre que lleva bastante más de dos décadas entre nosotros y que la comunidad es enorme, existen infinidad de bibliotecas y utilidades creadas para extender la funcionalidad y mejorar la plataforma Java.

Casi cualquier cosa que puedas necesitar seguro que la encuentras ya creada en algún proyecto de código abierto. No solo eso: mucha de las bibliotecas más conocidas y utilizadas las han creado y las mantienen grandes organizaciones como Google, Facebook o la fundación Apache, lo cual siempre es una garantía adicional.

Esto facilita mucho la vida de los programadores y no existen muchas otras plataformas que puedan aportar la misma exuberante variedad de código utilizable.

5.- Java es relativamente fácil de aprender

Comparado con lenguajes clásicos como C o C++, desde luego. En general se puede decir que Java no es un lenguaje más difícil de aprender que cualquier otro, especialmente otros modernos como C# o Swift, pero sí que es más fácil de aprender que muchos otros.

Gracias a herramientas especializadas (¡y gratuitas!) como NetBeans y otros editores o entornos de desarrollo, la compilación, depuración y despliegue es muy sencillo y comenzar con él muy fácil.

Como cualquier plataforma compleja y de propósito general como esta, tienes dos retos al aprenderla:

  1. Hay tanta funcionalidad que es difícil saber por dónde empezar y cuáles de las, literalmente, miles de clases disponibles debes aprender.
  2. A medida que aprendes y profundizas la cosa se vuelve más compleja y necesitas dominar mejor los fundamentos para poder salir adelante.

Imagen ornamental

Ninguna de estas ventajas es exclusiva de Java y se puede aplicar a otras plataformas, especialmente a .NET y el lenguaje C#. Sin embargo, la combinación de lo que hemos dicho con el hecho de llevar tanto tiempo en el mercado, la enorme comunidad de desarrolladores que hay por todo el mundo y la gran demanda existente en empresas e instituciones, crea un "círculo virtuoso" que hace que Java sea desde hace muchos años la plataforma de desarrollo más importante.

Compartir código en Visual Studio: proyectos compartidos o librerías

08/04/2019
Artículo original

La manera tradicional de compartir código entre proyectos en Visual Studio siempre ha sido la creación de bibliotecas de código, es decir, ensamblados en forma de DLL que permiten la reutilización de clases entre proyectos.

Nota: el término original en inglés es "library" y se suele traducir al español erróneamente como "librería". En realidad la traducción y el término correcto en español es "biblioteca", en todas sus acepciones. Se trata del típico "false friend" inglés/español. En el título he puesto "librería" porque seguramente será lo que busquéis la mayoría. 

Este es el camino a seguir en la mayor parte de las ocasiones ya que creamos una DLL con la funcionalidad requerida a compartir entre varias aplicaciones, y simplemente añadiendo una referencia a dicha DLL (o el proyecto, si está en una misma solución) a otro de nuestros proyectos en Visual Studio ya tenemos la funcionalidad que necesitábamos:

Añadir una referencia a un proyecto

La verdad es que esto es muy cómodo, pero no siempre es lo que queremos. En ocasiones lo que nos interesa es compartir funcionalidad entre proyectos compartiendo directamente el código fuente. A lo mejor no nos interesa distribuir otra DLL con el producto final, o tal vez queremos ir tocando al código original en función de las necesidades y que éste evoluciones por igual en todos los proyectos que lo usan. También puede ser muy útil cuando quieres usar el mismo código genérico en varios proyectos que se enfocan y compilan para plataformas diferentes.

Para solucionar este tipo de problemas, en Visual Studio 2013 update 2 (en abril de 2014) se introdujo un nuevo tipo de proyectos: los proyectos compartidos.

El archivo de un proyecto compartido tiene la extensión .shproj y al contrario que en el caso de una biblioteca, lo que se utiliza es directamente el código fuente, no la DLL resultante.

Por lo tanto, el código fuente de ese proyecto compartido es como si formase parte de nuestro proyecto actual, no de un proyecto aparte, de modo que se compila como cualquier otro archivo de nuestro proyecto y forma parte del ensamblado final de la aplicación. Para entendernos, es como si tuviésemos una subcarpeta con esos archivos de código dentro de nuestro proyecto. Al final obtenemos una sola DLL. Pero es un proyecto independiente que podemos usar en varios sitios a la vez.

Por ejemplo, en mi proyecto Open Source MIIS, un CMS basado en archivos, quería compartir algún código entre éste y otro side-project comercial que tengo, IISMailer, pero no quería tener una biblioteca común que distribuir y además al mismo tiempo me interesaba poder tocarle al código en cualquiera de los dos proyectos y que ambos se beneficiaran de los añadidos. La solución: usar un proyecto compartido.

En este caso le llamé IISHelpers, y aquí podemos verlo en el código fuente de MIIS abierto en Visual Studio:

Un proyecto compartido y otro qu elo referencia en Visual Studio

El recuadro de arriba es el proyecto compartido en sí, que se ve como un proyecto aparte (porque lo es) pero se comporta como si el código estuviese dentro del proyecto principal, desde el cual se hace referencia. Esto último podemos verlo si desplegamos las referencias del proyecto principal, en donde se ve con el mismo icono de proyecto compartido que arriba. La forma de añadirla es la habitual, simplemente lo elegimos desde la pestaña "Proyectos".

Cómo crear un proyecto compartido en Visual Studio

Crear uno de estos proyectos es de lo más sencillo desde VS2015 (antes no lo era tanto), y consiste simplemente en elegirlo en la lista de plantillas de proyecto que tiene Visual Studio al añadir un nuevo proyecto desde una solución, así:

Animación que muestra cómo agregar un proyecto compartido a una solución en Visual Studio

Ahora solo resta añadir la referencia en otro proyecto para que forme parte de éste.

Por regla general es fácil y directo (ahora te cuento cuándo no). Basta con ir a agregar una referencia y elegir el proyecto compartido dentro de la pestaña de "Proyectos compartidos", así:

Añadiendo referencia a un proyecto compartido

En esta animación primero añado a la solución un proyecto compartido existente, y luego añado una referencia a éste desde el proyecto principal.

No aparecen referencias a proyectos compartidos en proyectos web en VS2017

Visual Studio 2017 añadió un bug a la hora de manejar proyectos compartidos desde aplicaciones Web. Simplemente no aparece la pestaña de "Proyectos compartidos" al agregar una referencia y por lo tanto no podemos agregarla visualmente tal y como se observa en la animación anterior.

En Visual Studio 2019 lo han solucionado y funciona perfectamente también proyectos web. Esperemos que dure.

Por suerte solucionarlo es relativamente sencillo, pero engorroso. Lo que tenemos que hacer es editar manualmente el archivo del proyecto al que queremos añadir el proyecto compartido. Partiendo de la base de que ya has añadido el proyecto compartido a la solución, ahora debes abrir con un editor de texto (el mismo bloc de notas nos vale) el archivo .csproj que tiene la definición de tu proyecto de C# (.vbproj en el caso de Visual Basic .NET). Dentro de este archivo XML debes localizar los nodos <import> y debes añadir entre éstos un nuevo nodo import que apunte al archivo .projitems de tu proyecto compartido, usando rutas relativas o absolutas para ello, así:

<Import Project="..\..\MiProyCompartido\MiProyCompartido.projitems" Label="Shared" />

Nodo import del archivo de proyecto de C#

Esto le indica a Visual Studio que debe cargar ese proyecto compartido como referencia. El archivo .projitems contiene una lista con todos los archivos de código del proyecto compartido y la manera en la que debe actuar el compilador con ellos (puedes abrirlo para comprobarlo).

Si ahora abres la solución en Visual Studio verás que el proyecto de código compartido está ahí, al igual que su referencia y todo funciona como cabría esperar.

Muy importante: como a los proyectos compartidos se accede a través de su ruta, es importante que si los movemos de sitio lo tengamos en cuenta y los cambiemos tanto en los archivos .sln o como en los .csproj que hagan referencia a los mismos, o Visual Studio no podrá cargarlos. Por eso son mejores las rutas relativas que las absolutas, pero de todos modos puede ser un engorro. De hecho esta es una de las mayores "pegas" del uso de este tipo de proyectos. Ahora bien, si tenemos un entorno de desarrollo estable y los archivos de proyecto los tenemos siempre en los mismos sitios, no debería haber problema. Pero debes tenerlo en cuenta, sobre todo si compartes proyectos con más miembros de un equipo.

Referencias a archivos individuales

Un último detalle para terminar. Si lo único que necesitas compartir de esta manera son uno o dos archivos, quizá lo del proyecto compartido sea un poco "matar moscas a cañonazos". Desde las primeras versiones de Visual Studio existe una manera de compartir archivos individuales de manera parecida, para reutilizarlos como si fueran parte del proyecto actual aunque estén en otro lado. Se trata de la opción Añadir como vínculo que se ofrece al agregar un archivo existente:

Añadir referencia como vínculo a un archivo

De esta manera el archivo se utiliza directamente desde donde esté, fuera del proyecto, pero se compila como un archivo de código fuente más. O sea, consigue lo mismo que los proyectos compartidos pero archivo a archivo, lo cual está bien si solo son como mucho un par de ellos (más se hace inmanejable y es mejor recurrir a los proyectos compartidos).

¡Espero que te resulte útil!

@Transactional spring framework

07/04/2019
Artículo original

Hola soy nuevo en Spring y tengo una duda acerca de @Transactional, tengo un método que llama a dos métodos anotados con @Transactional cada uno de ellos hace un insert en una base de dados diferente pero cuando ocurre un error no hace rollback en ambas bases de datos.

Este es el método:

@Transactional(readOnly=false)
public ResponseEntity<ResultVo<String>> modificaFechasVacaciones(@RequestBody RequestVacacionesVO request,HttpServletRequest http) throws ParseException{

                       // base de datos 1
                        this.vacacionesBO.modificaSolicitudes(request, usuarioFormat,diasSolicitados, diasExcedentes);
                       
                       // base de datos 2
                        this.vacacionesBO.updateDiasSolicitados(request, diasSolicitados);

                        // base de datos 3
                        this.vacacionesBO.updateDiasDisponiblesRechazo(request, diasDisponibles);

               
        }

Esta es la configuración de los txManager para las dos bases de datos:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
                xmlns:context="http://www.springframework.org/schema/context"
                xmlns:tx="http://www.springframework.org/schema/tx"

leer más

Cómo Crear Imagenes Con Un Marco Circular Al Estilo G+ en LaTeX

05/04/2019
Artículo original

En éste artículo vamos a ver algo curioso que aprendí hace poco. Con el paquete tikz de LaTeX.

Los que uséis G+ sabréis que las fotos de perfil aparecen encuadradas en un círculo, en lugar de un cuadrado. Rellenando mi Currículum se me ocurrió que podría insertar mi foto con ese mismo estilo.

Por supuesto, podría haber creado la imagen directamente con forma circular, pero ya que estoy usando una plantilla LaTeX para el Curriculum, me propuse buscar la manera de implementarlo.

Resulta que es bastante sencillo, el siguiente código conseguirá el efecto deseado:

\documentclass[border=5mm]{article}
\usepackage[skins]{tcolorbox}

\begin{document}

  \resizebox{256pt}{256pt}{
    \begin{tikzpicture}
      \node[circle,draw,inner sep=1cm,fill overzoom image=./pictures/image.jpg] (A) {};
    \end{tikzpicture}
  }

\end{document}

Donde:

  • image=./pictures/image.jpg es la ruta a la imagen.
  • \resizebox{256pt}{256pt} es el tamaño que queremos.
  • sep=1cm El borde de la imagen.

Tras compilar el código, el resultado es el siguiente:

Cómo Crear Imagenes Con Un Marco Circular Al Estilo G+ en LaTeX

Referencias

Códigos secretos y ocultos para Android

05/04/2019
Artículo original

Si te gusta jugar con tu Android, estos Códigos secretos y ocultos para Android son para tí. Con ellos tendrás mejor control de tu dispositivo Android.

He probado estos códigos yo mismo, no asumo ninguna responsabilidad si algún código causa algún problema. Este artículo es solo para usuarios avanzados.

  • *#*#4636#*#*

Da datos muy interesantes sobre la batería y el teléfono. Te llevará a un menú con 4 opciones: información del teléfono, información de la batería, historial de batería y estadísticas de uso.

  • *#*#7780#*#*

Este es el código que formatea el teléfono al estado de fábrica (factory reset). Borra todas las configuraciones de la cuenta de google de tu teléfono (muy útil si tienes que dejar el teléfono a alguien por unos días). Además borra todos los datos del sistema y aplicaciones descargadas. Puedes probar este código con seguridad, ya que una vez que lo introduzcas, solicita confirmación. Si lo reseteas, no se borran los archivos de la tarjeta de memoria.

  • *2767*3855#

Piénsalo dos veces antes de usar este código, porque no solicita confirmación. Una vez introducido, lo único que lo detiene es quitar la batería del móvil. Este código formatea el almacenamiento interno y resetea todas las configuraciones.

  • *#*#34971539#*#*

Dá información sobre la cámara. El menú que aparece será: actualizar el firmware de la cámara, obtener información del firmware, y recibir las veces que se ha actualizado. No pulseis la primera de las opciones porque la cámara no funcionará y tendreis que llevarlo al servicio técnico.

  • *#*#7594#*#*

Permite modificar la función del botón de apagado. Por defecto el teléfono se apaga si lo mantenemos pulsado un rato. Con este código podemos cambiar esto, para que se apague con solo una pulsación corta de este botón.

  • *#*#273283*255*663282*#*#*

Con este código se abre una pantalla para copiar archivos, donde podemos realizar una copia de seguridad de nuestra música, imagenes etc.

  • *#*#197328640#*#*

Con este código entramos en el modo servício. Podemos cambiar configuraciones y ejecutar test.

  • *#*#8255#*#*

Veremos un monitor del servicio Gtalk.

Página Siguiente