¿Qué es la arquitectura de microservicios?

29/03/2017
Artículo original

Como ya sabréis los habituales de este blog, nos encanta probar las últimas tendencias tecnológicas, y más si estas sirven para acercar los planteamientos y las necesidades de las TI y las de la propia empresa. El que os traemos hoy es uno de los mejores ejemplos y ha ganado popularidad rápidamente en los últimos […]

54 Blogs / Canales / Podcast sobre informática, Data Science y Seguridad

29/03/2017
Artículo original

¿Qué es esta lista?

A continuación se listan una serie de Podcast, Canales de Youtube y Blogs que sigo que hablan sobre informática, Data Science y seguridad.

Si conoces de algún recurso digital que hable y enseñe informática, data science o seguridad no listado abajo, contribuye dejándonos un comentario y lo añadiremos a la lista, o mejor aún, añádelo tú mismo haciendo un Pull Request!

Gracias a @sinclair_88 por proponer la idea de crear la lista.

Otras listas

Computer Science (Programming, Data Science & Security)

Youtube

ComputerPhile

Videos all about computers and computer stuff. Sister channel of Numberphile.

Security Now!

Steve Gibson, the man who coined the term spyware and created the first anti-spyware program, creator of Spinrite and ShieldsUP, discusses the hot topics in security today with Leo Laporte.

Podcasts

Data Science

Not So Standard Deviations

NOt so standard Deviations podcasts

Roger Peng and Hilary Parker talk about the latest in data science and data analysis in academia and industry.

Linear Digressions

Linear Digressions Podcass

Linear Digressions is a podcast about machine learning and data science. Machine learning is being used to solve a ton of interesting problems, and to accomplish goals that were out of reach even a few short years ago.

Data Skeptic

Data Skeptic is your source for a perseptive of scientific skepticism on topics in statistics, machine learning, big data, artificial intelligence, and data science. Our weekly podcast and blog bring you stories and tutorials to help understand our data-driven world.

Data Stories

A podcast on data visualization with Enrico Bertini and Moritz Stefaner

Partially Derivative

Partially Derivative is a podcast about data science in the world around us. Episodes are a mix of explorations into the techniques used in data science and discussions with the field's leading experts. The podcast is a personal project hosted by Jonathon, Vidya, and Chris -- three experts in data science.

Talking Machines

Talking Machines is your window into the world of machine learning. Your hosts, Katherine Gorman and Ryan Adams, bring you clear conversations with experts in the field, insightful discussions of industry news, and useful answers to your questions.

Computer Science

Chips with everything

Why are teens shoplifting makeup and posting their hauls to Tumblr? How can a blind man run a marathon through the desert with just an iPhone? And what happens to your social media profiles after you die? Week on week, Leigh Alexander answers questions just like these on our digital culture podcast, Chips with Everything.

Security

Security Now!

Steve Gibson, the man who coined the term spyware and created the first anti-spyware program, creator of Spinrite and ShieldsUP, discusses the hot topics in security today with Leo Laporte.

Programming

Talk Python To Me

Talk Python to Me is a weekly podcast hosted by Michael Kennedy. The show covers a wide array of Python topics as well as many related topics (e.g. MongoDB, AngularJS, DevOps).

Blogs

Data Science

Stories by IBM Cognitive Business on Medium

This is the age of breakthrough. An age in which digital business meets digital intelligence — human expertise enhanced, scaled and accelerated.

Stories by Oliver Cameron on Medium

I lead the self-driving car team at @udacity. Previously founder of a @ycombinator startup.

Udacity Inc — Medium

Learning for the Jobs of Today, Tomorrow, and Beyond

Nathan Benaich on Medium

Investor and technologist. All things #AI and emerging tech. Former research scientist, photographer, perpetual foodie.

Adam Geitgey on Medium

Interested in computers and machine learning. Likes to write about it.

Airbnb Engineering & Data Science — Medium

Creative engineers and data scientists building a world where you can belong anywhere.

