Proyecto Fotográfico: 60 días, 60 fotos con un lente ojo de pez (8mm).

Este definitivamente ha sido uno de mis proyectos más desafiantes, no sólo por el hecho de que fue la primera vez que usé un lente de enfoque manual, el Rokinon 8mm f/2.8 UMC Fisheye II Lens for Canon EF-M Mount (Black), sino que también fue la primera vez que tenia que componer con un ojo de pez.

Para poder ponerle más esfuerzo, en comparación de mis anteriores proyectos que eran 30 días, decidí duplicar el tiempo, lo que resulto en casi dos meses de usar el lente a diario, para poder lograrlo.

Estas son algunas fotos del proyecto:

Y este es el albúm completo:

Y decidí juntar todas las fotos que voy tomando con el ojo de pez, en un album que ya lleva más de 300 fotos:

IMG_0674.jpg
Anuncios

Proyecto Fotográfico: 30 días, 30 fotos con lentes de kit.

Este es mi tercer proyecto fotográfico concluido, estoy muy agradecido con todos los comentarios que he recibido de los dos anteriores, sobre todo de amigos que son fotografos profesionales y que me permiten seguir mejorando en este fabuloso arte.

En este proyecto decidí usar dos lentes, ambos de kit, (para referencia los lentes de kit son los que vienen por default con las camaras, también son conocidos como lentes estandar, y que muchos menosprecían por ser considerados de gama baja)

Mi opinion de estos lentes es que pueden sacar buenas fotos, y que no deberían ser menospreciadas por mas de que algunos incluso los llaman: pisapeles.

Para este proyecto fotográfico use el Canon EF-S 18-55mm f/3.5-5.6 que vino con la camara de un amigo (la canon SL2) y también use la Canon 15-45mm f/3.5-6.3 IS STM que vino con mi Canon M5.

Estas son algunas fotos del proyecto:

Este es el link al album del proyecto:

IMG_0094.jpg

Proyecto Fotográfico: 30 días, 30 fotos con el 24mm

Sigo aprendiendo cada día mas sobre fotografía, sobre todo composición,  para mi segundo proyecto me animé por hacerlo con un lente conocido como uno de los lentes pancake (el 24mm) de Canon.

Aquí algunas fotos:

Este es el link del albúm del proyecto:

IMG_7278.jpg
Proyecto fotográfico: 30 días con el 24mm

Gracias por sus comentarios sobre el proyecto anterior, siempre aprecio sus opiniones y comentarios.

😉

Proyecto Fotográfico: 30 días, 30 fotos con el 10-18mm

Como fotografo aficionado me animé por hacer mi primer proyecto fotográfico, con el proposito de aprender más sobre composición, y mejorar mi ojo fotográfico, estoy poniendo más esfuerzo, para mejorar día a día en la fotografía, ya me he comprado algunos libros, los cuales ire leyendo y posteando mis opiniones al respecto, es un hobby que me esta cautivando cada vez más, mi camara es una Canon EOS 1200D (a.k.a Rebel T5), una cámara DSLR de gama de entrada para principiantes en fotografía, tiene sensor recortado, y me permite usarla en modo manual.

Para este proyecto decidí usar una sola lente, un 10-18mm para poder aprender mas sobre fotografía con gran angulares, y tomar todos los días, durante 30 días seguidos, al menos una foto, así que aquí les comparto algunas fotos:

Les dejo el enlace al album final del proyecto en Flickr: https://www.flickr.com/gp/neosergio/0p23J0

Estaré encantando de recibir sus comentarios, opiniones y sugerencias.

 

🙂

Fortune + Cowsay en OS X

Cada vez que inicies tu terminal puedes empezar el día con una frase motivadora 😀

Instala primero fortune:

brew install fortune

Luego instala cowsay:

sudo gem install cowsay

Por último agrega a tu .bashrc o .bash_profile:

fortune -s | cowsay

Y listo cada vez que abras tu terminal veras la magia.

v3.2

Quiero escribir este post para agradecer a todas aquellas personas que me hicieron notar su aprecio, estima y cariño hacia mi persona, es complicado encontrar las palabras apropiadas para agradecer tantas muestras de estima y consideración. Muchas gracias a todos.

