Translate
lunes, 15 de agosto de 2016
Programando con Smalltalk
Comenzar con Smalltalk no es fácil y menos para personas que venimos de otros entornos. Antes de meternos de lleno con cosas como la sintaxis, estos son algunos consejos y comentarios que pretenden facilitar el acceso a Smalltalk.
La curva de aprendizaje: es alta al comienzo. Smalltalk tiene una visión diferente de como debiera ser la experiencia con los ordenadores, esa diferencia de concepción hace que los inicios con Smalltalk sean un poco desconcertante para personas que ya tengan experiencia en informática.
Shock cultural: La mayoría de los desentendimientos iniciales tienen que ver con una forma diferente de ver y entender la informática. Smalltalk no es difícil, sólo es diferente.
El código: El código escrito es importante, pero mucho más importante es el conocimiento que vamos obteniendo conforme programamos. Si aprendemos día a día, probablemente el código viejo no sea bueno. Tirar código no es malo, lo malo es no aprender a diario.
Trabajo incremental: Un ambiente como Smalltalk es ideal para trabajar de forma incremental. Los vicios que tenemos, producto del ciclo de desarrollo edición/compilación/prueba, no tienen sentido en Smalltalk y, en cierta forma, tenemos que aprender a programar de otra forma.
Por otro lado el costo de los cambios es mucho más bajo en Smalltalk que en otros lenguajes, eso permite relajarse y demorar las decisiones importantes de diseño hasta que sepamos suficiente del dominio. No es de extrañarse que las metodologías ágiles hayan sido desarrolladas en Smalltalk.
No hay archivos fuentes: En Smalltalk no hay un archivo con los fuentes y todo, incluso el código, está dentro del ambiente de objetos. Esto no quiere decir que no se pueda mover código entre imágenes de Smalltalk y existen distintas opciones para mover código de un Smalltalk a otro.
jueves, 11 de agosto de 2016
Object-Oriented vs. Functional Programming
Java code Geek Regala libros y en este caso regala Object-Oriented vs. Functional Programming un libro por demás interesante.
Dejo link: http://javacodegeeks.us4.list-manage1.com/track/click?u=09cef08fc376e6da2dace7d09&id=478a0dc5c5&e=7224f7969b
http://www.oreilly.com/programming/free/object-oriented-vs-functional-programming.csp
domingo, 7 de agosto de 2016
Historia del Smalltalk
Smalltalk (no se escribe SmallTalk, ni Small-talk, ni Small-Talk) es un proyecto que lleva más de 30 años de desarrollo. Fue inventado por un grupo de investigadores liderados por Alan Kay, en Xerox PARC (Palo Alto Research Center), durante los años 70s. El proyecto de investigación produjo varios resultados intermedios que fueron conocidos como Smalltalk/71, Smalltalk/72, Smalltalk/76 y Smalltalk/80.
El Smalltalk usado hoy en día es un descendiente directo del Smalltalk/80 y conserva prácticamente todas sus características.
El proyecto ha generado una cantidad muy grande de invenciones que llegaron a nuestros días.
Por razones que desconozco el proyecto Smalltalk no cuenta con la reputación y la fama que se merece. Es muy frecuente encontrarse con profesionales de la informática que no saben del proyecto ni de sus aportes. Sin embargo utilizamos a diario varias ideas que fueron desarrolladas en el proyecto Smalltalk.
Computadora Personal: La idea de que cada persona pueda disponer de una computadora de uso personal, con una potencia de cálculo suficiente para ser la herramienta de acceso a la información, tiene sus raíces en las ideas de la Dynabook de Alan Kay.
Interfaces gráficas de usuario: Smalltalk, desde sus inicios, contó con una rica interfaz de usuario gráfica manejada por un ratón. Las ventanas superpuestas, las barras de desplazamiento, el copiar y pegar, los menús de contexto, etc son todos desarrollos del proyecto Smalltalk que años más tarde Apple ayudó a masificar.
El Smalltalk usado hoy en día es un descendiente directo del Smalltalk/80 y conserva prácticamente todas sus características.
El proyecto ha generado una cantidad muy grande de invenciones que llegaron a nuestros días.
Por razones que desconozco el proyecto Smalltalk no cuenta con la reputación y la fama que se merece. Es muy frecuente encontrarse con profesionales de la informática que no saben del proyecto ni de sus aportes. Sin embargo utilizamos a diario varias ideas que fueron desarrolladas en el proyecto Smalltalk.
Computadora Personal: La idea de que cada persona pueda disponer de una computadora de uso personal, con una potencia de cálculo suficiente para ser la herramienta de acceso a la información, tiene sus raíces en las ideas de la Dynabook de Alan Kay.
Interfaces gráficas de usuario: Smalltalk, desde sus inicios, contó con una rica interfaz de usuario gráfica manejada por un ratón. Las ventanas superpuestas, las barras de desplazamiento, el copiar y pegar, los menús de contexto, etc son todos desarrollos del proyecto Smalltalk que años más tarde Apple ayudó a masificar.
Informática: Son innumerables la cantidad de aportes que el Smalltalk ha hecho a la informática. Empezando con el paradigma de orientación a objetos y terminando con cosas muy técnicas como la operación BitBlt (http://en.wikipedia.org/wiki/Bit_blit). La lista continua con las metodologías ágiles (http://en.wikipedia.org/wiki/Extreme_Programming), los patrones de diseño (http://en.wikipedia.org/wiki/Design_Patterns), el concepto de entorno de desarrollo, etc.
El proyecto Smalltalk también ayudó a afianzar el uso de los lenguajes dinámicos, los recolectores de basura, el uso de máquinas virtuales, etc.
La lista continua: Unit Testing (http://en.wikipedia.org/wiki/Unit_test), Refactoring y Refactoring Browser (http://en.wikipedia.org/wiki/Refactoring), y un gran etc.
Para entender Smalltalk hay que entender la Programación orientada a Objetos
Smalltalk está definido con un conjunto muy pequeño de conceptos pero son un significado muy específico. Es fácil confundir los conceptos porque estos son usados, en diferentes lenguajes, con definiciones muy diferentes.
Objetos
Todo en Smalltalk es un objeto. Un objeto es una parte indistinguible del resto del ambiente, con características y responsabilidades bien demarcadas.
Mensajes
Un mensaje es un requerimiento, que se hace a un objeto determinado, para que este lleve a cabo algunas de sus responsabilidades.
Un mensaje especifica que es lo que se espera del receptor (el objeto que recibe el mensaje) pero no fuerza una determinada forma de resolverlo. El receptor es el responsable de decidir como se lleva a cabo la operación para responder al mensaje.
Interfaz
El juego de mensajes que un determinado objeto puede entender se denomina su interfaz. La única forma de interactuar con un objeto es a través de su interfaz.
Encapsulación
Se llama encapsulación al hecho que ningún objeto puede acceder a la estructura interna de otro objeto. Sólo el objeto conoce, y puede manipular, su propia estructura interna.
Ese hecho, sumado a que los mensajes sólo especifican que se espera del receptor pero no especifica como se debe realizar la tarea, aseguran que ningún objeto dependa de la estructura interna de otro.
El envío de mensajes sumado a la encapsulación permiten el desarrollo de sistemas muy modulares ya que cualquier parte puede ser reemplazada por otra mientras la nueva parte respete la interfaz de la parte reemplazada.
Polimorfismo
Dos objetos son polimórficos entre sí cuando un determinado emisor no puede distinguir a uno del otro. Dicho de otra forma: si podemos intercambiar un objeto por otro, en un determinado contexto, es porque son polimórficos.
Clases
Una clase describe la implementación de un conjunto de objetos. Los objetos individuales, descritos por las clases, se llaman instancias. La clase describe la estructura interna de los objetos y describe, también, como se responde a los mensajes.
Variables de Instancia
La estructura interna de los objetos está compuesta por variables de instancia. La variables de instancia son nombres que el objeto puede usar para hacer referencia a otros objetos.
Métodos
Los métodos son la forma de especificar como los objetos de una determinada clase responden a los mensajes. Cada método especifica como se lleva a cabo la operación para responder a un determinado mensaje. Un método puede acceder a la estructura interna del objeto como así también enviar mensajes a si mismo o a otros objetos. Los métodos especifican, también, cual es la respuesta que el emisor (el objeto que envía el mensaje) recibe.
Todos los objetos de Smalltalk son instancia de alguna clase. La programación en Smalltalk consiste en crear clases, crear instancias de esas clases y especificar la secuencia de envío de mensajes entre esos objetos.
Herencia
Las clases, en Smalltalk, están organizadas jerárquicamente. Una clase refina el concepto de otra clase más abstracta. La clase más abstracta es Object. Todas las clases son herencias de Object (porque todo es un objeto) o herencia de alguna clase que hereda de Object.
La relación que existe entre la clase más abstracta (la superclase) y la clase más concreta (la subclase) permite clasificar el conocimiento que tengamos del dominio modelado.
Programar es simular
Programar con objetos es programar una simulación.
La metáfora en la programación con objetos está basada en personificar a un objeto físico o conceptual del dominio real en objetos simulados del ambiente. Tratamos de reencarnar los objetos reales en el ambiente dotándolos de las mismas características y funcionalidades que los objetos reales a los que representan.
Objetos
Todo en Smalltalk es un objeto. Un objeto es una parte indistinguible del resto del ambiente, con características y responsabilidades bien demarcadas.
Mensajes
Un mensaje es un requerimiento, que se hace a un objeto determinado, para que este lleve a cabo algunas de sus responsabilidades.
Un mensaje especifica que es lo que se espera del receptor (el objeto que recibe el mensaje) pero no fuerza una determinada forma de resolverlo. El receptor es el responsable de decidir como se lleva a cabo la operación para responder al mensaje.
Interfaz
El juego de mensajes que un determinado objeto puede entender se denomina su interfaz. La única forma de interactuar con un objeto es a través de su interfaz.
Encapsulación
Se llama encapsulación al hecho que ningún objeto puede acceder a la estructura interna de otro objeto. Sólo el objeto conoce, y puede manipular, su propia estructura interna.
Ese hecho, sumado a que los mensajes sólo especifican que se espera del receptor pero no especifica como se debe realizar la tarea, aseguran que ningún objeto dependa de la estructura interna de otro.
El envío de mensajes sumado a la encapsulación permiten el desarrollo de sistemas muy modulares ya que cualquier parte puede ser reemplazada por otra mientras la nueva parte respete la interfaz de la parte reemplazada.
Polimorfismo
Dos objetos son polimórficos entre sí cuando un determinado emisor no puede distinguir a uno del otro. Dicho de otra forma: si podemos intercambiar un objeto por otro, en un determinado contexto, es porque son polimórficos.
Clases
Una clase describe la implementación de un conjunto de objetos. Los objetos individuales, descritos por las clases, se llaman instancias. La clase describe la estructura interna de los objetos y describe, también, como se responde a los mensajes.
Variables de Instancia
La estructura interna de los objetos está compuesta por variables de instancia. La variables de instancia son nombres que el objeto puede usar para hacer referencia a otros objetos.
Métodos
Los métodos son la forma de especificar como los objetos de una determinada clase responden a los mensajes. Cada método especifica como se lleva a cabo la operación para responder a un determinado mensaje. Un método puede acceder a la estructura interna del objeto como así también enviar mensajes a si mismo o a otros objetos. Los métodos especifican, también, cual es la respuesta que el emisor (el objeto que envía el mensaje) recibe.
Todos los objetos de Smalltalk son instancia de alguna clase. La programación en Smalltalk consiste en crear clases, crear instancias de esas clases y especificar la secuencia de envío de mensajes entre esos objetos.
Herencia
Las clases, en Smalltalk, están organizadas jerárquicamente. Una clase refina el concepto de otra clase más abstracta. La clase más abstracta es Object. Todas las clases son herencias de Object (porque todo es un objeto) o herencia de alguna clase que hereda de Object.
La relación que existe entre la clase más abstracta (la superclase) y la clase más concreta (la subclase) permite clasificar el conocimiento que tengamos del dominio modelado.
Programar es simular
Programar con objetos es programar una simulación.
La metáfora en la programación con objetos está basada en personificar a un objeto físico o conceptual del dominio real en objetos simulados del ambiente. Tratamos de reencarnar los objetos reales en el ambiente dotándolos de las mismas características y funcionalidades que los objetos reales a los que representan.
Recursos sobre Pharo, un IDE para programar en Smalltalk
Pharo es una Ide para programar en smalltalk, es muy usada y se puede instalar en linux muy fácilmente.
Para instalarla en linux debes bajarla e instalar unas librerìas 32 bit, si lo se es feo, pero bue. Les dejo el link: http://pharo.org/gnu-linux-installation
Bueno, tambien se puede ejecutar en window o Mac (que nadie es perfecto) http://pharo.org/download
Además pueden obtener muchos recursos de la pagina de Pharo: http://pharo.org/documentation
Y Aprovecho para dejarles un video de una persona programando en pharo con metodología TDD :
Que es smalltalk? Parte 2
Viene por parte la cosa... Si no leiste la parte 1...
Es muy difícil explicar, a personas que no lo conozcan, que es Smalltalk y porque es tan diferente a otras herramientas más populares.
El origen de ese des-entendimiento viene a razón de que el proyecto Smalltalk estuvo - y sigue estando - regido por una concepción diferente de como debieran usarse las computadoras:
Las computadoras deben ser herramientas que sirvan como amplificadores del espíritu creativo de las personas.
Eso implica, entre otras cosas, que:
- Todo el sistema tiene que ser entendible, y por ende modificable, por una sola persona.
- El sistema tiene que estar construido con un mínimo juego de partes intercambiables. Cada parte puede ser cambiada sin que el resto del sistema se modifique.
- Todo el sistema tiene que estar construido basado en una metáfora que pueda ser aplicada en todas las partes.
- Cada componente del sistema tiene que poder ser inspeccionado y cambiado.
Smalltalk es un ambiente de objetos. Los objetos interactúan enviándose mensajes entre si.
Smalltalk incluye un lenguaje de programación y este fue desarrollado usando los principios que ya se enumeraron. Esto quiere decir, por ejemplo, que el lenguaje Smalltalk puede ser cambiado - como cualquier otra parte - y reemplazado por otro; o que pueden convivir diferentes lenguajes de programación en el mismo ambientes, etc.
Un ambiente de Smalltalk típico también incluye muchas herramientas que asisten en la tarea de programación. Pero estas, como todo, también pueden ser modificadas o reemplazadas por otras.
A su vez, un ambiente de Smalltalk, incluye objetos para crear interfaces de usuarios gráficas. Todo escrito en Smalltalk, todo a la vista y todo modificable.
Centrándonos en el punto de vista de meros programadores mortales, podemos decir que Smalltalk:
- Incluye un lenguaje de programación.
- Incluye una librería de clases
- Incluye un entorno de desarrollo
Tanto el lenguaje, como la librería de clases y el entorno de desarrollo llevan más de 30 años de uso y depuración. No en vano Smalltalk ha sido la referencia para el desarrollo de lenguajes y entornos de desarrollo.
Que es smalltalk?
Smalltalk es mucho más que un lenguaje de computación.
Smalltalk es uno de los productos de un proceso de investigación y desarrollo, liderado por Alan Kay, que ya lleva más de 30 años tratando de inventar la computadora personal. Smalltalk, además de ser un lenguaje de computación muy poderoso y versátil, es una interpretación de como debieran utilizarse las computadoras: Las computadoras deberían ser herramientas que sirvan para amplificar el espíritu creativo de las personas.
Smalltalk no es la culminación de esa visión, es sólo un paso. Si Smalltalk tiene un objetivo en si mismo, ese es el de servir de herramienta para crear el producto que vuelva obsoleto al mismo Smalltalk.
Lamentablemente las ideas detrás de Smalltalk no son las más extendidas en el mundo de la informática, y aunque muchas innovaciones del proyecto llegaron a nuestros días, estas llegaron despojadas de lo fundamental y sólo se copió la cascara de las ideas.
Eso hace que la primera experiencia con Smalltalk, para una persona acostumbrada a usar computadoras o incluso a programarlas, sea desconcertante por lo distinto que resulta.
De todas formas, el esfuerzo de entrar en un área desconocido tiene sus recompensas. Muchos somos los que sentimos que Smalltalk nos devolvió la fascinación que nos produjo usar una computadora por primera vez. No es raro ver como gente que comienza a programar, con Smalltalk, cambia su concepción de los porqués de las computadoras. Prácticamente todos los programadores de Smalltalk que yo conozco utilizan el ambiente, no sólo para trabajar y producir software, sino que también lo utilizan como una herramienta de investigación. Es muy común encontrarse con proyectos muy “raros” e innovadores desarrollados con Smalltalk, porque justamente, Smalltalk sirve como amplificador del espíritu creativo que todos llevamos dentro.
jueves, 4 de agosto de 2016
Modern Java EE Design Patterns By O'Reilly, Gratis !!!
Me llego un super mail de infoQ, al parecer esta gente junto con los amigos de red hat regalan un libro y yo lo tengo que compartir con ustedes.
| ||||
| ||||
|
Try Django
Code scholl se viene con todo, ahora nos presenta un curso de django.
Bueno, les dejo un poco de publicidad:
Bueno, les dejo un poco de publicidad:
|
|
lunes, 1 de agosto de 2016
Cuanta gente usa Ubuntu?
Quiero compartir una infografìa del blog de Ubuntu. Es muy interesante porque nos muestra quienes están usando este sistema operativo.
Dejo el link: https://insights.ubuntu.com/2016/04/07/ubuntu-is-everywhere/?utm_source=ubunteu&utm_medium=url_shortner&utm_term=b6u3Ek&utm_campaign=shortner
Dejo el link: https://insights.ubuntu.com/2016/04/07/ubuntu-is-everywhere/?utm_source=ubunteu&utm_medium=url_shortner&utm_term=b6u3Ek&utm_campaign=shortner
domingo, 31 de julio de 2016
ChakraCore funciona en Linux y Mac OS
ChakraCore funciona en Linux y Mac OS!!!
Microsoft ha demostrado ChakraCore que se ejecuta en Linux y Mac OS X, y Node.js / ChakraCore en Linux.
ChakraCore es el motor de javascript de Edge que desde hace tiempo es open source dado que Microsoft tiene la intención de portarlo a otras plataformas y ejecutar Node.js en él.
Microsoft demostró ChakraCore correr tanto en x64 Linux y Mac OS X 10.9+ y que todavía experimentales que se ejecuta en ChakraCore en x64 Linux junto con Node.js.
Dejo link: https://www.infoq.com/news/2016/07/chakracore-linux-mac
https://github.com/Microsoft/ChakraCore
miércoles, 27 de julio de 2016
Apache Spark 2.0.0 esta con nosotros!!
Se ha lanzado la versión 2.0.0 de Apache Spark con muchas mejoras, entre las que podemos nombrar:
- Soporte a SQL 2003
- Mejora de performance
- Soporte para uso de R
- Streaming
- Y más!!
Dejo link: http://spark.apache.org/releases/spark-release-2-0-0.html
lunes, 25 de julio de 2016
Elixir 1.3
Que tarde, que tarde!! Se me repaso, la nueva versión de Elixir, que trae cosas interesantes.
Como los seguidores más atentos del blog recordaran Elixir es un lenguaje funcional que corre sobre la maquina virtual de Erlang, y tiene como objetivo hacer más fácil el desarrollo en la tecnología de Erlang.
Elixir 1.3, fue anunciado por José Valim. La nueva versión depreca (se dice así?) tareas imperativas y añade nuevos tipos y métodos de acceso, mejora su herramienta de Mixing y mejora el framework de pruebas unitarias ExUnit.
Para mayor información dejo el release note: https://github.com/elixir-lang/elixir/releases/tag/v1.3.0
domingo, 24 de julio de 2016
Spring Statemachine Framework
Nunca les paso que deben diseñar una maquina de estados, pero utilizar un framework de bpm es muchisimo pero hacerlo a mano es un trabajo muy arduo.
Por eso spring diseño, Spring Statemachine Framework.
La idea es simple, es un framework que permite diseñar maquinas de estados de forma muy fácil. Como cualquier maquina de estados tenemos estados y eventos que permiten cambiar de estado:
static enum States {
STATE1, STATE2
}
static enum Events {
EVENT1, EVENT2
}
Con esto tenemos los estados y los eventos, pero falta algo muy importante, definir los caminos o transiciones para esto utilizamos un objeto de configuración:
@Configuration
@EnableStateMachine
static class Config1 extends EnumStateMachineConfigurerAdapter<States, Events> {
@Override
public void configure(StateMachineStateConfigurer<States, Events> states)
throws Exception {
states
.withStates()
.initial(States.STATE1)
.states(EnumSet.allOf(States.class));
}
@Override
public void configure(StateMachineTransitionConfigurer<States, Events> transitions)
throws Exception {
transitions
.withExternal()
.source(States.STATE1).target(States.STATE2)
.event(Events.EVENT1)
.and()
.withExternal()
.source(States.STATE2).target(States.STATE1)
.event(Events.EVENT2);
}
}
Luego definimos el bean que va ser utilizado en esta maquina de estado:
@WithStateMachine
static class MyBean {
@OnTransition(target = "STATE1")
void toState1() {
}
@OnTransition(target = "STATE2")
void toState2() {
}
}
Finalmente podemos utilizar esta maquina:
static class MyApp {
@Autowired
StateMachine<States, Events> stateMachine;
void doSignals() {
stateMachine.start();
stateMachine.sendEvent(Events.EVENT1);
stateMachine.sendEvent(Events.EVENT2);
}
}
Y listo!
Dejo link: http://projects.spring.io/spring-statemachine/
miércoles, 20 de julio de 2016
Try .net mvc
La gente de codescholl me invito a cursar su nuevo curso gratuito sobre .net mvc. Este curso pertenece a la colección "try" que son muy buenos para tener contacto por primera vez con una tecnología, les dejo el mail que me enviaron:
| ||||||
|
Suscribirse a:
Entradas (Atom)