Stories by Camron Godbout on Medium

Deep Learning and NLP enthusiast

Stories by Monica Rogati on Medium

Data Science advisor. Turning data into products and stories.

Actionable Data - Medium

Big Data, data science and analytics advice from the folks at Pivotal Data.

Stories by Carlos E. Perez on Medium

Deep Learning Patterns, Methodology and Strategy @IntuitionMachine.com

Stories by Sam DeBrule on Medium

Weekly AI/ML Newsletter: machinelearnings.co. Formerly @mattermark @chartbeat. I’d love to meet you for coffee and chat about AI!

Stories by NYU Center for Data Science on Medium

Official account of the Center for Data Science at NYU, home of the Masters in Data Science.

sebastianraschka.com

Sebastian Raschka is the author of the bestselling book “Python Machine Learning.” As a Ph.D. candidate at Michigan State University, he is developing new computational methods in the field of computational biology.

Data Elixir

Data Elixir is a weekly newsletter of curated data science news and resources from around the web.

Free for data lovers.

Becoming A Data Scientist

Documenting my path from "SQL Data Analyst pursuing an Engineering Master's Degree" to "Data Scientist"

FlowingData

FlowingData explores how statisticians, designers, data scientists, and others use analysis, visualization, and exploration to understand data and ourselves.

FastML

This site is brought to you by the letters “M” and “L”. It is meant to tackle interesting topics in machine learning while being entertaining and easy to read and understand.

Natural Language Processing Blog

My biased thoughts on the fields of natural language processing (NLP), computational linguistics (CL) and related topics (machine learning, math, funding, etc.)

Andrej Karpathy blog

I am Andrej Karpathy, a PhD student at Stanford working on Deep Learning. My academic website has much more information.

Machine Learning at Berkeley Blog - Articles

Machine Learning at Berkeley (ML@B) is student-run organization based at the University of California, Berkeley, and is dedicated to building and fostering a vibrant machine learning community on the University of California, Berkeley campus as well as contributing to the greater machine learning community beyond the campus.

DataScience Blog

DataScience pairs data expertise with powerful tools to help businesses unlock the value in their data.

Programming

You've Been Haacked

I work at GitHub doing whatever I can to make it even more awesome.

Genbeta Dev

Blog sobre programación.

The Geek Stuff

I will be posting instruction guides, How-Tos, troubleshooting tips and tricks Linux and open source technologies. My focus is to write articles that will either teach you or help you resolve a problem.

Texblog - because LaTeX matters

My intention is to provide valuable tips and tricks for your daily LaTeX editing. In addition, I’ll try to give answers to questions which are not easily found on the web.

Asyncified!

Hi, my name is Yuval Itzchakov, I'm 27 years old from Israel. I've been programming for about the last 4 years, started out in the .NET stack and slowly broadening horizions to Python and some C++. I love learning internals of systems and exploring what happens under the covers.

Yegor Bugayenko

I'm Yegor Bugayenko (Russian: Его́р Бугае́нко), a programmer, a founder, an investor, and a philanthropist.

Security

JerryGamblin.com

Security Advocate. Problem Solver. Hacker. Ebullient Communicator.

Open Whisper Systems Blog

Open Whisper Systems is both a large community of volunteer Open Source contributors, as well as a small team of dedicated grant-funded developers. Together, we're working to advance the state of the art for secure communication, while simultaneously making it easy for everyone to use.

Schneier on Security

Bruce Schneier is an internationally renowned security technologist, called a "security guru" by The Economist. He is the author of 13 books--including Data and Goliath: The Hidden Battles to Collect Your Data and Control Your World-- as well as hundreds of articles, essays, and academic papers.

Krebs on Security

Brian Krebs worked as a reporter for The Washington Post from 1995 to 2009, authoring more than 1,300 blog posts for the Security Fix blog, as well as hundreds of stories for washingtonpost.com and The Washington Post newspaper, including eight front-page stories in the dead-tree edition and a Post Magazine cover piece on botnet operators. In 2014, he was profiled in The New York Times, Business Week and by Poynter.org. More recently, he was invited to an “Ask Me Anything” discussion on Reddit about investigative reporting.