En especial quiero agradecer a mi familia que siempre está conmigo apoyándome, a mi linda esposa que organizó una bonita cena y se encargó de que el día fuera genial (te amo Auro).

Empiezo el camino hacia la siguiente versión muy animado de algunos cambios que estoy haciendo en el campo personal, sobre todo en mi salud, espero que muy pronto se den cuenta de ello y también en el campo laboral, también ya habran noticias.

Nuevamente muchas gracias a todos 🙂

p.d:

A photo posted by Sergio Infante (@neosergio) on May 4, 2016 at 8:17am PDT

 

 

Lenguaje de programación vs Framework de desarrollo, ¿Cuál se debe aprender primero?

Últimamente hay una moda en crecimiento por el uso de librerías y frameworks que faciliten el desarrollo de software y reduzcan considerablemente el tiempo y esfuerzo empleados, sin embargo a la vez que este crecimiento tiene sus ventajas, también se ve una reducción en la calidad de código. Hace unos meses leí una pregunta en una lista de correos sobre Django, la pregunta era: ¿Se puede hacer operaciones matemáticas en Django?, quedé con un gigantesco WTF en la mente. Al principio pensé que debía ser un error o que quizás se refería a algo más con plantillas o algo así, me quede pensando como carajos no pregunto ¿Cómo se hacen operaciones matemáticas con Python?, puesto que Django sólo es un framework el lenguaje es Python, continué leyendo el hilo y se trataba de un error de novatos, el que escribió la pregunta estaba sumando una variable simple con un diccionario por lo que recuerdo. Pero esta pregunta es solo una de las tantas que se pueden leer en tuits, foros y demás, como consecuencia de no haber aprendido primero el lenguaje de programación y luego el framework. Mi hipótesis es que estos “nuevos programadores” que producen en su gran parte código basura y proyectos insostenibles en el tiempo son el producto de tanto humo generado por cursos online con instructores inexpertos que no tienen proyectos reales en su historial, por tanto mentor y guru que usan hangouts para seguir vendiendo lo que sabe a duras penas. El uso de frameworks sin el conocimiento sólido del lenguaje de programación hace que la experiencia sea mas difícil debido a que se incurren en errores simples, incluso de sintaxis en muchos casos. He compilado de acuerdo a mi experiencia una serie de consejos que pueden ayudarle a cualquier programador a tener mejores resultados con cualquier framework y producir con ellos mejores resultados.

Sugerencias para aprender a usar frameworks y no producir proyectos basura en corto tiempo

  1. Si no sabes ningún lenguaje de programación, empieza a revisar o participar de iniciativas como code.org o program.ar
  2. Antes de aprender un nuevo framework, asegúrate de saber lo mínimo indispensable del lenguaje de programación (variables, condicionales, funciones, clases, repeticiones), y dedícale al menos unas tres horas a la semana a aprender algo nuevo del lenguaje en sí, alguna particularidad, o también a entender alguna característica en particular.
  3. Antes de embarcarte con un proyecto para un cliente real, intenta hacer un proyecto personal que te permita explorar y aprovechar las ventajas del framework, revisa artículos o foros para elegir las ventajas más resaltantes y en base a ella genera un proyecto para que experimentes de primera mano esas ventajas.
  4. Acompaña tu proceso de aprendizaje con buenos libros que incrementarán tu calidad de código como: The Pragmatic Programmer, Clean Code, Code complete, The Passionate Programmer, entre otros.
  5. Adquiere libros que te ayuden a mejorar tu trabajo con el framework en particular, libros que recopilan las buenas prácticas del propio framework.
  6. Participa resolviendo dudas en stackoverflow, eso te dará otro tipo de perspectiva, ayudar a resolver dudas amplia mucho la visión como desarrollador de software.
  7. Cuando sientas te sientas que ya llevas mucho tiempo desarrollando con ese framework y sientes un poco de rutina, es momento de aprender un nuevo framework, siempre sal del entorno de confort.

Si quieres agregar algo a esta lista o tienes una opinión diferente déjala en los comentarios.

Actualización: Cambié la imagen del post, ya que Symfony estaba mal escrito, gracias @mario21ic por notarlo.

Happy coding 🙂

Politeismo técnologico

