Translate
miércoles, 30 de diciembre de 2015
Las más populares bases NoSQL del 2015
Quiero compartir un link muy interesante, sobre las base de datos más populares de este año. Lo más interesante del articulo no esta expreso en articulo y es que son similares a las base NoSql del año pasado. Es decir que este movimiento no nos a dado mayores novedades, cosa que puede ser vista como algo negativo, pero yo pienso todo lo contrario, habla sobre estabilidad. Ya tuvimos problemas, ya los solucionamos, ya podes usar tranquilo estas soluciones. Que piensan ustedes?
Dejo link:
http://www.improgrammer.net/most-popular-nosql-database/
OpenSUSE Leap
OpenSUSE Leap es el contagio de las distros de Mint. Me explico mejor, OpenSUSE Leap es llevar la simpleza a las distros como Mint llevo simpleza a Ubuntu, OpenSUSE Leap llevo simpleza y elegancia a OpenSUSE.
La contra (en mi opinión) es que se debe bajar los DVDs que no esta tan bueno, prefiero bajar un cd chico y luego ir bajando las dependencias.
Que más decir? Les dejo un vídeo:
Dejo link:
https://en.opensuse.org/Portal:42.1
https://software.opensuse.org/421/es
domingo, 27 de diciembre de 2015
10 Ides para Node.js
El mundo de las IDEs va cambiando con el tiempo y seamos sinceros depende de una moda o gusto del desarrollador. También cambia si es necesario compilar o si es un lenguaje interpretado. Por lo tanto estuve buscando una IDE para estudiar un poco de Node y encontré este genial articulo:
http://www.freewebdesigntutorials.net/10-best-integrated-development-environment-for-node-js/
Si alguien le interesa mi opinión Atom esta muy bueno, me gusto mucho. Y IDEs pesadas como eclipse o intellij las veo muy pesadas y no utilizas todas las funcionalidades que traen.
Que les parece? Cual les gusta más?
martes, 22 de diciembre de 2015
NodeOS, el sistema operativo basado en Node.js
NodeOS es un sistema operativo basado en Node.js, si si lo que escuchaste. NodeOS utiliza un kernel linux y se comunica con el a través de node.js.
Si bien es un proyecto que esta tomando vida y es muy reciente. Este fue impulsado por una sola pregunta: Se puede hacer un sistema operativo con node.js?
Si bien esta hecho con node.js como es de pensar utiliza todas sus herramientas, y se apoya en un kernel linux.
Para más info dejo link: https://node-os.com/
lunes, 21 de diciembre de 2015
Cosas que se pueden hacer en F# y no en C#
Estuve viendo este video y me resulto muy entretenido, como el titulo indica ataca las diferencias entre estos dos lenguajes:
jueves, 17 de diciembre de 2015
Stack Overflow en español
Stack Overflow en español es un sitio de preguntas y respuestas para programadores y profesionales de la informática. Es 100 % gratuito, y no se requiere registro.
Así se anuncia Stack Overflow en español. Ahora podemos hacer consultas en nuestro idioma.
Dejo el link: http://es.stackoverflow.com/
miércoles, 16 de diciembre de 2015
Google lanza 8 diplomados con certificación gratuita
El gigante de Internet Google anunció que, en conjunto con el gobierno español y universidades hispanas de prestigio internacional, ha puesto a disposición de forma gratuita 8 cursos online y 2 presenciales para usuarios de todo el mundo.
Sin más que decir, dejo los cursos:
Dejo link: https://cursos.formacionactivate.es/explorer
Sin más que decir, dejo los cursos:
-
Descubre el mundo del Marketing Digital de la mano de IAB Spain (Interactive Advertising Bureau)
- Curso gratuito impartido por profesionales del sector.
- Adquiere conocimientos generales en todas las áreas del Marketing Digital.
- Acreditado por IAB Spain.
-
Aprende a crear tus propias páginas web profesionales adaptables a distintos dispositivos de la mano de la Universidad de Alicante.
- Curso gratuito impartido por expertos informáticos.
- Aprende HTML5 y CSS3 para crear páginas adaptativas.
- Acreditado por el IEI de la Universidad de Alicante.
-
Descubre el mundo del Emprendimiento de la mano de UNIMOOC
- Curso gratuito impartido por profesionales del sector y casos de éxito en el ámbito del emprendimiento.
- Adquiere los conocimientos necesarios a nivel personal y profesional para emprender tu proyecto.
- Acreditado por IEI, Instituto de Economía Internacional de la Universitat d’Alacant (UA).
-
Descubre el mundo de la Programación de Apps Móviles de la mano de la UCM(Universidad Complutense de Madrid)
- Curso gratuito impartido por profesionales del sector.
- Adquiere conocimientos generales en todas las áreas de la Programación de Apps Móviles.
- Acreditado por la UCM.
-
Descubre el mundo de la Analítica Web de la mano de EOI (Escuela de Organización Industrial)
- Curso gratuito impartido por profesionales del sector.
- Adquiere conocimientos generales en todas las áreas de la Analítica Web.
- Acreditado por EOI.
-
Descubre el mundo del E-Commerce de la mano de EOI (Escuela de Organización Industrial)
- Curso gratuito impartido por profesionales del sector.
- Adquiere conocimientos generales en todas las áreas del E-Commerce.
- Acreditado por EOI.
-
Descubre el mundo del Cloud Computing de la mano de EOI (Escuela de Organización Industrial)
- Curso gratuito impartido por profesionales del sector.
- Adquiere conocimientos generales en todas las áreas del Cloud Computing.
- Acreditado por EOI.
-
Descubre cómo aumentar tu productividad personal de la mano de la Fundación Santa María La Real
- Curso gratuito impartido por profesionales del sector.
- Adquiere conocimientos generales a la hora de aumentar tu productividad personal en el trabajo.
- Certificado por la Fundación Santa María La Real.
Dejo link: https://cursos.formacionactivate.es/explorer
Big data University cambia la cara y te invita a hacer más cursos
Big data University es un sitio dedicado en la enseñanza de técnicas para utilizar Big data en 2015.
Hoy en día todo el mundo habla de big data y mucho no tiene idea. Para esa gente existe existe este sitio.
Big data University tiene una variada cantidad de cursos en varios idiomas. Totalmente gratuitos y abalados por IBM.
Dejo link: http://bigdatauniversity.com/
martes, 15 de diciembre de 2015
Que es Microservices??
Hace ya tiempo que todo el mundo habla de microservices, pero creo que pocos tienen claro, que son los microservices o que es una arquitectura de estilo microservices. Bueno, en tu blog amigo te cantamos la justa.
El termino microservice en arquitectura de software ha surgido en los últimos años para describir una forma particular de diseño de aplicaciones de software como suites de servicios de forma independiente desplegables. Es decir que es un conjunto de servicios independientes.
Si bien no existe una definición precisa de este estilo arquitectónico, hay ciertas características comunes en torno a la organización en torno a la capacidad empresarial, el despliegue automatizado, la inteligencia en los clientes, y el descentralizado control de datos.
Si queda alguna duda, el estilo arquitectónico microservice es un enfoque para el desarrollo de una única aplicación como un conjunto de servicios pequeños, cada uno que se ejecuta en su propio proceso y la comunicación es de forma lijera utilizando una API rest por medio de http. Estos servicios se construyen alrededor de las capacidades empresariales y de forma independiente de despliegue por la maquinaria despliegue totalmente automatizado. No hay un mínimo de gestión centralizada de estos servicios, que pueden estar escritas en diferentes lenguajes de programación y utilizan diferentes tecnologías de almacenamiento de datos.
Dejo link: http://martinfowler.com/microservices/#what
jueves, 10 de diciembre de 2015
Cursos de Videojuegos dictados por la Universidad de los Andes de forma gratuita!
Que largo me quedo el titulo!! Pero es explicativo, quiero compartir una serie de cursos de Videojuegos dictados por la Universidad de los Andes de forma gratuita en Coursera!
Les dejo los links:
Diseño de Videojuegos: Una introducción
Dictado por: Universidad de los Andes
Contenido: otro buen curso de programación y diseño de videojuegos, repasando los aspectos básicos y teóricos.
Enlace: Ir al curso
Desarrollo de Videojuegos en Unity
Dictado por: Universidad de los Andes
Contenido: otro curso introductorio para aprender a desarrollar videojuegos desde un motor universal como Unity.
Enlace: Ir al curso
Desarrollo de Videojuegos 3D en Unity
Dictado por: Universidad de los Andes
Contenido: al concluir este curso serás capaz de crear un prototipo de juego en 3D, haciendo uso de una serie de herramientas esenciales.
Enlace: Ir al curso
Desarrollo y Diseño de Videojuegos
Dictado por: Universidad de los Andes
Contenido: aunque este curso también es gratuito, previamente es necesario aprobar otros cursos sobre desarrollo y diseño de videojuegos. Leer información oficial para despejar cualquier duda.
Enlace: Ir al curso
miércoles, 9 de diciembre de 2015
10 ejemplos de uso de Lambda en Java 8
Estos post son buenos, lo que quiere ver un programador es código y encontré una pagina que da ejemplos de uso de Lambda en Java 8 y quiero transcribirlos:
Ejemplo 1 - Implementar Runnable usando Lambda:
Antes:
new Thread(new Runnable() { @Override public void run() { System.out.println("Before Java8, too much code for too little to do"); } }).start();
Ahora:
new Thread( () -> System.out.println("In Java8, Lambda expression rocks !!") ).start();
Ejemplo 2 - Manejo de eventos:
Antes:
Button show = new JButton("Show"); show.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { System.out.println("Event handling without lambda expression is boring"); } });
Ahora:
show.addActionListener((e) -> { System.out.println("Light, Camera, Action !! Lambda expressions Rocks"); });
Ejemplo 3 - Iterar una lista:
Antes:
List features = Arrays.asList("Lambdas", "Default Method", "Stream API", "Date and Time API"); for (String feature : features) { System.out.println(feature); }
Ahora:
List features = Arrays.asList("Lambdas", "Default Method", "Stream API", "Date and Time API");
features.forEach(n -> System.out.println(n));
Ejemplo 4 - Usar Labda para filtrar (como predicado)
public static void main(args[]){ List languages = Arrays.asList("Java", "Scala", "C++", "Haskell", "Lisp");
System.out.println("Languages which starts with J :");
filter(languages, (str)->str.startsWith("J"));
System.out.println("Languages which ends with a ");
filter(languages, (str)->str.endsWith("a"));
System.out.println("Print all languages :");
filter(languages, (str)->true);
System.out.println("Print no language : ");
filter(languages, (str)->false);
System.out.println("Print language whose length greater than 4:");
filter(languages, (str)->str.length() > 4); }
public static void filter(List names, Predicate condition) {
for(String name: names) { if(condition.test(name)) { System.out.println(name + " "); } } }
}
Ejemplo 5 - Combinando Predicado y Lambda:
Predicate<String> startsWithJ = (n) -> n.startsWith("J");
Predicate<String> fourLetterLong = (n) -> n.length() == 4;
names.stream() .filter(startsWithJ.and(fourLetterLong)) .forEach((n) -> System.out.print("\nName, which starts with 'J' and four letter long is : " + n));
Ejemplo 6 - Map and reduce:
Antes:
List costBeforeTax = Arrays.asList(100, 200, 300, 400, 500);
for (Integer cost : costBeforeTax) {
double price = cost + .12*cost;
System.out.println(price);
}
Ahora:
List costBeforeTax = Arrays.asList(100, 200, 300, 400, 500);
costBeforeTax.stream().map((cost) -> cost + .12*cost).forEach(System.out::println);
Ejemplo 7 - Creando listas y filtrando:
List<String> filtered = strList.stream().filter(x -> x.length()> 2).collect(Collectors.toList()); System.out.printf("Original List : %s, filtered list : %s %n", strList, filtered);
Ejemplo 8 - aplicando una función a cada elemento:
List<String> G7 = Arrays.asList("USA", "Japan", "France", "Germany", "Italy", "U.K.","Canada"); String G7Countries = G7.stream().map(x -> x.toUpperCase()).collect(Collectors.joining(", ")); System.out.println(G7Countries);
Ejemplo 9 - creando sublistas y filtrando:
List<Integer> numbers = Arrays.asList(9, 10, 3, 4, 7, 3, 4);
List<Integer> distinct = numbers.stream().map( i -> i*i).distinct().collect(Collectors.toList());
System.out.printf("Original List : %s, Square Without duplicates : %s %n", numbers, distinct);
Ejemplo 10 - calculando máximo, mínimo, etc:
List<Integer> primes = Arrays.asList(2, 3, 5, 7, 11, 13, 17, 19, 23, 29);
IntSummaryStatistics stats = primes.stream().mapToInt((x) -> x).summaryStatistics(); System.out.println("Highest prime number in List : " + stats.getMax()); S
ystem.out.println("Lowest prime number in List : " + stats.getMin());
System.out.println("Sum of all prime numbers : " + stats.getSum());
System.out.println("Average of all prime numbers : " + stats.getAverage());
A simple vista se ve muy bueno!
Dejo link:
http://javarevisited.blogspot.com.ar/2014/02/10-example-of-lambda-expressions-in-java8.html
Ejemplo 1 - Implementar Runnable usando Lambda:
Antes:
new Thread(new Runnable() { @Override public void run() { System.out.println("Before Java8, too much code for too little to do"); } }).start();
Ahora:
new Thread( () -> System.out.println("In Java8, Lambda expression rocks !!") ).start();
Ejemplo 2 - Manejo de eventos:
Antes:
Button show = new JButton("Show"); show.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { System.out.println("Event handling without lambda expression is boring"); } });
Ahora:
show.addActionListener((e) -> { System.out.println("Light, Camera, Action !! Lambda expressions Rocks"); });
Ejemplo 3 - Iterar una lista:
Antes:
List features = Arrays.asList("Lambdas", "Default Method", "Stream API", "Date and Time API"); for (String feature : features) { System.out.println(feature); }
Ahora:
List features = Arrays.asList("Lambdas", "Default Method", "Stream API", "Date and Time API");
features.forEach(n -> System.out.println(n));
Ejemplo 4 - Usar Labda para filtrar (como predicado)
public static void main(args[]){ List languages = Arrays.asList("Java", "Scala", "C++", "Haskell", "Lisp");
System.out.println("Languages which starts with J :");
filter(languages, (str)->str.startsWith("J"));
System.out.println("Languages which ends with a ");
filter(languages, (str)->str.endsWith("a"));
System.out.println("Print all languages :");
filter(languages, (str)->true);
System.out.println("Print no language : ");
filter(languages, (str)->false);
System.out.println("Print language whose length greater than 4:");
filter(languages, (str)->str.length() > 4); }
public static void filter(List names, Predicate condition) {
for(String name: names) { if(condition.test(name)) { System.out.println(name + " "); } } }
}
Ejemplo 5 - Combinando Predicado y Lambda:
Predicate<String> startsWithJ = (n) -> n.startsWith("J");
Predicate<String> fourLetterLong = (n) -> n.length() == 4;
names.stream() .filter(startsWithJ.and(fourLetterLong)) .forEach((n) -> System.out.print("\nName, which starts with 'J' and four letter long is : " + n));
Ejemplo 6 - Map and reduce:
Antes:
List costBeforeTax = Arrays.asList(100, 200, 300, 400, 500);
for (Integer cost : costBeforeTax) {
double price = cost + .12*cost;
System.out.println(price);
}
Ahora:
List costBeforeTax = Arrays.asList(100, 200, 300, 400, 500);
costBeforeTax.stream().map((cost) -> cost + .12*cost).forEach(System.out::println);
Ejemplo 7 - Creando listas y filtrando:
List<String> filtered = strList.stream().filter(x -> x.length()> 2).collect(Collectors.toList()); System.out.printf("Original List : %s, filtered list : %s %n", strList, filtered);
Ejemplo 8 - aplicando una función a cada elemento:
List<String> G7 = Arrays.asList("USA", "Japan", "France", "Germany", "Italy", "U.K.","Canada"); String G7Countries = G7.stream().map(x -> x.toUpperCase()).collect(Collectors.joining(", ")); System.out.println(G7Countries);
Ejemplo 9 - creando sublistas y filtrando:
List<Integer> numbers = Arrays.asList(9, 10, 3, 4, 7, 3, 4);
List<Integer> distinct = numbers.stream().map( i -> i*i).distinct().collect(Collectors.toList());
System.out.printf("Original List : %s, Square Without duplicates : %s %n", numbers, distinct);
Ejemplo 10 - calculando máximo, mínimo, etc:
List<Integer> primes = Arrays.asList(2, 3, 5, 7, 11, 13, 17, 19, 23, 29);
IntSummaryStatistics stats = primes.stream().mapToInt((x) -> x).summaryStatistics(); System.out.println("Highest prime number in List : " + stats.getMax()); S
ystem.out.println("Lowest prime number in List : " + stats.getMin());
System.out.println("Sum of all prime numbers : " + stats.getSum());
System.out.println("Average of all prime numbers : " + stats.getAverage());
A simple vista se ve muy bueno!
Dejo link:
http://javarevisited.blogspot.com.ar/2014/02/10-example-of-lambda-expressions-in-java8.html
martes, 8 de diciembre de 2015
Con nosotros, PHP 7!!
Todo el mundo esta hablando de PHP 7 y yo no quiero ser menos. Tranquilamente podría hablar de las nuevas características, pero encontré una infografia que es como un resumen:
Si vieron la infografía esta muy bien contado todo, lo que más me sorprende es que va ser el doble de rápido, en PHP 5 algo andaba mal.
- A la vez algunas cosas que no dice y dice pero yo repito:
- Nueva versión de Zend Engine (de nombre en clave PHP#NG)
- Importante reducción del uso de memoria
- Árbol sintáctico abstracto
- Soporte consistente a los 64-bits
- Un buen número de errores fatales convertidos en excepciones (¡Aleluya!)
- Mejora en la jerarquía de estas excepciones
- Generador de números aleatorio más seguro
- Operador de coalescencia con null (el ansiado ??)
- Clases anónimas
- Compatibilidad con la recién salida última versión de OpenSSL (1.0.2e)
A la vez se elimina todas las funcionalidades viejas!
Dejo link:
lunes, 7 de diciembre de 2015
Racket 6.3 se viene con todo!!
Ya he hablado de racket es como scheme pero libre, es genial. Trae hasta el Dr. scheme, que se llama Dr. racket (como es de esperar)
En su nueva versión hizo unos pasos importantes, para enumerar algunas de las mejoras:
- Introduce un nuevo macro expander, este es un nuevo sistema de macros (que es no del todo compatible con el viejo sistema) el nuevo macro expander es más fácil de usar que el anterior, ofrece un mejor diagnóstico cuando los enlaces fallan, tiene una aplicación más simple, y por lo tanto es menos propenso a errores.
- Mejoras en su Redex DSL, entre las mejoras hace un mejor y m{as simple chequeo de la sintaxis.
- Y soporte para GTK3
Como les conté es software con licencia LGPL y además podemos bajarlo gratuitamente!!
Dejo link:
http://www.infoq.com/news/2015/12/racket-63-released
http://racket-lang.org/
viernes, 4 de diciembre de 2015
Jolt
Jolt es un lenguaje de programación destinado a ser utilizados en cualquier lugar se podría usar C ++. Sin la carga de un legado 30 años, Jolt proporciona las características de C ++. También trata de incluir algunas de las características otros lenguajes scripting y hasta Lisp, pero sólo de una manera que preserve fuerte tipos estáticos. Jolt toma prestado característica de los lenguajes funcionales.
Mucho bla bla, vamos un programa escrito en Jolt:
proc printf_dynamic(^const string fmt, in[] proc(char fmt) functors)
// Prepare to parse the format string. Let's declare some locals...
int arg := 0 // argument index
bool inEscape := false // was previous char a '%'?
string chars // chars since last format specifier
// A helper method for emitting the substrings around the format
// specifiers. If we have accumulated any characters, go and output
// them.
proc emitchars
if chars.length > 0
putstring(chars)
chars := ""
end
end
// Iterate the characters of the format string.
for c in fmt
if inEscape
inEscape := false
case c
when "%" =>
chars += c
when "d", "s" =>
emitchars
functors[arg++](c)
else
raise PrintfBadFormatSpecifier()
end
else
if c = "%"
inEscape := true
else
chars += c
end
end
end
emitchars
end
A simple vista podemos ver que esta bueno, tiene grandes avances como pattern matching o Clausuras. vamos a tener que seguir estudiando!!
Dejo link: http://jolt-lang.org/
Mucho bla bla, vamos un programa escrito en Jolt:
proc printf_dynamic(^const string fmt, in[] proc(char fmt) functors)
// Prepare to parse the format string. Let's declare some locals...
int arg := 0 // argument index
bool inEscape := false // was previous char a '%'?
string chars // chars since last format specifier
// A helper method for emitting the substrings around the format
// specifiers. If we have accumulated any characters, go and output
// them.
proc emitchars
if chars.length > 0
putstring(chars)
chars := ""
end
end
// Iterate the characters of the format string.
for c in fmt
if inEscape
inEscape := false
case c
when "%" =>
chars += c
when "d", "s" =>
emitchars
functors[arg++](c)
else
raise PrintfBadFormatSpecifier()
end
else
if c = "%"
inEscape := true
else
chars += c
end
end
end
emitchars
end
A simple vista podemos ver que esta bueno, tiene grandes avances como pattern matching o Clausuras. vamos a tener que seguir estudiando!!
Dejo link: http://jolt-lang.org/
Apple hace Swift Open Source y así llega a Linux
Swift el cual fue creado para el desarrollo de aplicaciones para iOS y OS X, ya es Open Source. Apple lo ha liberado bajo licencia Apache y lo ha puesto a disposición de la comunidad en un nuevo portal que, tal vez por el interés de la novedad, se va cayendo a ratos toda la tarde.
Desarrollado originalmente por Chris Lattner, director del área de herramientas de desarrollo en Apple, además de autor y coautor de otras importantes piezas de software como LLVM o el compilador Clang, Swift (por supuesto, goza de integración con LLVM/Clang) se dio a conocer en 2010, aunque no fue hasta el año pasado que Apple lo lanzó oficialmente. Ahora, y siguiendo los planes adelantados a principios de junio, Swift renace como un nuevo lenguaje Open Source.
A partir del código fuente de Swift es posible su compilación para cualquier plataforma, aunque el soporte directo le llega en esta primera hornada solo a Linux, para el que se ofrecen instaladores genéricos y para Ubuntu 15.10. Más información sobre Swift en la página oficial de Apple y en el nuevo portal.
domingo, 29 de noviembre de 2015
Ahora en Haskell se puede utilizar eager evaluation por defecto
Bueno como sabrán por defecto Haskell trabaja con lo que se denomina Lazy evaluation, en pocas palabras ejecuta algo solo hasta que lo necesites.
Esta característica como muchas otras lo hicieron un gran lenguaje, pero en algunas ocasiones se necesitaba ejecutar algo de forma estricta o eager por lo que podíamos hacer lo siguiente:
data T = C !a
f !x = ...
let !x
Ahora tambien se puede ejecutar un programa de forma estricta con los parámetros -XStrict y -XStrictData de ghc.
Personalmente no me parece una gran mejora, es como quitarle una propiedad al lenguaje; pero tendrá algún sentido.
Dejo link:
http://www.infoq.com/news/2015/11/haskell-strict-eval-patch
https://ghc.haskell.org/trac/ghc/wiki/Status/Oct15
Esta característica como muchas otras lo hicieron un gran lenguaje, pero en algunas ocasiones se necesitaba ejecutar algo de forma estricta o eager por lo que podíamos hacer lo siguiente:
data T = C !a
f !x = ...
let !x
Ahora tambien se puede ejecutar un programa de forma estricta con los parámetros -XStrict y -XStrictData de ghc.
Personalmente no me parece una gran mejora, es como quitarle una propiedad al lenguaje; pero tendrá algún sentido.
Dejo link:
http://www.infoq.com/news/2015/11/haskell-strict-eval-patch
https://ghc.haskell.org/trac/ghc/wiki/Status/Oct15
sábado, 28 de noviembre de 2015
STL de C++
Si sos programador c++, seguro que no te cuento nada nuevo, pero si empesas tenes que saber que son las STL.
Antes que nada STL utiliza templates, si no sabes que es template de c++, busca un rato y luego volve.
La STL (del inglés Standard Template Library) es una biblioteca de clases y funciones templates creada para estandarizar y optimizar la utilización de algoritmos y estructuras de datos en el desarrollo de software en C++. La adopción de esta biblioteca posee grandes ventajas: al ser estándar está disponible en todos los compiladores y plataformas; está libre de errores, por lo tanto se ahorrará tiempo en depurar el código; proporciona su propia gestión de memoria. En este capítulo se presenta una descripción de los componentes más importantes de la STL junto con una gama de ejemplos que
permitirán visualizar su funcionamiento y la conexión que existe entre ellos.
El diseño de la Standard Template Library es el resultado de varios años de investigación dirigidos por Alexander Stepanov y Meng Lee de HewlettPackard, y David Musser del Rensselaer Polytechnic Institute. Su desarrollo se inspiró en otras librerías orientadas a objetos y en la experiencia de sus
creadores en lenguajes de programación imperativos y funcionales, tales como Ada y Scheme.
La biblioteca presenta tres componentes básicos: contenedores, iteradores y algoritmos. Los contenedores son los objetos capaces de almacenar otros objetos, cada uno de una forma particular. Representan a las estructuras de datos más comúnmente utilizadas, como ser los arreglos lineales o las listas enlazadas. Además éstos presentan otras características adicionales que los hacen más potentes. Por ejemplo: pueden aumentar el número de elementos que almacenan; al ser templates, pueden alojar cualquier tipo de dato o clase; casi todos los contenedores proveen iteradores (herramientas para poder acceder a sus elementos), lo que hace que los algoritmos que se aplican
a ellos sean más eficientes. Los iteradores son objetos a través de los cuales se puede acceder a los elementos del contenedor. El concepto de iterador es similar al de un puntero, sólo que al ser una clase provee mayores utilidades que éste. Pero la gran utilidad de los iteradores ocurre por el uso que de ellos hacen los algoritmos. En la biblioteca existen más de setenta algoritmos para aplicar sobre los contenedores a través de los iteradores. Hay algoritmos de búsqueda, de ordenamiento, de transformación, matemáticos, etc.
Contenedores
Son una colección de las estructuras de datos más populares utilizadas habitualmente. Un contenedor es justamente eso: un lugar en donde contener o agrupar objetos del mismo tipo. La diferencia entre un contenedor y otro está en la forma en que los objetos son alojados, en cómo se crea la
secuencia de elementos y la manera en que los podrá acceder a cada uno de ellos. Éstos pueden estar almacenados en forma contigua en la memoria o enlazados a través de punteros. Esto hace que las estructuras difieran también en la forma en que se accede a los elementos, la velocidad con la
cual se insertan o se eliminan estos y en la eficiencia de los algoritmos que se apliquen a ellas.
Éstos se dividen en contenedores de secuencia o lineales y contenedores asociativos. Los de secuencia son vector, list y deque. Los asociativos son set, multiset, map y multimap. En esta sección se describirán las operaciones comunes de los contenedores y las estructuras de secuencia solamente. Las asociativas se postergarán para luego de haber visto iteradores y algoritmos.
Operaciones comunes
Antes de realizar cualquier operación con un contenedor hay que crearlo. La sintaxis utilizada para ello es la siguiente:
X < T > instancia;
Donde X representa el tipo de contenedor que se quiere utilizar y T el tipo de dato de los elementos que almacenará la estructura. Así, por ejemplo, para crear un vector de enteros llamado “valores” se escribe:
vector <int> valores;
Obsérvese que tanto vector como los demás contenedores son clases template. Por lo tanto, al hablar de clases, hablamos también de constructores. En la notación previa invocamos al constructor “vacío”, es decir, sin parámetros. Esto hace que se cree un contenedor en memoria pero que no contiene aún ningún elemento. Esta es la sintaxis que se utilizará más a menudo, sin embargo, existirán ocasiones en que se necesite crear estructuras auxiliares que sean copias de otras preexistentes.
vector < int > aux (valores);
Aquí, “aux” es un vector de enteros y, además, es una copia exacta de “valores”. En esta ocasión se utiliza el constructor de “copia”. También es posible obtener el mismo resultado empleando el operador de asignación “=”, como se sigue;
vector < int > aux;
aux = valores;
Además de los constructores, los contenedores tienen una serie de operaciones que son comunes a todos ellos. Por otra parte existen funciones que se aplican sólo a contenedores lineales.
Hasta aquí las generalidades de STL, en un próximo post voy a ver las estructuras más usadas.
Dejo link: https://es.wikipedia.org/wiki/Standard_Template_Library
Antes que nada STL utiliza templates, si no sabes que es template de c++, busca un rato y luego volve.
La STL (del inglés Standard Template Library) es una biblioteca de clases y funciones templates creada para estandarizar y optimizar la utilización de algoritmos y estructuras de datos en el desarrollo de software en C++. La adopción de esta biblioteca posee grandes ventajas: al ser estándar está disponible en todos los compiladores y plataformas; está libre de errores, por lo tanto se ahorrará tiempo en depurar el código; proporciona su propia gestión de memoria. En este capítulo se presenta una descripción de los componentes más importantes de la STL junto con una gama de ejemplos que
permitirán visualizar su funcionamiento y la conexión que existe entre ellos.
El diseño de la Standard Template Library es el resultado de varios años de investigación dirigidos por Alexander Stepanov y Meng Lee de HewlettPackard, y David Musser del Rensselaer Polytechnic Institute. Su desarrollo se inspiró en otras librerías orientadas a objetos y en la experiencia de sus
creadores en lenguajes de programación imperativos y funcionales, tales como Ada y Scheme.
La biblioteca presenta tres componentes básicos: contenedores, iteradores y algoritmos. Los contenedores son los objetos capaces de almacenar otros objetos, cada uno de una forma particular. Representan a las estructuras de datos más comúnmente utilizadas, como ser los arreglos lineales o las listas enlazadas. Además éstos presentan otras características adicionales que los hacen más potentes. Por ejemplo: pueden aumentar el número de elementos que almacenan; al ser templates, pueden alojar cualquier tipo de dato o clase; casi todos los contenedores proveen iteradores (herramientas para poder acceder a sus elementos), lo que hace que los algoritmos que se aplican
a ellos sean más eficientes. Los iteradores son objetos a través de los cuales se puede acceder a los elementos del contenedor. El concepto de iterador es similar al de un puntero, sólo que al ser una clase provee mayores utilidades que éste. Pero la gran utilidad de los iteradores ocurre por el uso que de ellos hacen los algoritmos. En la biblioteca existen más de setenta algoritmos para aplicar sobre los contenedores a través de los iteradores. Hay algoritmos de búsqueda, de ordenamiento, de transformación, matemáticos, etc.
Contenedores
Son una colección de las estructuras de datos más populares utilizadas habitualmente. Un contenedor es justamente eso: un lugar en donde contener o agrupar objetos del mismo tipo. La diferencia entre un contenedor y otro está en la forma en que los objetos son alojados, en cómo se crea la
secuencia de elementos y la manera en que los podrá acceder a cada uno de ellos. Éstos pueden estar almacenados en forma contigua en la memoria o enlazados a través de punteros. Esto hace que las estructuras difieran también en la forma en que se accede a los elementos, la velocidad con la
cual se insertan o se eliminan estos y en la eficiencia de los algoritmos que se apliquen a ellas.
Éstos se dividen en contenedores de secuencia o lineales y contenedores asociativos. Los de secuencia son vector, list y deque. Los asociativos son set, multiset, map y multimap. En esta sección se describirán las operaciones comunes de los contenedores y las estructuras de secuencia solamente. Las asociativas se postergarán para luego de haber visto iteradores y algoritmos.
Operaciones comunes
Antes de realizar cualquier operación con un contenedor hay que crearlo. La sintaxis utilizada para ello es la siguiente:
X < T > instancia;
Donde X representa el tipo de contenedor que se quiere utilizar y T el tipo de dato de los elementos que almacenará la estructura. Así, por ejemplo, para crear un vector de enteros llamado “valores” se escribe:
vector <int> valores;
Obsérvese que tanto vector como los demás contenedores son clases template. Por lo tanto, al hablar de clases, hablamos también de constructores. En la notación previa invocamos al constructor “vacío”, es decir, sin parámetros. Esto hace que se cree un contenedor en memoria pero que no contiene aún ningún elemento. Esta es la sintaxis que se utilizará más a menudo, sin embargo, existirán ocasiones en que se necesite crear estructuras auxiliares que sean copias de otras preexistentes.
vector < int > aux (valores);
Aquí, “aux” es un vector de enteros y, además, es una copia exacta de “valores”. En esta ocasión se utiliza el constructor de “copia”. También es posible obtener el mismo resultado empleando el operador de asignación “=”, como se sigue;
vector < int > aux;
aux = valores;
Además de los constructores, los contenedores tienen una serie de operaciones que son comunes a todos ellos. Por otra parte existen funciones que se aplican sólo a contenedores lineales.
Hasta aquí las generalidades de STL, en un próximo post voy a ver las estructuras más usadas.
Dejo link: https://es.wikipedia.org/wiki/Standard_Template_Library
miércoles, 25 de noviembre de 2015
13 lenguajes que más van influir en la programación
Un buen articulo sobre las lenguajes que se vienen. Bastante interesante, me encontré con lenguajes que no conocía como CUDA o Jolt. Y luego los mismos de siempre, en lo personal no creo que java 8 marque algo diferente en la programación, pero bueno, lo agregaron porque no puede faltar.
Dejo link: http://techbeacon.com/13-programming-languages-defining-future-coding
martes, 24 de noviembre de 2015
Arelos, una nueva distro Linux
En google plus me encontré con una pagina de una nueva distro Arelos, todo muy verde aun. Pero lo más importante es que el que comenzó esta idea necesita gente.
Por lo tanto quiero promocionar la ayuda al software libre, y este es un buen paso para comenzar.
Gracias!!
Dejo link: https://github.com/orgs/Arelos/
https://plus.google.com/+SaqeefIqbalChaudhary/posts/9byDLaHfhv8
Por lo tanto quiero promocionar la ayuda al software libre, y este es un buen paso para comenzar.
Gracias!!
Dejo link: https://github.com/orgs/Arelos/
https://plus.google.com/+SaqeefIqbalChaudhary/posts/9byDLaHfhv8
sábado, 21 de noviembre de 2015
Junit 5 se viene con nueva Api
Leyendo Javahispano quede anonadado con la nueva versión de Junit 5 que hace un uso de clausuras de Java 8. Con un muy buen criterio decidieron utilizar clausuras para la nueva versión de Junit.
Con esta nueva Api tenemos pruebas más entendibles, más fáciles de seguir y más cercanas a las user stories.
Veamos un ejemplos:
class MyTest {
@Test
void standardAssertions() {
assertEquals(2, 2);
assertEquals(4, 4, "The optional assertion message is now the last parameter.");
assertTrue(2 == 2, () -> "Assertion messages can be lazily evaluated -- " +
"to avoid constructing complex messages unnecessarily.");
}
@Test
void groupedAssertions() {
// In a grouped assertion all assertions are executed, and any
// failures will be reported together.
assertAll("address",
() -> assertEquals("Johannes", address.getFirstName()),
() -> assertEquals("Link", address.getLastName())
);
}
@Test
void exceptionTesting() {
Throwable exception = expectThrows(IllegalArgumentException.class,
() -> throw new IllegalArgumentException("a message")
);
assertEquals("a message", exception.getMessage());
}
}
Muy buena idea!!
Dejo link:
http://www.javahispano.org/portada/2015/11/18/nueva-api-para-junit-5.html
https://github.com/junit-team/junit-lambda/wiki/Prototype-Writing-Test-Cases
jueves, 19 de noviembre de 2015
The Shape of JavaScript to Come
La gente de codescholl hizo un curso gratuito sobre javascript, les más info:
Dejo link: https://www.codeschool.com/courses/es2015-the-shape-of-javascript-to-come
COURSE OVERVIEW
LEVEL 1 FREE LEVELDeclarations 3 Videos | 10 Challenges
Learn about the new types of variable declarations and how they can help with some well-known JavaScript gotchas.LEVEL 2Functions 2 Videos | 9 Challenges
Explore new features added to functions, like default parameters, rest parameters, spread operators, and arrow functions.LEVEL 3Objects, Strings, and Object.assign 2 Videos | 10 Challenges
Find new ways to work with JavaScript Objects and Strings.LEVEL 4Arrays, Maps, and Sets 3 Videos | 20 Challenges
Learn how to work with Arrays and more efficient alternatives to working with collections, like Maps and Sets.LEVEL 5Classes and Modules 3 Videos | 14 Challenges
Discover how to write object-oriented code using the new class syntax and how to leverage the new module system to keep things clean and organized.LEVEL 6Promises, Iterators, and Generators 3 Videos | 10 Challenges
Learn alternatives to writing async code, iterator objects for navigating sequences more efficiently, and special functions that return those objects.
Dejo link: https://www.codeschool.com/courses/es2015-the-shape-of-javascript-to-come
lunes, 16 de noviembre de 2015
Maven Central + Google Cloud Storage
Maven Central es el repositorio central donde muchas bibliotecas Java de código abierto publican sus artefactos. Muchas aplicaciones utilizan estos artefactos.
A la vez Google Cloud Storage permite a los usuarios almacenar datos ilimitados en la infraestructura de Google en recipientes llamados cubos, reclamando un mayor rendimiento, la fiabilidad y la disponibilidad de los casos de uso como alojamiento web, archivo y recuperación de desastres
Imagínense estos 2 juntos.
Google nos ofrece un mirror con la central de maven agregando el siguiente mirror a ~/.m2/settings.xml.
<settings>
<mirrors>
<mirror>
<id>google-maven-central</id>
<name>Google Maven Central</name>
<url>https://maven-central.storage.googleapis.com</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
</settings>
A disfrutar!!
Se viene C# 7
C# 7 viene con todo. Cada vez se parece más a Scala. Vamos porque:
Pattern Matching: Ahora vamos a poder hacer en C# 7 lo siguiente:
// Moving a shape using pattern matching
void move (Shape s) {
match (s) {
(Rectangle r) => // Move rectangle
(Circle c) => // Move circle
default => // Handle default or throw
}
}
Tuple syntax: Continuando con la mejora con respecto a pattern matching, tambien con las tuplas.
match (state, input) {
(State.Init, Event.Go) => { // Process the input }
(State.Init, Event.Stop) => { // Process the input}
(_, _) => { // handle invalid state }
}
Nullable reference type: C# viene tratando a de tener una opción correcta para estos tipos, por ahora no hay un diseño claro.
Dejo link: https://github.com/dotnet/roslyn/issues/2136
viernes, 13 de noviembre de 2015
TensorFlow, El motor de inteligencia artificial de Google
Leí un poco de TensorFlow, el sistema de aprendizaje automático TensorFlow está especializado para el reconocimiento de voz, reconocimiento de textos y reconocimiento de imágenes, pero su inteligencia artificial todavía está en su infancia.
Google ha visto que TensorFlow tendrá un impacto aún más grande fuera de sus instalaciones y productos. Por ello, para que su sistema de aprendizaje automático evolucione con mayor rapidez y hayan más aplicaciones inteligentes, han liberado el código fuente del proyecto TensorFlow para que investigadores y desarrolladores colaboren junto a Google para mejorar este gran sistema de inteligencia artificial.
Les dejo un video:
Dejo link:
https://github.com/tensorflow/tensorflow
http://www.tensorflow.org/
lunes, 9 de noviembre de 2015
LISP (LISt Processing)
En el post anterior vimos programación funcional, ahora vamos a hacer un repaso de lisp, el lenguaje funcional más famoso.
Es el lenguaje más conocido de Programación Funcional. Aún así, no es un lenguaje funcional puro ya que posee asignación (SETF) e iteración (DO).
Se utiliza la notación prefijo para cualquier función, inclusive para las expresiones aritméticas
Funciones y constantes más importantes:
Es el lenguaje más conocido de Programación Funcional. Aún así, no es un lenguaje funcional puro ya que posee asignación (SETF) e iteración (DO).
Se utiliza la notación prefijo para cualquier función, inclusive para las expresiones aritméticas
Funciones y constantes más importantes:
- (FIRST lista) o (CAR lista) //devuelve el primer elemento de lista
- (REST lista) o (CDR lista) //devuelve la lista resultante de quitar el primer elemento a lista
- (NULL lista) //determina si una lista está vacía
- (CONS elemento lista) //construye una nueva lista con elemento como primero y lista como resto
- (DEFUN nombreFuncion (parámetros) resultado) //define una función
- (COND (condición1 resultado1) (condición2 resultado2) ... )
- //devuelve el i-ésimo resultado si la i-ésima condición es verdadera, partiendo por i=1
- NIL // constante Lista Vacía y constante False
- T // constante True
- ’() // constante Lista Vacía
- (FUNCALL variableFuncion Parámetro1 Parámetro2 ... ParámetroN) //ejecuta la función asociada a la variableFuncion, normalmente pasada como parámetro, con los parámetros indicados
- (LISTP objeto) //verdadero si objeto es una lista
- (NUMBERP objeto) //verdadero si objeto es un número
- (AND condicion1 condicion2 ...) //verdadero si todas las condiciones son verdaderas
- (OR condicion1 condicion2 ...) //verdadero si al menos una condición es verdadera
- (+ num1 num2 … numN) // suma
- (- num1 num2) // resta
- (< expr1 expr2) // verdadero si expr1 es menor que expr2
- (= expr1 expr2) // verdadero si expr1 es igual a expr2
Veamos una función en Lisp:
(defun cuadrado(n) (
(* n n)
)
Dejo link:
Suscribirse a:
Entradas (Atom)