ImperialViolet

Adam Langley's Weblog

Trend Micro Simply Security

For nearly 30 years, Trend Micro’s unwavering vision has been to make the world safe for exchanging digital information. Security is our entire focus, and it shows. This single-minded passion has inspired our innovations that keep up with the bad guys despite a changing IT landscape, riskier user behavior, and constantly evolving threats.

Pentester.es

Jose is one of the individuals who have earned the GIAC Security Expert (GSE) designation. He is a SANS Institute community instructor for penetration testing courses and a regular speaker at security conferences.

Un informático en el lado del mal

Seguridad informática, hacking, pentesting, ldap injection, blind ldap injection, sql injection, blind sql injection, heavy queries, connection string parameter pollution, foca, evil foca, latch, dust rss, metashield protector, faast, metadatos, libros de seguridad informática, informática 64, recover messages, 0xword, cálico electrónico, eleven paths, telefónica y chema alonso. las opiniones son de los autores de los artículos y las mías son mías personales.

MuySeguridad

Noticias sobre seguridad, virus, antivirus, hacking, phising, spam, ataques, timos, estafas, malware y otras amenazas de seguridad informática.

Security By Default

Después de mucho tiempo hablando sobre la posibilidad de crear un blog íntegramente sobre seguridad informática, nos hemos decidido a ponernos en marcha y crear un espacio donde poder compartir experiencias y hablar de los aspectos técnicos relacionados con la seguridad informática.

Lifehacker

Tips, tricks, and downloads for getting things done.

Hispasec @unaaldia

Servicio gratuito de noticias y análisis sobre seguridad en español.

Ars Technica » Risk Assessment

Serving the Technologist for more than a decade. IT news, reviews, and analysis.

10 de las Mejores Herramientas en la Línea de Comandos II

28/03/2017
Artículo original

Comandos

En esta segunda entrega revisaremos otras diez herramientas que podemos usar en nuestra terminal de Linux y que nos ahorrarán tiempo y esfuerzo en muchas tareas cotidianas ampliando así nuestra lista de imprescindibles.

11. lshw

Se trata, como se puede deducir de su nombre, de un Hardware Lister, que nos permitirá conocer cualquier detalle sobre el hardware de nuestra máquina. Si tu distribución es basada en Debian (como Ubuntu) posiblemente lo tengas ya instalado, de no ser así en su página oficial ofrecen todos los detalles.

Aunque la mayoría de la información se puede consular en ficheros del sistema como /proc/meminfo que es de dondel el propio programa extrae la información, a veces no está lo más legible posible y no en el mismo lugar, por eso esta es tan interesante.

Veamos por ejemplo un extracto del informe de memoria que hace:

$ lshw -C memory
...
*-cache:0
       descripción: L1 caché
       id físico: 5
       ranura: L1-Cache
       tamaño: 64KiB
       capacidad: 64KiB
       capacidades: internal write-back data
       configuración: level=1
  *-cache:1
       descripción: L2 caché
       id físico: 6
       ranura: L2-Cache
       tamaño: 4MiB
       capacidad: 4MiB
       capacidades: internal write-back instruction
       configuración: level=2
...

Una sencilla forma de conocer la caché de nuestro procesador (entre otras muchas cosas relacionadas con memoria).

Para su ejecución solo necesitamos especificarle el tipo de información con la opcion `-C, en este caso memory. Se pueden consultar todas las opciones en la ayuda.

Además podemos hacer cosas como extraer la información en formato HTML (también XML), que aunque no tiene un diseño muy trabajado, nos puede ser útil.

Además también dispone de una interfaz para escritorio, llamada lshw-gtk (aunque eso nos interesa menos).

12 htop

Como un alternativa a top de la anterior entrega (que se nos puede quedar corto en algunas ocasiones) tenemos htop, que no es más que otro visor de procesos, pero interactivo. Este tendremos que instalarlo, ya que no suele venir por defecto, pero merece la pena.

No solo ofrece una visión de la memoria de nuestros sistema en tiempo real sino también el número de tareas, hebras y carga del sistema, incluso el tiempo que lleva encendido el equipo.

HTOP

Y lo mejor de todo es que podemos navegar por los procesos y realizar ciertas acciones sobre ellos, como matarlos con kill, aquí F9, directamente desde el propio programa.

Pero si quieres algo más rápido como para por ejemplo, ver la memoria que tienes libre y usada para swap siempre puedes usar free, instalada por defecto en la mayoría de las distros.

Por ejemplo:

$ free
              total        used        free      shared  buff/cache   available
Memoria:     4036232     3014980      177508      243164      843744      470464
Swap:       7999484     2502164     5497320

13 fdisk

Aunque es una herramienta completa (merecería un post aparte) para realizar particiones en nuestro disco también nos puede servir sólo para consultar información relacionada, muy útil a si tenemos varios discos, por ejemplo, para ver nomenclatura, tamaños, etc, y no podemos dejar de mencionarla.

Ejemplo:

fdisk -l
Disposit.  Inicio     Start     Final  Sectores   Size Id Tipo
/dev/sdb1  *           2048    206847    204800   100M  7 HPFS/NTFS/exFAT
/dev/sdb2            206848 239460410 239253563 114,1G  7 HPFS/NTFS/exFAT
/dev/sdb3         239462398 488396799 248934402 118,7G  5 Extendida
/dev/sdb5         484225024 488396799   4171776     2G 82 Linux swap / Solaris
/dev/sdb6         239462400 484225023 244762624 116,7G 83 Linux

14 df, du y ncdu

El espacio libre que tenemos en nuestro sistema siempre es algo a tener en cuenta y para comprobarlo no necesitamos ninguna herramienta gráfica, mucho más rápido y eficiente desde terminal, veamos algunas utilidades.

Con df podemos ver información relevante sobre nuestro sistema de ficheros, como el porcentaje de ocupación, entre otros. Así podremos comprobar de un vistazo el estado de las particiones, por si tuviéramos que realizar una reasignación de espacio.

$ df
S.ficheros     bloques de 1K   Usados Disponibles Uso% Montado en
udev                 1997292        0     1997292   0% /dev
tmpfs                 403624     6384      397240   2% /run
/dev/sda6           98298500  8421160    84861020  10% /
/dev/sda7          123329532 15084216   101957496  13% /home
...

Pero si queremos algo más sencillo como saber el tamaño de una carpeta o fichero podemos usar du con las opciones que hace su salida más legible, como -hs.

Por ejemplo:

$ du -h
3,3G	./Tasks
5,8M	./Books
3,3G	.

Que nos dice el tamaño del directorio y de todo lo contenido en su interior.

Pero existen otras herramientas con más características, como ncdu. Si du era el acrónimo de “disk usage”, este podría significar “nice disk usage” (aunque en realidad es NCurses Disk Usage).

Y lo bueno que tiene es que entramos en una interfaz (directamente en terminal) donde no solo vemos el tamaño de los ficheros o directorios sino también el tamaño relativo al fichero de mayor peso, para de forma muy rápida ver los que más espacio están ocupando en disco en relación al resto.

Por ejemplo:

/Microservices
3,3 GiB [##########] /Talks
5,8 MiB [          ] /Books

Y no solo eso, además (y es lo mejor) podemos navegar por las carpetas seleccionándolas y haciendo intro, recalculándose el peso relativo para los fichero de esta.

/Talks
539,4 MiB [##########]  Testing Microservices.mp4
343,5 MiB [######    ]  Building Fault Tolerant Microservices.mp4
342,6 MiB [######    ]  GOTO 2015 • Microservi...ify • Kevin Goldsmith.mp4
314,2 MiB [#####     ]  Principles Of Microservices by Sam Newman.mp4

15 dd

Potente y simple herramienta que entre otras cosas nos sirve para grabar imágenes .iso en memorias externas, algo que seguramente hayamos necesitado hacer en más de una ocación. Mucho más sencillo desde terminal, así de simple, por ejemplo:

dd if=input.iso of=/dev/sdb

Donde especificamos la iso que queremos quemar (estando en el mismo directorio) y el punto de montaje (para conocerlo podemos usar dfcomo hemos visto antes).

16 history

Herramienta muy simple para ver los últimos comandos usados (en realidad todos).

Un ejemplo:

$history
1080  locate linux
1081  clear
1082  apropos ls
1083  apropos "create dir"
1084  clear

Como vimos en otra entrada puede usarse para, por ejemplo, conocer que comandos usamos con más frecuencia.

history | awk '{print $2}' | sort | uniq -c | sort -rn | head -10

17 rsync

Útil para hacer cópias de forma eficiente, pero incrementales, es decir, no se realizan copias completas sino una inicial y las posteriores sobre las modificaciones que el directorio en cuestión haya sufrido. Muy útil para copias de seguridad, entre otras muchas cosas.

Además el origen y el destino pueden ser tanto el mismo equipo como equipos en la misma o diferentes redes.

Por ejemplo:

rsync -rtv origen/ destino/

Esta es otra herramienta que daría para otra entrada completa.

18. locate

Ideal para buscar ficheros en todo nuestro sistema. Es algo bruto, ya que por defecto busca en todo el sistema pero usando alguna de las opciones podemos refinar un poco su comportamiento. Eso sí, necesitarás usar algún paginador como lesso more para ver la salida poco a poco.

Un ejemplo:

$ locate password | less
/bin/systemd-ask-password
/bin/systemd-tty-ask-password-agent
/boot/grub/i386-pc/legacy_password_test.mod
/boot/grub/i386-pc/password.mod
...

19. apropos

Algo así como “A propósito de…” (traducción libre) nos servirá de ayuda si no recordamos un comando pero si que es lo que hacía o con qué trabajaba o simplemente buscamos entre el software instalado en nuestra máquina. Esta herramienta busca en las cabeceras y descripciones de las páginas de man de los programas instalados en el sistema para ayudaros a encontrarlo.

Si por ejemplo buscamos un programa que hacía algo con Python, podemos usarla así:

apropos python | less

(Usamos less para ver progresivamente la salida del comando)

Y vemos que entre otras cosas tenemos instalados conversores entre versiones de Python, quizás ni lo sabías :) .

2to3 (1)             - Python2 to Python3 converter
2to3-2.7 (1)         - Python2 to Python3 converter
2to3-3.5 (1)         - Python2 to Python3 converter
dh_python2 (1)       - calculates Python dependencies, adds maintainer script...
dh_python3 (1)       - calculates Python dependencies, adds maintainer script...
fab (1)              - Simple Pythonic remote deployment tool
jwt3 (1)             - Python implementation of JSON Web Token
:

20. tree

Si algún momento has necesitado conocer las subcarpetas y ficheros de un subdirectorio estando en terminal probablemente hayas acabando entrando y saliendo de ellas, bajando y subiendo de nivel, todo esto es mucho más sencillo si podemos ver el árbol de directorios y ficheros desde terminal, grácias a la orden tree.

 $ tree .
.
├── css
│   └── kit.css
├── index.html
└── js
    ├── lib1.js
    ├── lib2.js
    └── lib3.js

2 directories, 5 files

Si no la tienes ya instalada es tan fácil como hacer:

sudo apt-get install tree

Bonus: reverse-i-search

Y para acabar, ya que hemos hablado de history y de locate no podíamos dejar de lado reverse-i-search, por si lo que queremos es buscar comandos que previamente hemos usado. Es un poco especial porque no se ejecuta de forma común al resto, sino pulsando Crtl + R en nuestra terminal, ya que en realidad es un comando para la manipulación del historial que consultamos con history.

Un ejemplo, con solo poner pyth nos sale una de las órdenes con python que hemos ejecutado.

(reverse-i-search)`pyth': apropos python | less

Para ver más puedes pulsar Crtl+Shift+R cuando el buscador está abierto y Crtl+C para salir.

Estas son solo algunas de las herramientas que he considerado más útiles para el día a día de cualquier usuario, pero quizás nos hemos dejado en el tintero alguna.

¿Añadirías alguna a la lista? ¡Cuéntanos!

El programador pragmático – Consejos para ser mejor desarrollador WordPress

28/03/2017
Artículo original

Si quieres mejorar tus habilidades como desarrollador WordPress, te recomendamos que leas el libro "El programador pragmático: de aficionado a maestro". En él encontrarás consejos y trucos que podrás aplicar fácilmente en tu día a día.

The post El programador pragmático – Consejos para ser mejor desarrollador WordPress appeared first on Nelio Software.

Cadenas mutables e inmutables en Java. Cuándo usar String, StringBuilder y StringBuffer

28/03/2017
Artículo original

Java cuenta con múltiples tipos de datos para trabajar con cadenas de caracteres. El más conocido de ellos es String, pero también tenemos a nuestra disposición otros como StringBuilder y StringBuffer. Para elegir el más adecuado en cada caso hemos de conocer las diferencias entre ellos. Es un conocimiento que nos será útil para mejorar el rendimiento de nuestras aplicaciones y que, además, podría ayudarnos a responder cuestiones en una entrevista de trabajo en la que se soliciten conocimientos sobre Java.

¿Por qué existen varios tipos de datos para la misma categoría de información?

Lo primero que habríamos de preguntarnos es la razón por la que existen múltiples tipos de datos en Java para operar sobre una misma categoría de información: las cadenas de caracteres.

Como se apuntaba en el artículo Cadenas compactas en Java 9 que publicábamos hace unas semanas, una fracción importante de toda la información con la que trabajan las aplicaciones son cadenas de caracteres. Por ello es importante que el trabajo con las mismas sea lo más eficiente posible. Es la razón por la que en la clase String el atributo encargado de almacenar los caracteres, tal y como se aprecia en la siguiente imagen correspondiente a la cabecera del módulo String.java, se declare como final. Esto implica que su contenido, una vez asignado, ya no podrá modificarse. Por esto se dice que el tipo String de Java es inmutable.

Definición de la clase String

No hemos de olvidar que Java es un lenguaje muy usado para el desarrollo de aplicaciones de servidor, en las que es habitual la creación de múltiples hilos (threads) de ejecución a fin de paralelizar el trabajo y aprovechar las actuales configuraciones multi-procesador y multi-núcleo. En este contexto, un tipo inmutable aporta indudables ventajas. Las operaciones sobre String no precisan de mecanismos de sincronización para el acceso simultáneo desde múltiples hilos, lo cual permite trabajar con ellas con un buen rendimiento. La sincronización implica, en general, la serialización de las operaciones, afectando de manera importante al rendimiento con que es posible llevarlas a cabo.

Todas las ventajas suelen tener asociada una contrapartida y, en este caso concreto, la desventaja surge al manipular el contenido de una cadena. Dado que el tipo String es inmutable (no podemos modificar su contenido), cualquier operación de modificación sobre una variable de este tipo, como puede ser concatenar una cadena a otra o usar métodos como toUpperCase(), replace() o similares, implica la creación de un nuevo objeto String como resultado. Por ejemplo:

String saludo = "Hola"; // Creamos la cadena con un contenido

saludo = saludo + " mundo"; // y le agregamos después una subcadena

Cuando en la segunda línea extendemos el contenido original de la variable saludo, lo que ocurre es que se libera el objeto String original, el creado en la primera sentencia, y se crea otro nuevo para alojar el resultado de la operación. Por otra parte, las literales de cadena de caracteres, como "Hola" y " mundo" en el anterior ejemplo, se almacenan en un espacio específico conocido como constant string pool. Esto facilita la reutilización de estas literales, reduciendo la cantidad de memoria total en caso de que aparezcan múltiples veces en el código del programa. Además se emplea una estrategia de asignación de memoria estática, en lugar de dinámica, mejorando así la velocidad de ejecución.

Obviamente, el hecho de se liberen y creen nuevos objetos String cada vez que se cambia su contenido influye también en el rendimiento de los programas. El recolector de basura de Java tendrá más trabajo. No obstante, la decisión de hacer inmutable el tipo String parte de análisis realizados sobre aplicaciones en los que se observa que en una gran proporción de los casos su contenido no es modificado, por lo que los beneficios obtenidos son, en general, superiores a los inconvenientes.

Cadenas de caracteres mutables: los tipos StringBuilder y StringBuffer

Dado que en una aplicación puede surgir la necesidad de alterar de manera frecuente el contenido de una cadena de caracteres, Java nos ofrece tipos de datos específicos para operar sobre ellas. Las cadenas de caracteres mutables, representadas por los tipos StringBuilder y StringBuffer, se comportan como cualquier otro tipo de dato por referencia en Java: se asigna memoria dinámicamente según es necesario. No se hace uso del constant string pool y el contenido puede modificarse sin necesidad de liberar y crear nuevos objetos. Por ejemplo:

StringBuilder saludo = new StringBuilder("Hola");

saludo.append(" mundo");

En este caso, al agregar la segunda cadena a la primera, sencillamente se actualiza el contenido inicial de la variable saludo, de tipo StringBuilder, en lugar de liberarse el objeto original y crearse otro nuevo. En general, un programa que vaya a modificar con cierta frecuencia el contenido de una o más cadenas de caracteres obtendrá mejor rendimiento de esta forma que con el tipo String original.

Como apuntaba antes, habitualmente cada ventaja conlleva algún tipo de inconveniente. La flexibilidad de los tipos StringBuilder y StringBuffer también tiene su contrapartida. Al contar con un contenido mutable, StringBuilder no es un tipo de dato seguro para aplicaciones con múltiples hilos de ejecución. Si dos hilos acceden simultáneamente para cambiar algo en la cadena, el resultado puede ser totalmente inesperado.

¿Qué hacer si necesitamos trabajar con cadenas de caracteres mutables en un entorno multi-hilo? Usar el tipo StringBuffer en lugar de StringBuilder. Ambos son prácticamente idénticos en cuanto a funcionalidad se refiere, pero internamente la implementación de todos los métodos que alteran la cadena está sincronizada en el caso de StringBuffer. Es decir, este último tipo es seguro (thread-safe) para múltiples hilos, mientras que StringBuilder no lo es. Esta seguridad se obtiene a costa del rendimiento, ya que la sincronización provoca que las operaciones sobre cadenas con StringBuffer sean más lentas que con StringBuilder o que con String.

Cuando el compilador se ocupa de optimizar por nosotros

A la vista de lo explicado hasta ahora, podríamos pensar en recurrir a los tipos de cadenas mutables exclusivamente en aquellos casos en que vamos a llevar a cabo reiteradas operaciones de modificación, como puede ser la concatenación de un conjunto de resultados generados en un bucle. Por ejemplo:

String resultado = "Cuadrados\n"; 

for(int i = 1; i <= 100; i++)
  resultado = resultado + "El cuadrado de " + i + " es " + i*i + "\n";

En el anterior bucle, dado que está utilizándose una variable de tipo String como destinataria, se liberaría el objeto actual y se crearía otro nuevo en cada ciclo. Esto, con un número de iteraciones grande, conlleva mucho trabajo de asignación y recolección de objetos, por lo que convendría optimizar cambiando String por StringBuilder.

El compilador de Java es suficientemente inteligente como para identificar estos casos de forma automática, llevando a cabo la sustitución indicada en el bucle y, una vez finalizado este, convirtiendo el resultado a String y guardándolo en la variable original. La conclusión a la que podemos llegar es que, en general, usaremos el tipo String salvo en casos muy concretos, cuando vayan a efectuarse muchos cambios sobre la cadena y estos no puedan ser identificados y optimizados por el compilador de Java.

Entornos informáticos para niños, 30 años después

27/03/2017
Artículo original

En 1986, Cynthia Solomon explicaba en su libro "Entornos informáticos para niños" que construir sistemas, o probar y depurar nuevas teorías para el ámbito educativo son tareas que requieren mucho tiempo e inversión, puesto que, si se hacen correctamente, deben basarse en investigación a largo plazo. Sus palabras, aunque de mediados de los años 80, siguen siendo totalmente aplicables [...]

XHP, el aporte de Facebook a PHP

27/03/2017
Artículo original

Hace unas semanas Facebook sorprendió con el lanzamiento de HipHop, un transformador de código fuente que toma el PHP, lo transforma hacia C++ y lo compila con g++ (compilador de C++). Y el resultado acelera la ejecución del código disminuyendo los recursos del servidor en un 50%. Concepto sencillo no? HipHop está siendo utilizado en Facebook Lite y fué liberado bajo licencia opensource PHP. Para más información podemos visitar la wiki del proyecto o el repositorio git, donde se pueden bajar el código fuente. Además Facebook nos dió a conocer XHP, se trata de una nueva forma de programar con PHP que aumenta la sintaxis del lenguaje para permitir que la escritura del código sea más rápida y fácil de entender […]

Behaviour Driven Development con Cucumber

27/03/2017
Artículo original

Cucumber es una herramienta que permite ejecutar tests a partir de una descripción funcional en texto plano. El poder de Cucumber radica en la facilidad de describir un comportamiento determinado. Esta descripción se realiza en Gherkin, un Business Readable DSL que permite que cualquier persona defina reglas sin necesidad de contar con conocimientos de programación. Existen implementaciones en más de 37 idiomas y además los tests escritos en Gherkin sirven automáticamente como documentación. El siguiente es un ejemplo de la sintaxis de Ghekin: Estos tests brindan la posibilidad de ser verificados por analistas y personas no técnicas que quizás sean expertos en el dominio de la aplicación. Esta herramienta está escrita en Ruby, pero permite testear código escrito en Ruby, […]

Testing de Aplicaciones Web con Selenium

27/03/2017
Artículo original

Selenium es una herramienta de código abierto para realizar test de aplicaciones web. Esta compuesto por 3 aplicaciones: Selenium IDE, Selenium Core y Selenium Remote Control. Selenium IDE Selenium IDE es una extensión de Firefox, que nos permite guardar las acciones realizadas sobre un sitio, para luego replicarlas a modo de testing. El output es un archivo html que luego podemos usar en nuestra aplicación para replicar la secuencia de acciones en un test. También es posible decirle al Selenium IDE que nos muestre el código generado en Java, C #, Perl, Ruby, etc. Para empezar a jugar con Selenium IDE ahora, instalamos la extensión y luego vamos a Tools –> Selenium IDE. Obviamente podemos escribir los test a manos, pero puede […]

Representación numérica en Java, a cuidar los centavitos …

27/03/2017
Artículo original

Este articulo The need for bigdecimal muestra los problemas que se pueden producir por emplear    directamente double al representar números decimales y emplearlos en ciertas operaciones  aritméticas. Un ejemplo, si tenemos esto: double x = 0.035 resulta que 0.035 no es representable como double! este número es representado internamente como 0.0349999999 (9 periódico). Luego, al sumar este número con cualquier otro se comienza a arrastrar una perdida en la precisión. El problema es inherente a que la conversión de decimales del sistema decimal (base 10) a base 2 (binario) no es exacta. Dicha perdida puede volverse significativa si estamos hablando de dinero y ese segundo decimal es un centavo. También es algo a tener en cuenta al momento de […]

Página Siguiente