Hay muchas religiones en la actualidad y a sus fieles se los llaman: Pythoneros, Javeros, PHPeros, Raileros, Javascripteros, PuntoNeteros y cualquier otra forma de llamar a un programador que le gusta y usa el mayor tiempo un lenguaje de programación, cada programador en algún momento se ha visto tentado a defender con todo a su alcance a el lenguaje de programación favorito, y es muy común encontrarse con batallas épicas y discusiones acaloradas en las listas de correo.

Yo hasta hace unos tres años era del tipo: “yo solo uso estos lenguajes nada mas y no me jodan” (PHP, Python, C++ y Javascript) y también del tipo “Yo sólo uso GNU/Linux o cualquier otro tipo UNIX o BSD y el resto de sistemas operativos sólo sirven para jugar”.

Pero hace tres años decidí alternar mi manera de trabajar (freelance) con un trabajo a tiempo completo dedicado a construir software, fue una decisión difícil, involucraba mudarme de ciudad (con lo tedioso que pueden ser las mudanzas), vivir lejos de la familia, tener un horario de oficina (con las reglas de oficina, algo que para un freelancer puede ser bastante incomodo), sin embargo la oportunidad de trabajar con clientes importantes de USA era un gran motivante,  el apoyo de mi esposa fue fundamental en esto y así decidimos dar el paso.

Este cambio hizo ampliar mi visión, me hizo entender finalmente que en la industria del software a gran escala lo que interesa por encima de la forma como se hacen las cosas y las herramientas que se usan, están los resultados, que el software libre y el opensource son buenos pero que son mejores si se integran con el software propietario, es mejor la armonía tecnológica que estar limitando la creatividad porque el software que usas no se adapta a lo que necesitas.

No me arrepiento de mi pasado radical, el de solamente usar cosas abiertas y libres, aprendí de eso, aprendí a defender y sustentar mis opiniones con fundamento técnico, aprendí mucho al enfrentarme a los que defendían el software propietario y que no conocían internamente su funcionamiento, aprendí a buscar siempre el porque de las cosas, la única diferencia es que ahora, si debo usar software privativo o desarrollar software privativo, pues ya no soy radical, le doy una oportunidad, analizo que opción se acomoda a mi forma de trabajar y elijo la que me hace más productivo.

A partir de ahora en este blog no sólo postearé cosas sobre software libre y opensource, también postearé cosas sobre software privativo, no al nivel de volverme fanático de una u otra tecnología, sino tratando de ser lo más objetivo posible, siempre poniendo por delante los resultados y la productividad.

Seguiré contribuyendo al software libre y opensource como lo he venido haciendo hasta ahora, para mi es más efectivo contribuir con código, creando o solucionando bugs, que tener peleas eternas en las listas de correo, o redes sociales, que al final no producen valor, y muchos menos perteneciendo a comunidades o asociaciones que lo único que buscan es vivir de los eventos y actividades para su beneficio personal, pero que no tienen forma de sustentar (cuantitativamente) sus aportes y sólo están a la espera de conseguir un buen “contacto”.

SVN + Git, una manera de combinarlos y ser feliz.

SVN y Git provienen de dos modelos distintos de control de versiones: el centralizado y el distribuido, en la práctica son similares, sin embargo existen marcadas diferencias que hacen que la elección de cuál usar en un proyecto, dependen de varios factores.

Ventajas y desventajas del modelo centralizado

  • Luce mas simple
  • Existen muchas herramientas para trabajar con repositorios centralizados, ya que llevan mas años y fueron muy difundidos
  • Muchas IDEs tienen soporte completo
  • No pueden haber commits offline
  • Dificultades para trabajar con branchs
  • Dificultades para trabajar en equipos grandes.

Ventajas y desventajas del modelo distribuido

  • Modelo simple de colaboración
  • Permite trabajar offline
  • La instalación es sencilla y hay muchos servicios de hosting
  • Copia completa del repositorio en cada clon
  • Todo el trabajo casi es local.
  • Tiene flujo de trabajo mas complejo, sobre todo en equipos grande, y con diferentes permisos por usuario.
  • Una curva de aprendizaje mas grande

Diferencias principales:

El modo de guardar la historia: Para SVN la historia de un proyecto nunca cambia, sin embargo Git permite modificar commits anteriores usando por ejemplo: git rebase. A pesar de que puedan haber maneras de editar el mensaje de un commit en SVN, esto requiere permisos de administrador, algo que no es recomendable si hay que darle permisos de administrador con equipos de trabajo grande.

Estructura del directorio: Para SVN se deben tener carpetas distintas para trunk, branches, y tags, en Git todo esta en una sola carpeta y Git se encarga de ocultar el master, branches y tags.

Subproyectos: Un subproyecto permite compartir código o módulos entre proyectos, para SVN se usa el svn-external y en git existen los Git submodels, comparten el mismo concepto pero el uso y el flujo de trabajo es el mismo.

Este artículo de Github amplia esta breve explicación de las diferencias: https://help.github.com/articles/what-are-the-differences-between-svn-and-git

¿Por qué combinar SVN y Git? Mi caso de éxito

Hay casos específicos en los cuales su combinación de verdad que resuelve muchos problemas, sobre todo aprovechando que el uso de Git para ramas locales es fantástico.

Actualmente trabajo en Belatrix y por motivos de contrato con el cliente (confidencialidad), no puedo mencionar detalles, nombres, mucho menos información privada del proyecto, sin embargo puedo explicar el flujo de trabajo que usamos y que se puede replicar en otros proyectos.

Mi cliente es una compañía multinacional que tiene un producto muy bueno de banca móvil, completamente configurable y adaptable a los sistemas bancarios actuales, lo que hace que tenga a su vez miles de clientes (entidades financieras) que usan su producto y por lo tanto al final el producto que ayudamos a construir es usado por millones de personas alrededor del mundo,  para lograr y mantener ese éxito tan grande que están teniendo ahora, se necesitan muchas personas involucradas en el desarrollo del producto, decenas de desarrolladores usando los mismos repositorios, las mismas ramas, con diferentes permisos de acceso y demás. Mi cliente ha elegido SVN como gestor de sus repositorios, por diversas razones técnicamente justificables.

A pesar de que la tendencia se da hacia modelos distribuidos de control de versiones (Git y Mercurial en su mayoría), el uso de SVN sigue siendo masivo en muchas empresas y proyectos.

En este proyecto Belatrix lleva aproximadamente 4 años y nuestro equipo en particular lleva un año y medio aproximadamente, al principio mi equipo empezó a utilizar git-svn para manejar ramas locales y funcionaba muy bien, el cliente tenia una rama principal, una rama para el proyecto, una rama para el modulo que estábamos desarrollando, y nosotros gracias a git-svn teníamos ramas para lo que queramos: bugs, User Stories, improvements, cleanups y encontramos un flujo de trabajo muy bueno y simple de mantener.

SVN + GitPara lograr esto usábamos git-svn (https://www.kernel.org/pub/software/scm/git/docs/git-svn.html), todo iba bien hasta que en el lado del SVN se empezó a usar svn-externals, a partir de entonces dejo de funcionar git-svn y si hubiéramos querido forzarlo, hubiéramos complicado el flujo de trabajo y probablemente hubiéramos aumentando las probabilidades a cometer errores.

Es aquí donde encontramos una forma simple de continuar con nuestro flujo de trabajo y este fue un par de cambios en el .gitignore, el flujo de trabajo es como el que describo a continuación:

  • svn checkout <ruta_del_servidor_SVN>
  • git init (en la carpeta donde se hizo el checkout)
  • Agregar .svn/ al .gitignore (para que Git ignore a la carpeta principal del SVN, este es un paso muy importante, de no hacerlo correctamente todo el flujo fallará.)
  • Agregar */.svn/ al .gitignore (para que Git ignore a multiples carpetas).
  • Continuar el desarrollo con Git, creando ramas locales y usarlo como se acostumbra.
  • Actualizar y mantener sincronizado el Git master antes de hacer un commit al SVN
  • Los commits siempre van al Git master para evitar errores y desde el Git master se hacen los commits al SVN.
  • Los updates desde el SVN siempre se hacen al Git master, de manera tal que el master siempre tiene una copia actualizada.

Si te sirve sienteté libre de comentar, sugerir una mejora para este flujo y compartirlo  🙂

 

Crea un blog o un sitio web gratuitos con WordPress.com.

Subir ↑

A %d blogueros les gusta esto: