Viernes 24 de abril de 2015

José Oviedo

José Oviedo
oviedo.mx

Codeigniter: Only variable references should be returned by reference

Después de actualizar mi versión de PHP a la 5.6.4 mis paginas en Codeigniter me mostraban este error:

A PHP Error was encountered
Severity: Notice
Message: Only variable references should be returned by reference
Filename: core/Common.php
Line Number: 257

La solución esta en modificar la linea 257 que esta en el archivo system/core/Common.php en donde veremos algo asi:

return $_config[0] =& $config;

Y remplazar por este codigo:

$_config[0] =& $config;
return $_config[0];

Listo!! adiós a la noticia en PHP.

Jueves 23 de abril de 2015

Alcance Libre: La web de ServOS echa el cierre.
José Oviedo

José Oviedo
oviedo.mx

Linux: Reactivar Control+ALT+Retroceso para reiniciar servidor X en Linux

Por si no sabias, puedes reiniciar tu servidor X presionando las teclas “Ctrl+Alt+Retroceso”, de que sirve, pues cuando esta trabado todo todo, al reiniciar el servidor X puedes casi siempre volver a la normalidad y volver a iniciar sesión.

Ahora, si por alguna razón no funciona esta combinación de teclas (en las ultimas versiones de Ubuntu por ejemplo, no sirve), aquí esta la forma de volver a activar esta opción.

En la terminal escribir:

sudo dpkg-reconfigure keyboard-configuration

Te van a aparecer muchas opciones, puedes ignorar todas.., excepto cuando llegue a la parte que te dice:

Por omisión la combinación Control+Alt+Retroceso no hace nada. Si lo desea, puede utilizarse para terminar el servidor X.

¿Desea utilizar Control+Alt+Retroceso para terminar el servidor X?

Despúes, activar la opción de SI, y listo!…, a probar el comando (todo lo que tengas abierto se cerrara en automático)

Luis Armando Medina

Luis Armando Medina
Como Instalar Linux

Ubuntu 15.05 Final disponible para descarga

Canonical ha anunciado la disponibilidad de Ubuntu 15.04 final como se tenía planeado y desde hoy 23 de abril de 2015 se encuentran en los repositorios las imágenes ISO de las diversas ediciones de Ubuntu 15.04. Continue reading
Luis Armando Medina

Luis Armando Medina
Como Instalar Linux

Como actualizar Ubuntu 14.10 a Ubuntu 15.04

Con la llegada de Ubuntu 15.04 es posible actualizar directamente de Ubuntu 14.10 a la nueva versión siguiente unos pasos simples. Como actualizar Ubuntu 14.10 a Ubuntu 15.04 Para realizar la actualización de Ubuntu 14.10 a Ubuntu 15.04 debes: Abrir … Continue reading
Eduardo Ruiz Duarte

Eduardo Ruiz Duarte
beck's site

Teorema de dualidad de Poincaré (2/2)

Ya por fin llegamos a la parte final, después de dos tópicos interesantes que fueron los dos posts anteriores que son la construcción de los grupos de homología y cohomología los cuales son necesarios y recomiendo les eches un ojo antes en ese orden si no lo has hecho antes de comenzar aquí, ahora voy a tratar de hacer ver el teorema de dualidad de Poincaré.

Esto no será una demostración, sólo será una idea intuitiva, pero la demostración la pueden encontrar en cualquier texto de topología algebraica como Hatcher que creo que es el libro te texto por excelencia para topología algebraica.

Formularemos el teorema considerando un cubo y un octaedro metidos uno en el otro



Observaciones:

a) Como pueden ver, en el lado izquierdo, los 6 vértices del octaedro verde tocan todas las 6 caras cuadradas del cubo rojo.

b) Por otro lado, en la figura de enmedio, lo que ven es que los 8 vértices del cubo tocan cada una de las 8 caras del octaedro.

c) En la última figura del lado derecho se pueden ver las dos figuras, y claramente podríamos verlo como una triangulación de las dos figuras en una esfera (complejo simplicial) $latex \mathbb{S}^2$ por lo que la dimensión en la que trabajamos es 2

d) También pueden observar en la última figura que cada una de las aristas del octaedro toca sólo una vez a una cada una de las aristas del cubo, es decir están en correspondencia 1-1

Entonces podemos ver que en $latex \mathbb{S}^2$ tenemos dos estructuras, la del cubo que la llamaremos $latex C$ y la del octaedro que le llamaremos $latex C^{*}$ , que corresponden a complejos de cadenas y podemos comenzar a intuir la dualidad.

Deducciones de complejos de cadenas en cubo y octaedro.

Del punto d) podemos decir que las aristas , es decir , las $latex 1$-cadenas son iguales en $latex C$ y $latex C^{*}$ , por lo que $latex C_{1}=C^{*}_{1}$ , ya que estan en correspondencia 1-1 entre el octaedro y el cubo.

Del punto a) Vemos que las caras del cubo (2-cadenas) están 1-1 con los vértices (0-cadenas) del octaedro, por lo que $latex C_2=C^{*}_0$

De punto b) pueden ver que cada cara (2-cadena) del octaedro toca a cada vértice (0-cadenas) del cubo por lo que $latex C^{*}_2 = C_0$

Calcular homología y cohomología 

Ya estamos listos para calcular cohomología y homología, en la parte 1 calculamos la homología en $latex \mathbb{Z}$ para poder usar signos y preservar orientación, esta vez lo haremos sobre $latex \mathbb{F}_2$ para que sea más sencillo, es decir, nos olvidamos de la orientación de los símplices por un momento.

Entonces tenemos la sucesión con el mapeo frontera $latex \partial$ que manda a las sumas de las fronteras con respecto a caras, aristas, vértices y su respectivo mapeo dual como ya lo definimos en la parte 1.5 (post anterior) de esta serie de post

$latex C_2 \xrightarrow[]{\partial_2} C_1 \xrightarrow[]{\partial_1} C_0$

$latex C^{*}_2 \xleftarrow[]{\delta_2}C^{*}_1\xleftarrow[]{\delta_1}C^{*}_0$

Recomendación para la visualización y motivación siguiente:
Fija una cara en los dibujos del cubo (yo fijaría la de hasta arriba) y observa la descripción siguiente
en términos de sus aristas y vértices, así como el vértice dual de la cara del cubo en el octaedro.

Entonces ahora tenemos que $latex \partial_2$ toma una cara y lo mandará a la suma de sus fronteras que son $latex 1$-cadenas (Aristas), y en cohomología , el mapeo $latex \delta_0$ mandará un vértice  del octaedro hacia las aristas del octaedro que son adyacentes a ese vértice, es decir lo manda a un elemento del grupo libre $latex C^{*}_1$

Entonces tenemos que aplicando el operador frontera a una cara (2-cadena) del $latex C$, fija una cara de $latex C$ que la denotamos como $latex \square$ y sus aristas denotadas como $latex \mid_i$ y a los vértices de $latex C$ correspondientes a la arista $latex \mid_j$ los denotamos como $latex \bullet^{j}_1$ y $latex \bullet^{j}_2$.

$latex \partial_2(\square)=\mid_1+\mid_2+\mid_3+\mid_4$
$latex \partial_1(\mid_1)=\bullet^{1}_1+\bullet^{1}_2$

Tenemos que por las observaciones, a $latex \square$ le corresponde un vértice en $latex C^{*}$
el mapeo $latex \delta$ lo que hará será asignar a una $latex n-1$-cadena, la $latex  n$-cadena que la contiene, es decir por ejemplo, una arista del octaedro la mandaria a las caras de las cuales es frontera esa arista, entonces si denotamos las caras del octaedro como $latex \triangle$ sus aristas como $latex \dagger_i$ y a sus vértices como $latex \star^{i}_1$ y $latex \star^{i}_2$

Tenemos que por la observación a) tenemos que a $latex \square$ en $latex C$ le corresponde $latex \star$ en $latex C^{*}$

por lo que

$latex \delta_1(\star) = \dagger_1 + \dagger_2 + \dagger_3 + \dagger_4$

ya que asigna ese vértice del octaedro a sus aristas que lo contienen.

$latex \delta_2(\dagger_1 + \dagger_2)=\triangle_1 + \triangle_2$

Es decir, de manera analoga, las dos aristas lo mandan a la cara que las contiene.

Entonces tenemos que el mapeo $latex \delta_2$ hace lo mismo que el mapeo $latex \partial 0$ , y el mapeo $latex \delta_1$ lo mismo que $latex \partial_1$


Entonces, tenemos que

$latex C_2 \xrightarrow[]{\partial_2} C_1 \xrightarrow[]{\partial_1} C_0$   (Homología)

$latex C^{*}_2 \xleftarrow[]{\delta_2}C^{*}_1\xleftarrow[]{\delta_1}C^{*}_0$ (Cohomología)

Y si calculamos todos los mapeos como lo hicimos tenemos que los grupos de homología y cohomología se comportan así:


$latex H_0(C)\cong H^{2}(C^{*},\mathbb{F}_2)$
$latex H_1(C)\cong H^{1}(C^{*},\mathbb{F}_2)$
$latex H_2(C)\cong H^{0}(C^{*},\mathbb{F}_2)$
$latex ker\partial_{r}/Im\partial_{r+1}=H_r(C)\cong H^{2-r}(C^{*},\mathbb{F}_2)=ker\delta_{2-r+1}/Im\delta_{2-r}$

Aquí tenemos que todo esto era sobre $latex \mathbb{S}^{2}$ es decir $latex n=2$

Esto NO es casualidad, de hecho huele... no huele, apesta a teorema y es un teoremón.


Teorema de dualidad de Poincaré

Si $latex X$ es una variedad orientable y cerrada de dimensión n (compacta, sin frontera como $latex \mathbb{S}^{2}$ o un n-toro) entonces su cohomología y homología están relacionadas así:

$latex H_k(X)\cong H^{n-k}(X^{*},G)$


Esto lo pueden experimentar ustedes, por ejemplo calculen la dualidad de un icosaedro a través de su cohomología para obtener un dodecaedro, ¿existirá un objeto geométrico que sea su propio dual?  , este debería de existir... ya que todo esto yendo más lejos aún debe tener una "identidad" , y sí, de hecho es el tetraedro.

Este resultado en topología, geometría, como podrán imaginarse los algebristas, es posible que tenga alguna equivalencia en álgebra... el semestre pasado tomé curso de geometría algebraica avanzada en la Universidad de Utrecht en Holanda y demostraron el teorema de dualidad de Serré, el cuál sólo mencionaré pero no desarrollaré ya que para eso necesitaría otros 3 posts más, pero lo que les puedo decir es que existe una relación entre el teorema de dualidad de Poincaré y el teorema de dualidad de Serré usando teoría de Hodge, de hecho aquí lo mencionan y desarrollan de manera muy aceptable.

Teorema de dualidad de Serré
Sea $latex E$ un haz fibrado holomorfo sobre una variedad compleja suave compacta $latex V$ de dimensión $latex n$ (Existen generalizaciones para gavillas coherentes y haces vectoriales) , entonces:

$latex H^{q}(V,E)\cong H^{n-q}(V,\Omega_n\otimes E^{*})^{*}$

Donde $latex \Omega_n$ es el producto cuña n veces del haz cotangente de $latex V$ (en curvas esto es directo de Riemann-Roch que lo pueden consultar aquí en mi blog y formas k formas diferenciales aquí), aquí * indica "dual" , en el mismo sentido que lo vimos aquí en esta serie de posts.

Si les interesa más aquí tengo post de cohomología de De Rham y cohomología de grupos

Espero les haya gustado mucho como a mi me gustó explicarlo, si hay dudas, críticas o recomendaciones favor de usar los comentarios o escribirme un correo o twitt.

Y como fuente de todo esto es el libro de Allen Hatcher de Algebraic Topology, especificamente la parte 3.3

Eduardo Ruíz Duarte (beck)
twitter: @toorandom



Miércoles 22 de abril de 2015

Eduardo Ruiz Duarte

Eduardo Ruiz Duarte
beck's site

Teorema de dualidad de Poincaré (parte 1.5/2 Cohomología)

En el post pasado vimos como construir grupos de homología simplicial, para poder entender la idea del teorema de dualidad de Poincaré necesitamos también entender lo que es cohomología y entender qué es lo que nos está diciendo de información sobre el objeto original, y qué mejor que con símplices, la homología simplicial es la más fácil de entender porque es visual, después de entender esto yo recomiendo irse ya a Cech, Cohomología de Grupos o a Monsky Washnitzer para trabajar con teoría de números.

El próximo post (con suerte mañana) será ya culminación, ahora sólo definiremos rápidamente cohomología con respecto al post pasado.

La cohomología es un invariante algebraico de la homología, y ya habiendo entendido homología es fácil dualizar la definición de grupos de Homología, el dual de la homología como es de esperarse va a cambiar flechas en los complejos de cadena (la cohomología es un functor contravariante y lo veremos a detalle en un momento), pero lo más impresionante en la dualización es que los grupos de Cohomología tienen estructura adicional, que es la de anillo, ya que existe una multiplicación natural llamada producto copa (cup product), pero no mencionaré casi nada sobre ello ya que el Teorema de dualidad expresa un resultado en términos de los grupos de homología y cohomología.

Recuerden que calcular la homología $latex H_n(X)$ era haciendo dos cosas que son , el calcular
Los grupos libres de $latex k-$símplices que son $latex C_k:=\Delta_k(X)$, o de homología singular o celular, pero en nuestro caso hablemos de lo que ya sabemos que es con símplices:

$latex ... \xrightarrow[]{\partial_{n+1}} C_n \xrightarrow[]{\partial_n} C_{n-1} \xrightarrow[]{\partial_{n-1}} ... $

y después el paso 2 es calcular los cocientes de fronteras y ciclos, ya que recuerden que demostramos para toda $latex n$ en el post pasado que $latex Im\partial_{n+1}\subseteq Ker\partial_{n}$ lo cual es lo mismo que $latex \partial_{n-1}\circ \partial_n = 0$, entonces tenemos los grupos de Homología $latex H_n(X)=Ker\partial_n/Im\partial_{n+1}$.

Para obtener los anillos de la cohomología $latex H^{n}(X,G)$ para algún grupo $latex G$ que usualmente será $latex \mathbb{Z}$, necesitamos interpolar el paso 1 que mostrará la contravarianza de la cohomología, en vez de considerar la cadena de los $latex C_n$ vamos a considerar la co-cadena de los $latex C^{*}_n := Hom(C_n,G)$ que son los morfismos de los complejos simpliciales a $latex G$ y el mapeo $latex \partial_n$ lo sustituiremos por el mapeo de cofrontera dual $latex \delta_n$ y formaremos igualmente algo así como los grupos $latex ker \delta/Im\delta$ .

Entonces, construyamos explícitamente todo, vamos a dualizar, considera entonces

$latex ... \xrightarrow[]{\partial_{n+1}} C_n \xrightarrow[]{\partial_n} C_{n-1} \xrightarrow[]{\partial_{n-1}} ... $

Dualizando cada $latex C_n$ tenemos que $latex C^{*}_n := Hom(C_n,G)$  y dualizando $latex \partial$ tenemos que $latex \delta_n := \partial_{n}^{*}:C^{*}_{n-1}\rightarrow C^{*}_{n}$


Nota que $latex \delta_n$ tiene las flechas invertidas (dual de $latex \partial$) , esto es obvio que suceda por propiedades de homomorfismos, y que $latex \partial_n$ es un homomorfismo:

$latex \partial_n:C_n\rightarrow C_{n-1}$

Por lo tanto

$latex \partial_n^{*}:Hom(C_{n-1},G)\rightarrow Hom(C_n,G)$
$latex \phi \mapsto \phi\circ \partial_n$

Por lo tanto tenemos que $latex \partial_n(\phi)=\phi\circ \partial_n$ es decir, lo que está haciendo $latex \partial^{*}$ es mandar el morfismo $latex C_{n-1}\xrightarrow[]{\phi} G$ a la composición $latex C_n \xrightarrow[]{\partial_n} C_{n-1}\xrightarrow[]{\phi} G$ , sabemos que los homomorfismos duales cumplen que $latex (\alpha\circ \beta)^{*}=\beta^{*}\circ \alpha^{*}$ y que $latex Id^{*}=Id$ asi como $latex 0^{*}=0$ por lo que si llamamos $latex \delta_n:=\partial_n^{*}$ tenemos que $latex \delta_n \circ \delta_{n-1}=0$ y ya tenemos de manera muy informal lo que necesitamos y por lo tanto tenemos que:


$latex ... \xleftarrow[]{} C^{*}_{n+1}\xleftarrow[]{\delta_{n+1}}C^{*}_n \xleftarrow[]{\delta_n}C^{*}_{n-1}\xleftarrow[]{\delta_{n-1}}... $ y por lo tanto tenemos que los grupos de Cohomología para $latex X$ son:


$latex H^{n}(X, G) := Ker\delta_{n+1} /Im\delta_n$

El teorema de Dualidad de Poincaré muestra una característica geométrica y topológica "visible e intuitiva" que relaciona los grupos de cohomología de dimensión $latex k$ con los grupos de homología de dimensión $latex n-k$ donde $latex n$ es la dimensión de $latex X$ que es una variedad cerrada, esto lo terminaremos en el próximo post.

Espero les haya servido y gustado

Eduardo Ruíz Duarte (beck)
Twitter: @toorandom


Eduardo Ruiz Duarte

Eduardo Ruiz Duarte
beck's site

Teorema de dualidad de Poincaré (parte 1/2 Homología)

Esta es la primera parte de la motivación del teorema de dualidad de Poincaré que nos muestra una propiedad universal de todos los objetos geométricos fundamentales, empezaremos con un poco de Homología, en este post no llego al teorema de dualidad pero será en el siguiente.

El post siguiente que es la parte 1.5/2 es la construcción de los grupos de cohomología usando los grupos de homología que definiremos enseguida.

Poincaré fue el primero que comenzó con la teoría de homología y cohomología, pero no como lo conocemos ahora, él trabajaba con topología y lo que él quería era contar hoyos , esto podrá sonar muy trivial si se imaginan un toro o una esfera que saben que tiene 1 hoyo y 0 hoyos respectivamente, pero como se imaginarán existen espacios muy complicados, que en la práctica por ejemplo se puede traducir a superficies modeladas con ecuaciones que representan restricciones en un modelo de muchas dimensiones... si quieres imaginarte su geometría, estarás perdido, para eso tienes que fijarte en su topología para poder tener una intuición de cómo se ve, o sea yo te puedo decir que la ecuación $latex y^2 = x^3 - 1$ así de simple como la ves tiene un hoyo en $latex \mathbb{C}^2$ a pesar de que estos hoyos no se puedan visualizar tan intuitivamente.

La técnica de medir estos hoyos, que al final serán invariantes topológicos se basa en muchas cosas, entre ellas la teoría de homología y cohomología las cuáles de manera tonta la puedes ver como cierta álgebra extraída de la topología del objeto.

Ya hemos hablado antes de cohomología de deRham aquí o de cohomología de grupos acá para extender este concepto de hoyos a objetos algebraicos a través de la cohomología de Cech, también tratamos de dar la idea de Cohomología usando cálculo aquí por lo que voy a suponer que algunos conceptos ya son claros aunque tal vez repita algunos aquí.

El concepto de dualidad de Poincaré es un resultado topológico que relaciona los grupos de homología y cohomología de una variedad $latex V$ cerrada orientable de dimensión $latex n$ (sin frontera como una circunferencia, toro o esfera $latex \mathbb{S}^2$ ) , de hecho dice que

$latex H_{n-k}(V) \cong H^{k}(V)$

Es decir que el $latex k-$ésimo grupo de cohomología es isomorfo al $latex n-k$-ésimo grupo de homología de una variedad orientable y cerrada $latex V$.

Poincaré no definió el teorema anterior así, de hecho él lo definió en términos de números de Betti, (Enrico Betti) , estos números los bautizó Poincaré en su honor ya que Betti estudió superficies sin frontera en dimensiones altas lo cual fue el motivante para Poincaré, y los definió así:

Definición
Sea $latex V$ una variedad de dimensión $latex n$ el número de Betti $latex B_r$ para una dimensión $latex r$ es el número máximo de subvariedades de $latex V$ de dimensión $latex r$ contenidas en $latex V$ que son linealmente independientes, +1

Teorema de dualidad de Poincaré: Si $latex V$ es de dimensión $latex n$ orientable y cerrada entonces $latex B_r=B_{n-r}$


Este tipo de resultados tienen aplicaciones en física cuántica y en estudio de la forma del universo, entre otras cosas que no conozco bien pero que bien si les interesa pueden investigarlo ustedes mismos y verán por qué en un momento.


También existe otra relación geométrica que es muy familiar para nosotros, que es la característica de Euler, tal vez algunos han experimentado con la fórmula característica de Euler

$latex \chi=V-E+F$ , es decir vértices-aristas+caras , este número es interesante, ya que es un invariante topológico, si ustedes triangulan, cuadriculan, o dibujan cualquier red de aristas, vértices y caras en una esfera, SIEMPRE obtendrán $latex \chi=2$ , es decir una esfera triangulada y cuadriculada les dará 2, o si aplican la fórmula a un octaedro y a un cubo también... pero si aplican la fórmula a un toro triangulado o a una botella de Klein, verán que las cosas cambian, ya que no son topológicamente equivalentes a una esfera y obtendrán otros valores porque tienen hoyos.

De hecho, esto puede ser generalizado a dimensiones altas, y lo que dice aquí se puede pasar a complejos de cadena, una cara es la frontera de una variedad, la frontera de una cara son las aristas, y la frontera de una arista son sus vértices $latex (V\leftarrow E \leftarrow F)$ y cuál es la frontera de una frontera ?, es decir si $latex X$ es una variedad y $latex \partial$ es el operador que te calcula la frontera qué es $latex \partial\partial X$ ? , si saben un poco de topología puntual, saben que la frontera de un objeto es un conjunto cerrado sin puntos interiores... por lo tanto la frontera de esto al no haber puntos interiores deberá ser vacía (no hay de donde tomar orilla).

La generalización de esto, es decir ya no podemos hablar de aristas, caras ni vértices, sino de símplices, porque en dimensiónes más altas que 3 necesitarías otras palabras como "hipercara".

Teorema: Sea $latex U$ una variedad  de dimensión $latex n$
$latex \chi_U = \sum_{r=0}^n (-1)^{r}\Delta_r = \sum_{r=0}^n (-1)^{r}B_r$

La parte izquierda es la misma formula característica de Euler, $latex V-E+F$ pero en general para una variedad $latex U$ de cualquier dimensión $latex n$, donde $latex \Delta_r$ son los símplices de dimensión $latex r$ tomados en cualquier triangulación definida en $latex U$ (si $latex n=3$ entonces tienes la formula usual de Euler) , en la parte derecha tenemos los números de Betti de $latex X$ para cada una de las dimensiones $latex r$.


De hecho a Platón o algún otro filósofo-matemático griego se les escapó una oportunidad de pasar aún más a la historia al estudiar los sólidos tridimensionales, sería considerado padre de la homología, ya que si hubiera dicho algo así como "La frontera de la frontera es vacía" seguro hubiera pasado a la historia de las matemáticas como lo hizo Euclides y muchos teoremas importantes en topología algebraica llevarían su nombre, de hecho en todas las teorías de Homología y Cohomología se necesita tener un operador frontera $latex \partial$

Este resultado de Poincaré trataré de explicarlo sólo como una motivación que pretenderá dar una intuición geométrica-topológica de esto, pero para esto tendré que explicar un poquito de homología simplicial que es la más básica, pero es la necesaria para poder entender construcciones más ricas como la homología singular.

Definición
Un $latex k-$símplice $latex \Delta_k$ es un triángulo generalizado a dimensión $latex k$, y es la envolvente conexa de $latex k+1$ puntos en $latex \mathbb{R}^{k+1}$ , es decir, es la intersección de todos los conjuntos convexos que contienen a esos puntos.

Más fácil, es un triángulo generalizado, si $latex k=2$ tenemos que en $latex \mathbb{R}^{3}$ necesitamos $latex 2+1$ puntos para definir un $latex 2-$símplice , es decir.. un triángulo, un triángulo es el conjunto $latex \Delta_2=\lbrace (x_0,x_1,x_2)\in \mathbb{R}^3 : x_0+x_1+x_2=1,\space x_0,x_1\geq 0\rbrace$, en general


$latex \Delta_n=\lbrace (x_0,...,x_n)\in \mathbb{R}^{n+1} : \sum_{i=0}^{n}x_i=1, \space x_i\geq 0\rbrace$

Ése señoras y señores es un triángulo de dimensión $latex n$ generalizado, noten que lo expresamos en dimensión $latex \mathbb{R}^{n+1}$, podrían usar otro espacio euclídeo, no sólo $latex \mathbb{R}^k$, para $latex \Delta_0$ tenemos que $latex x_0=1$ es un punto, después $latex \Delta_1$ es una recta, $latex \Delta_2$ es un triángulo,  $latex \Delta_3$ es un tetraedro, $latex \Delta_4$ es un pentatopo, etc... y este objeto es la base de la triangulación de cualquier variedad., noten que los puntos $latex v_0=(1,0,0...0) ,v_1=(0,1,0,0,...0), v_n=(0,0,...,0,1)$  son parte del conjunto y les llamamos coordenadas baricéntricas y son los vértices del $latex n-$símplice y nos permiten de una manera referirnos a los símplices sólo identificados con estos puntos.


Definición (complejo simplicial): Un $latex \Delta-complejo$ simplicial es un conjunto  de símplices de cualquier dimensión, pegados de tal manera que sus intersecciones también son símplices,

Vamos a denotar como $latex \Delta^{\alpha}_k$ como al $latex k-$símplice indexado por $latex \alpha$ , es decir denotar a la arista1, arista2, cara8, etc...

Es decir, un complejo simplicial es un conjunto de simplejos (puntos, aristas, triangulos, tetraedros, et cétera) , que cumplen que si $latex \sigma \in \mathcal{K}$ entonces las caras de $latex \delta$ también están en $latex \mathcal{K}$ y que si $latex \sigma_1,\sigma_2\$ pertenecen al complejo simplicial entonces $latex \sigma_1\cap \sigma_2$ también es una símplice común (cara común, arista común, vértice común, tetraedro común).

Ejemplo complejo simplicial                                         No-Ejemplo complejo simplicial



Ya con esto definimos los objetos en los cuales nos vamos a enfocar, ahora vamos por el álgebra aquí.

Definición (k cadena): Sea $latex X$ un $latex \Delta-$complejo simplicial, una $latex k-$cadena es una combinación lineal de $latex k-$símplices vista desde el grupo abeliano libre $latex \Delta_k(X)$ tomando como base todos los $latex k-$símplices de $latex X$, es decir es una $latex k-$cadena es una expresión de la forma

$latex \sum_{i=0}^{n} n_i\Delta^{i}_k$


Es decir por ejemplo es una expresión como $latex 4\Delta^{1}_3+8\Delta^{2}_3$ sería una $latex 3-$cadena formada por dos tetraedros.


Definición (k frontera débil): La $latex k$-frontera de una $latex k$-cadena es la suma de los $latex k-1$-simplices en la $latex k$-cadena, la cual se obtiene al quitar una coordenada a cada uno de los $latex k-$símplices de la $latex k$-cadena.

Vamos a desarrollar más esto que es importante, es décir como calcular la frontera.

Si tenemos un $latex k$-símplice, sabemos que está dado por sus coordenadas baricéntricas, que son los vértices, entonces

$latex \Delta_k = [v_0,v_1,...,v_k]$

Si queremos calcular su frontera de esta $latex k$-cadena, como dijimos en la definición, es calcular la $latex k-1$-cadena quitando vértices de $latex \Delta_k$ es decir.

$latex Fr(\Delta_k) = \sum_{i} [v_0, ..., \hat{v_i}, .. v_k]$

Donde $latex \hat{v_i}$ significa quitar esa coordenada, y vamos a modificar la función de frontera anterior y substituirla por una $latex \partial$ que nos permitirá conservar orientación de las caras, aristas, etc..

$latex \partial\Delta_k = \sum_{i} (-1)^{i}[v_0, ..., \hat{v_i}, .. v_k]$

Por ejemplo, podemos ver como se calcula la frontera de una arista, cara y tetraedro en la siguiente imagen sacada del libro de topología algebraica de Hatcher






Aquí pueden ver cómo se ve la frontera de una arista $latex [v_0,v_1]$ et cétera

Definición (k-frontera fuerte)

La función de frontera definida entre los $latex k$-simplices  y $latex k-1$-simplices de una complejo simplicial $latex X$, donde definimos $latex \Delta_k(X)$ como el grupo abeliano libre formado por los $latex k-$simplejos está definida como:

$latex \partial_k:\Delta_k(X)\rightarrow \Delta_{k-1}(X)$
$latex \Delta^{\alpha}_k \mapsto \sum_{i}(-1)^{i} \Delta^{\alpha}_k\mid [v_0,...,\hat{v_i},...,v_k]$


Donde es fácil ver que el lado derecho en efecto es una $latex k-1$-cadena porque sólo estamos sumando las mismas coordenadas de $latex \Delta^{\alpha}_k$ pero quitándole una coordenada, convirtiéndola en una $latex k-1$-cadena.

Es un ejercicio usual que prueben el siguiente teorema

Teorema: La composición en:

$latex \Delta_n(X)\xrightarrow{\partial_n}\Delta_{n-1}(X)\xrightarrow{\partial_{n-1}}\Delta_{n-1}(X)$

Es 0, es decir $latex (\partial_{n-1}\circ \partial_{n})(\Delta_{n}^{\alpha})=0$ para cualquier $latex \Delta_{n}$ y $latex \forall n$


De hecho esto es la algebrización de lo que Euclides o Platón pudieron haber hecho para pasar a la historia de La frontera de la frontera es vacía, esto sucede en cualquier dimensión y para cualquier símplice en cualquier complejo simplicial.


Definición (k ciclo): Un $latex k$-ciclo es una $latex k$-cadena cuya $latex k$-frontera es 0, y de hecho los $latex k-$ciclos son un subconjunto de las $latex k$-cadenas.


Tenemos que $latex Im\partial_n \subset Ker \partial_{n-1}$ y de hecho los $latex n-$ciclos coinciden con $latex Im\partial_n$ y las $latex n$-fronteras coinciden con  $latex Ker \partial_{n-1}$
como todo lo estamos trabajando en el grupo abeliano libre $latex \Delta_k{X}$ para cualquier $latex k$ , podemos definir el cociente, y tenemos la siguiente definición.

Definición (n-ésimo grupo de Homología) 

El $latex n$-ésimo grupo de Homología de $latex X$  es:

$latex H_n(X)=ker\partial_{n}/im\partial_{n+1}$


Ejemplo $latex \mathbb{S}^2$
El ejemplo obligado es $latex X=\mathbb{S}^1$ el círculo, donde tomas sólo un vértice $latex v$ y una arista $latex e$ que se cierra a si misma para que sea más simple, entonces puedes ver que de hecho $latex \Delta_0(X)$ el grupo abeliano libre generado por un vértice , y $latex \Delta_1(X)$ el generado por una arista pues es simplemente $latex \mathbb{Z}$ , para dimensiones más altas es 0, porque no hay símplices más grandes que quepan en el círculo.

Ejemplo toro (dona):

Otro ejemplo que pueden desarrollar es el Toro, donde deberían de obtener $latex H_1(T)=\mathbb{Z}\oplus\mathbb{Z}$ , y como hint pueden usar la definición básica del toro con flechas 

Que significa , "doblar y pegar las aristas azules y despues doblar y pegar las aristas rojas", como pueden ver en el siguiente dibujito, eso ya les define una configuración básica de tres aristas (1-símplices) $latex a,b,c$ también dos caras $latex U,L$ (2-símplices) y un solo vértice $latex v$ (0-símplice), lo cual es suficiente para calcular homología, recuerden que todo esto es invariante bajo configuraciones de triangulaciones, y realmente estarían calculando la homología de lo azul con lo rojo con la siguiente configuración donde solo hay un solo vértice.

De hecho $latex \partial_1=0$ como en el ejemplo pasado haciendo que $latex H_0(T)=\mathbb{Z}$ y $latex \partial_2(U)=\partial_2(L)=a+b-c$ y $latex \lbrace a,b,a+b-c\rbrace$ es base $latex \Delta_1(T)$ por lo que $latex H_1(T)=\mathbb{Z}\oplus \mathbb{Z}$, todo esto lo pueden verificar ustedes, pero esto lo debi de haber dejado como ejercicio.


Espero les haya gustado, la siguiente parte veremos ya el teorema de dualidad de Poincaré 

Eduardo Ruíz Duarte (beck)
twitter: @toorandom








Martes 21 de abril de 2015

Alcance Libre: Actualización de procedimientos con OpenSSL en manuales de Alcance Libre.

Forzar https con .htaccess

Tengo algunos dominios que usan https:// y están bajo cloudflare en el cual he tenido algunos problemas, elegí forzar desde el archivo .htaccess de esta manera:

RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} =http
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Recuerda poner el archivo en el directorio principal de tu dominio o subdominio.

Tal vez te pueda interesar este hilo con LastDragon sobre otras alternativas:

Silk Road: El mercado negro en la deepweb

Se trata del mayor mercado de compra/venta de cualquier droga ilegal que te puedas imaginar, el método de pago son los bitcoins, y se encuentra en las entrañas de la Deepweb.

En este sitio web se encuentran numerosos tipos de drogas y obtuvo gran popularidad por la velocidad en la que se entregan. Desde su primera aparición en el 2011 se cree que recaudo 22 millones de dólares al año.

Para acceder se debe adentrar a la deepweb, al que solo tienes acceso a través de Tor (The Onion Router, o el “enrutador cebolla”), este software permite esconder al usuario mediante una serie de routers especiales, por capas cómo la de las cebollas, imposibilitando el rastreo de su IP.

How Tor works

El servicio que levanto el creador de Silk Road, “Dread Pirate Roberts” tenía imposibilitado al FBI para dar con él, antes de entrar tenias que visitar una serie de sitios con nombres cómo silkroadfb5piz3r.onion, hasta llegar a un sistema de ventas común y accesible:
silkroad_web

En Silk Road, se podría comprar cocaína, marihuana, heroína, meta-anfetamina y cientos de sustancias tóxicas e ilegales, pero el fundador Dread Pirate Roberts tenía cómo filosofía y misión “la libertad”:

“Convertirse en una fuerza considerable que pueda desafiar los poderes que existen y por fin darle a las personas la opción de elegir la libertad sobre la tiranía”.

Esto se podía leer en los foros, así mismo los administradores seguían una filosofía anarco-libertaria [ágora], conocida o también llamada contra-económica.

“El Estado es la principal fuente de violencia, represión, y todas las formas de coerción. Deja de financiar al estado con tus impuestos y enfoca tu energía productiva al mercado negro”

Así fue cómo Silk Road se convirtió en un paraíso cyber-underground, en el cual aparte de ser la tienda más grande y accesible de drogas en la red represento una gran revolución en la economía digital, cómo dato después de ser cerrado por el FBI en Octubre pasado el precio del Bitcoin disminuyo.

Método de Pago

No se aceptan tarjetas de crédito, paypal o algún otro pago conocido, la moneda oficial es el ฿ bitcoin es una moneda que no tiene respaldo de ningún banco, se deriva de la pionera tecnología Bittorrent de intercambio de archivos, común mente llamada “cripto-moneda”. El precio del bitcoin esta entre los 800 USD, algo así cómo unos $10,000 Pesos Mexicanos y a pesar de ser considerada también cómo la moneda de los criminales esta tomando auge en el ámbito tecnológico y emprendedor.

En los inicios de Slik Road, el precio del bitcoin era de 100 a 130 dolares y para comprarlo podías pasar por Mt. Gox Bitcoin Exchange por ejemplo obtenerlos, entrar a la deepweb, crear la cuenta y así mismo depositar en tu Silk Road, se podía comprar 10 gramos de marihuana por “1 Bitcoin”, un poco excesivo a comparación de la calle pero los clientes parecían satisfechos.

Ross Ulbricht

ulbrichtlinkedin

Culpado cómo el supuesto fundador de Silk Road, fue detenido en el mes de Octubre del 2013, en una biblioteca pública en San Francisco, intento salir bajo fianza pero fue negada, al principio se le acusaba de negociar 6 asesinatos, pero dichos asesinatos no fueron realizados.

Se encontraron documentos, una especie de bitácora o diario de vida donde describe el desarrollo y la operación del sitio.

En la bitácora del 2010 Ulbricht explica los esfuerzos para poner en marcha Silk Road:

“Empecé a trabajar en un proyecto que estuvo en mi mente por un año. Lo estaba llamando ‘Underground Brokers’, pero finalmente me quedé con Silk Road. La idea era crear un sitio donde las personas pudieran comprar cualquier cosa de forma anónima, sin rastro que pudiera llevar de vuelta hacia ellos”

Esta fue una de las razones por lo que la corte le negó la salida bajo fianza. Por lo que Ulbricht niega ser Dread Pirate Roberts, pero según los fiscales tienen pruebas recaudadas de su laptop y aseguran que al momento que fue arrestado en la biblioteca de San Francisco el estaba accediendo a la administración de Silk Road a través de Tor.

La bitácora de vida de Ross Ulbricht, describe la vida de un joven que había cultivado hongos para después venderlos el sitio, el cual duro un año para ponerlo en marcha, también detallando que poseía unos $104 millones USD, entre bienes y deudas, teniendo en cuenta que quedaba entre el 8% y 15% de cada transacción dependiendo el valor de la compra.

En octubre el FBI decomisaron 28 millones de dólares en bitcoins la cual fue la mayor incautación de la moneda virtual jamás realizada. [info RT]

Captura

Tras él estaba la Administración de Drogas (DEA), el Servicio de Impuestos Internos, Seguridad Nacional y el FBI, cómo el sistema estaba dentro de las tripas de Tor, encontrar a Dread Pirate Roberts les ocasiono un fuerte dolor de cabeza, así que decidieron buscar indicios de “Silk Road” en la web, en la cual encontraron a Altoid, un sujeto que creo un WordPress promocionando e indicando cómo entrar al sitio dentro de tor, con una orden judicial accedieron y observaron que había sido creado cuatro días antes de la publicación de ese post.

La búsqueda seguía hasta llegar a un foro llamado Bitcoin Talk, en el cual aparece un post donde Altoid, buscaba a un experto en bitcoins, dejando un correo electrónico “rossulbricht arroba gmail punto com”, para los interesados.

A partir de ahí los agentes tenían ligadas las cuentas de google+ y youtube del sospechoso, donde los vídeos tienen un gran parecido las visiones de Dread Pirate Roberts.

Dicho esto los agentes tenían la ubicación exacta de donde vivía, hasta que estuvo quedándose en casa de un amigo en la cual se conectaba de vez en cuando al gmail.

También descubrieron que había creado una cuenta con el nick de Ulbricht, la cual cambio después a frosty, en la famosa pagina de StackOverflow. Donde dejo una pregunta “How can I connect to a Tor hidden service using curl in php?”

Dos semanas después los servidores de Ulbricht, fueron descubiertos el FBI no ha informado cómo pudo ser esto posible pero hay teorías de que Tor fue modificado y se inserto un malware.

Ya teniendo el ojo puesto sobre él, el FBI intercepto un paquete que iba rumbo a San Francisco, con 9 identidades falsas todas tenian una foto de Ulbricht:

Credenciales Falsas

Silk Road 2.0

silkroad2_0

Fue lanzada el 20 de Noviembre 2013, con la promesa de ser una versión ligeramente mejorada de la versión clausurada por el FBI hace un mes.

En este nuevo portal el administrador usa el mismo nick “Dread Pirate Robert”, el mismo que Ross Ulbricht de 29 años, a quien arrestaron en una biblioteca de San Francisco el pasado 2 de octubre.

Por el momento existen varías especulaciones de que Ross Ulbricht ha sido inculpado para que la persona detrás de todo esto este libre y siga trabajando.

Alcance Libre: Importante actualización de paquete de RoundCube Webmail en ALDOS y AL-Server.

Lunes 20 de abril de 2015

Julio Mayorga

Julio Mayorga
Blog 123Hosting.com.mx

Diferencias entre FTP y sFTP

En esta nota conoceremos estos protocolos de transferencias de archivos que son muy usuales a la hora de montar nuestro sitio WEB. Para conocer las diferencias, o antes de llegar a una elección, los conoceremos en detalle a cada uno de ellos.

http://admindaily.com/wp-content/uploads/2009/08/wordpress-asking-ftp-details1.jpg

FTP(File Transfer Protocol), es un protocolo basado en TCP/IPC que permite la transferencia de archivos entre un cliente y un servidor, es decir que es usado para subir nuestro sitio web o archivos a nuestro hosting, o también para transferir archivos entre dos equipos.
Comúnmente utiliza los puertos 20 o 21.

Una de las ventajas que posee, es que permite transferir archivos a la máxima velocidad permitida por la red.

Una de sus desventajas es que es poco seguro. Transfiere en texto plano y cualquiera que sniffee la red, podría obtener información de lo que hacemos.

http://www.leo-backup.com/schemes/SFTP.jpg

SFTP(Secure File Transfer Protocol), es el mismo sistema de protocolo (Transferencia de archivos), solo que con mayor seguridad, es decir, los datos viajan cifrados por SSH. Este protocolo es tan seguro, que si sniffearan nuestra red, solo encontrarían datos cifrados.
Comunmente utiliza el puerto 22

Una de las ventajas que posee, es que todo lo que transfiere, lo hace de forma segura.

Una de las desventajas, es que es muy lento y no es recomendable para grandes subidas o bajadas de archivos.

Conclusión:

Como conclusión podemos decir que si subis tu web o la actualizas con poca frecuencia, te recomendamos que utilices sFTP. Pero si usas tu servidor para subir constantemente archivos, peliculas, etc.. Usa FTP.

Viernes 17 de abril de 2015

Julio Mayorga

Julio Mayorga
Blog 123Hosting.com.mx

Lanzamiendo de Ubuntu 15.04!

Ubuntu 15.04 llevará el nombre de VIVID VERVET, por el mono y no Velociraptor como se habia rumorado al principio.

http://img.ubunlog.com/wp-content/uploads/2014/10/vervet.jpg

Para aquellos que no sepan o no conozcan el porque el numero de las versiones de Ubuntu, lo explicaremos rápidamente.

Los últimos dos números corresponden al mes. En este caso 04 (Marzo) y los dos primeros al año 15 (2015). Es por ello que este mes se lanzará la nueva version 15.04. El calendario de lanzamiento de Ubuntu es el siguiente:

18 de diciembre – Alpha 1 (No Pública Release – opt-in)
22 de enero – Alpha 2 (No Pública Release – opt-in)
28 de febrero – Beta 1 (No Pública Release – opt-in)
26 de marzo – Beta final
16 de abril – Release Candidate
23 de abril – Final Release

A solo unos días del lanzamiento, ya se conocen las nuevas características y cambios. Uno de ellos, es que se dejarán los menús fijos en la parte superior

 Ubuntu 15.04 dejará los menús de aplicaciones fijos en la barra superior

Mark Shuttleworth tiene puestas grandes esperanzas en el desarrollo del próximo ciclo de Ubuntu:

Espero que encontraremos nuevas maneras de traer oportunidades seguras, libres y fabulosas tanto para desarrolladores como usuarios. Este es un momento en que todo lo electrónico puede ser una Cosa de Internet, y eso es una oportunidad para nosotros para llevar nuestra plataforma, con su seguridad y su apoyo a largo plazo, a un campo vasto e importante.

En un mundo donde casi cualquier dispositivo puede ser inteligente, y también subvertido, nuestros esfuerzos compartidos para hacer sistemas fiables y de confianza deberían encontrar un terreno fértil. Así que nuestra meta este próximo ciclo es mostrar el camino más allá de una sencilla internet de las cosas, a un mundo de internet cosas-que-tu-puedes-confiar.

Jueves 16 de abril de 2015

José Mendoza Roa

José Mendoza Roa
TuCancUnix

Instalando aws-cli, la nueva herramienta en línea de comandos AWS

Recomiento leer la documentación de aws-cli, como complemento a las instrucciones, ya que nos dará varias opciones de instalación y configuración de la herramienta.

aws-cli

AWS CLI

 

En esta ocasión vamos a instalar la herramienta en Ubuntu:


sudo apt-get install -y python-pip
sudo pip install awscli

Agregar al archivo siguiente, muchos sabrán a que me refiero con este regex $HOME/.(profile|bash_profile|profile)


complete -C aws_completer aws

Esto nos ayudará con el autocomplete de Bash

Agrega tu KeyID y tu SecretKey al archivo $HOME/.aws/config, usando el siguiente formato:


[default]
aws_access_key_id = 
aws_secret_access_key = 
region = us-east-1

No olvides proteger tu documento a solo lectura, escritura para el dueño del archivo:


chmod 600 $HOME/.aws/config

Opcionalmente establecer una variable de ambiente que apunte al archivo modificado previamente, especialmente si ese archivo no está en el directorio estandar.


export AWS_CONFIG_FILE=$HOME/.aws/config

Probando la instalacion de nuestro aws-cli

Una vez que hayamos finalizado nuestra instalación y configuración, procedemos a realizar nuestra primera consulta al API de AWS, usando la herramienta de consola:


aws ec2 describe-regions

La salida predefinida es en formato JSON, pero podemos intentar con diferentes formatos, como son table o text


aws ec2 describe-regions --output text
aws ec2 describe-regions --output table

The post Instalando aws-cli, la nueva herramienta en línea de comandos AWS appeared first on TuCancUnix.

Miércoles 15 de abril de 2015

Luis Armando Medina

Luis Armando Medina
Como Instalar Linux

Como Instalar PHP en Centos 7

Si quieres crear sitios dinámicos con PHP es necesario instalar en tu servidor Centos 7 los paquetes necesarios para procesar scripts PHP. Para instalar PHP en Centos 7 sigue estos pasos. Continue reading
Alex Callejas

Alex Callejas
|rootzilopochtli.com|

FLISoL CDMX 2015

El Festival Latinoamericano de Instalación de Software Libre (FLISoL), es el mayor evento de difusión del Software Libre que se realiza desde el año 2005 en diferentes países de manera simultánea. Es una oportunidad para todas aquellas personas interesadas en conocer más acerca del software libre. Participando es posible entrar en contacto con el mundo del software libre, conocer a otros usuarios, resolver dudas e interrogantes, intercambiar opiniones y experiencias; asistir a charlas y otras actividades programadas. Como es de suponer, la asistencia al evento es totalmente libre y gratuita.

Personalmente, es un evento al que me gusta asistir y ayudar a toda la gente que quiere acercarse al Software Libre.

Para esta edición, estaré apoyando a los buenos amigos de Eva FedoraFree Berries en el evento que se llevará a cabo en el Centro de Cultura Digital, en la famosísima Suavicrema, dando un taller sobre uno de los temas que mas me apasiona: SELinuxEn la chamba pude conseguir un poco de patrocinio, por lo que, los asistentes, podrán llevarse un pequeño souvenir además de la oportunidad de poder tomar un curso.

Les comparto la propaganda del taller:

cartel_taller_selinux

flisol-mini

Espero me puedan acompañar.

Martes 14 de abril de 2015

Antonio de Dios

Antonio de Dios
Webadedios » Linux

Disponible la versión del kernel Linux 4.0

La versión estable del kernel Linux 4.0, apodada como ‘Hurr durr I’m a sheep’ llega a nosotros de la mano de la comunidad a tan solo 2 semanas desde el lanzamiento de la versión 3.19 del kernel de Linux.

La lista de novedades no es demasiado grande. Escribe Linus:

En cuanto a características nuevas, Linux 4.0 no es demasiado especial. La mayoría de cambios están relacionados con la nueva infraestructura para aplicar parches en el kernel; siendo realista hemos hecho muchos más cambios en otras versiones. Esta es una versión para asegurar un buen progreso en el desarrollo de futuras versiones del kernel.

Y es que hay que recordar que tras el lanzamiento de la versión 3.19, Linus Torvalds publicó una encuesta en Google+ donde preguntaba a sus seguidores si querían seguir en la versión 3.x del kernel o dar finalmente el salto como versión 4.0 en la futura compilación y en consecuencia y  con casi 30.000 votos en la encuesta publicada desde el pasado 12 de febrero el 56% de las personas votó por un Linux 4.0 y un 44% para Linux 3.20.

Es decir, la diferencia entre la rama 3.x y la 4.x no es mucha, y el cambio de versión es mas bien implementar un cambio de denominación, de nomenglatura

Entre las mejoras que trae el kernel linx 4.0

  • Mejora el soporte a las nuevas CPU Intel ‘Skylake'(vendrán en la segunda mitad de 2015)
  • Mejora el rendimiento de Linux en PS3
  • Se añade soporte a los System on Chip de Intel Quark
  • Drivers TOpen-source para AMD Radeon con soporte de DisplayPort Audio.
  • Mejoras en drivers HID como los teclados compactos de Lenovo y alguna tableta gráfica Wacom.
  • Ligeros cambios en los sistemas de ficheros F2FS y BtrfFs.

Lo que mas se toma en cuenta de este nuevo kernel, en si no son los cambios, si no la estabilidad, la versión Linux 4.0 del núcleo esté enfocada en la estabilidad y corrección de errores.

Además el que no sea necesario reiniciar el sistema en las actualizaciones del kernel es algo que muchos administradores de sistemas están muy contentos, muy enfocado a todos los que necesiten tener el sistema encendido todo el tiempo, podrán aplicar parches de seguridad -por ejemplo- sin necesidad de reiniciar (apagar el sistema).

.. after extensive statistical analysis of my G+ polling, I’ve come to the inescapable conclusion that internet polls are bad.

Big surprise.

But “Hurr durr I’ma sheep” trounced “I like online polls” by a 62-to-38% margin, in a poll that people weren’t even supposed to participate in. Who can argue with solid numbers like that? 5,796 votes from people who can’t even follow the most basic directions?

In contrast, “v4.0″ beat out “v3.20″ by a slimmer margin of 56-to-44%, but with a total of 29,110 votes right now.

Now, arguably, that vote spread is only about 3,200 votes, which is less than the almost six thousand votes that the “please ignore” poll got, so it could be considered noise.

But hey, I asked, so I’ll honor the votes.

Linux 4.0 is happening!

fuentes:

https://www.kernel.org/

Lunes 13 de abril de 2015

Julio Mayorga

Julio Mayorga
Blog 123Hosting.com.mx

Descarga y convierte videos de YouTube

Clipgrab es una aplicación muy sencilla de utilizar y es multiplataforma, la cual se puede usar tanto en Windows como en MAC, y por supuesto es Linux.

Esta herramienta nos permite descargar nuestras canciones favoritas de Youtube sin necesidad de descargar también el video.

Es ideal para esos casos que vemos un video y no le conocemos la canción de fondo. Con esta aplicación podremos obtener finalmente lo que queremos.

Su instalación en Linux es muy sencilla, Agregamos el repo

sudo add-apt-repository ppa:clipgrab-team/ppa

 

Y luego instalamos la herramienta


sudo apt-get update && sudo apt-get install clipgrab

La aplicación se ve algo así:
Clipgrab: baja y convierte videos de Youtube.

Aquí solo buscamos y seleccionamos el video que queramos, y pasamos a la pestaña de descargas
Video
Desde ahí podrás elegir el formato y la calidad del video (Mp4) ; incluso si prefieres sólo audio (Mp3), o el que deseemos.

Facilitamos también la url del sitio oficial para aquellos que no usen Linux:

http://clipgrab.org/

 

Jueves 09 de abril de 2015

Chiapas: Los 11 lugares que no te puedes perder

Canal Once, dedico este programa a el estado de Chiapas, faltaron algunos lugares de la zona costa cómo los manglares, la sima de las cotorras, la piedra de huixtla y muchos lugares que para los amantes de la naturaleza serían perfectos.

Por mi parte si tienen la oportunidad de visitar les recomiendo llegar primero a Palenque (cuenta con aeropuerto), de ahí visitar las ruinas mayas, pasar a San Cristóbal y visitar la capital Tuxtla Gtz que queda a 45 minutos en carro. Cerca de la capital hay pueblos muy bonitos cómo “Chiapa de corzo” para pasar por un buen pozol y unos tacos chiapanecos.

Saludos

Miércoles 08 de abril de 2015

Gunnar Wolf

Gunnar Wolf
Gunnar Wolf

Guests in the classroom: César Yáñez (@caesarcomptus) talks about memory assignation algorithms

Once again, on March 11 I had a great guest to save me some work and give a talk at my class! This time it was César Yáñez, and he talked about memory management algorithms, emphasizing on ARC.

The video is available, both at this server and in archive.org.

Thanks a lot!

Xenode Systems: ¿Qué hacer después de instalar Fedora 21 Workstation?

Viernes 27 de marzo de 2015

Emerson Posadas

Emerson Posadas
toxickore BLOG

Pending: create a custom fact to retrieve the network UUID

http://docs.puppetlabs.com/facter/latest/custom_facts.html

Jueves 26 de marzo de 2015

Óscar A. Parra V.

Óscar A. Parra V.
El Canibal » Geek

Mulaka

Mulaka: Pueblos Originarios es un juego en 3D inspirado en la comunidad Rarámuri creado por programadores chihuahuenses.
El Proyecto esta en Kickstarter y pretende recabar fondos para la creación del juego.

La historia, la música y los avances del juego prometen mucho.

Esperemos que llegue a lograr este proyecto de Lienzo Studio.

Miércoles 25 de marzo de 2015

Renich Bon Ciric

HowTo: Permanently redirect a request with parameter consideration in Tengine/NginX

Well, this one gave me a super hard time. I looked everywhere and found nothing. There is a lot of misinformation.

As usual, the Nginx and Funtoo communities helped me. Thanks to:

  • MTecknology in #nginx @ Freenode
  • Tracerneo in #funtoo @ Freenode

So, how do we do this? Easy, we use a map:

    # get ready for long redirects
    map_hash_bucket_size 256;
    map_hash_max_size 4092;

    # create the map
    map $request_uri $newuri {
        default 0;

        /index.php?test=1 /yes;
        /index.php?test=2 https://google.com/;
    }

    server {
        listen *;
        server_name test.php.g02.org;
        root /srv/www/php/test/public;

        # permanent redirect
        if ($newuri) {
            return 301 $newuri;
        }


        index index.php index.html;
        autoindex on;

        include include.d/php.conf;

        access_log /var/log/tengine/php-access.log;
        error_log /var/log/tengine/php-error.log;
    }

So, basically, you want to use the $request_uri in order to catch the the uri with it’s parameters. I wasted all day figuring out why $uri didn’t have this. It turns out it discards the parameters… anyway.

This one was a hard one to find. Please, share and improve!

References

Lunes 23 de marzo de 2015

Ejercitate para jugar los clásicos de Atari

La compañía Atari, aquella que dominaba el mercado comercial de los videojuegos en los 70 y 80’s ha creado una app para ejercicios.

“Atari Fit” es el nombre de la aplicación que motiva al usuario a mantenerse saludable mediante el desbloqueo de juegos clásicos de Atari como “Pong”, “Super Breakout” y “Centipede”. Básicamente la aplicación te da 100 ejercicios y más de 30 planes de trabajo, entre más estés en forma más puntos ganaras, los cuales podrán ser usados para desbloquear estos juegos.

Esta app es gratis para descargar y fue desarrollada por 8BitFit, que se especializa en esta clase de aplicaciones, el ejecutivo en jefe, Fred Chesnais dijo:

Con Atari Fit, los jugadores alrededor del mundo, podrán ejercitarse y jugar así manteniendo una estrecha unión con estos dos pasatiempos

atari1

Y aunque parece ser que la app aún esta en desarrollo, basándome en experiencia personal y en la lectura de la retroalimentación, seria excelente que funcionara a la perfección lo más pronto posible.

¿Que piensan sobre esto? ¿Ejercitarse para jugar? ¡Escriban sus comentarios!

Fuente: Gamespot

Halo 5 usará servidores dedicados

La compañía “343 Industries”, subsidiaria de Microsoft que es encargada de la saga Halo, ha confirmado que las partidas serán solamente a través de servidores dedicados, así eliminando que un jugador haga de host.

Josh Holmes, productor ejecutivo del juego, respondiendo una pregunta ha dicho que las partidas que vayan por matchmaking, incluyendo las personalizadas, usarán un único servidor dedicado y no conexión entre jugadores, así la compañía quiere eliminar los problemas que han sucedido con esta clase de partidas, como la ventaja del host ante el lag siempre presente.

El reciente recopilatorio, Halo: The Master Chief Collection combinaba servidores dedicados para el matchmaking, usando conexión directa entre jugadores para partidas personalizadas y campañas online.

Y que aunque el Xbox One ha reducido dramáticamente la cantidad de retrasos durante el juego, esto parece indicar que podemos llegar a pensar que se eliminará del todo.

¿Que te parece? ¿Emocionado por esto?

Fuente: Vandal

Para ti.... mi pedacito de cielo

Si.. el reclamo es valido... :) pero lo prometido es deuda, aun que se que lo sabes, no esta por demas plasmar aqui, en este lugar donde desde hace mucho tiempo he escrito anecdotas y cosas de mi vida... me alegra que tu seas parte de ella y es por ello que ahora eres una parte muy importante de mi historia y quiero que sepas que de todas las historias y vivencias descritos en este muy humilde blog, sin lugar a dudas, tu eres lo mejor que me ha pasado, te quiero y te amo mucho mucho... 

Asi que ahora como eres parte de esto, tienes que aprender a linuxear :) y  le tienes que agarrar amor al cerro tambien..... jejeje es broma, Gracias, por todo lo bueno que le has traido a mi vida.

Te mando un Caluroso y cariñoso Beso :*

( mmmmm vente paka )



Sábado 21 de marzo de 2015

¿Que jugarás este fin de semana?

Por fin es viernes de nuevo. El trabajo y/o la escuela quedo atrás y ya es tiempo de relajarse.

En Celofans hemos tenido un montón de noticias durante esta semana, contenido vasto y variado para todos los gustos. Noticias agradables y otras no tan agradables.

Pero en lo que todo eso pasa por nuestro sistema es hora de tomar el control y comenzar el fin de semana, así que de nuevo les hago esta pregunta.

¿Que jugaran el fin de semana?

En vista de lo que acaba de acontecer con respecto a las Tortugas Ninja creo que jugare el clásico Turtles in Time para SNES. Le seguiré al Chrono Trigger que aún no acabo ese magnífico juego, y, si tengo algo de tiempo, unas retas de Mario Kart 8

¡Comenten que jugarán este fin de semana y déjenos sus ID’s para poder agregarlos en linea!

Viernes 20 de marzo de 2015

José Oviedo

José Oviedo
oviedo.mx

En sublime text 3 no puedo escribir acentos

He instalado Sublime text en linux (ubuntu 14.10) y no me permite escribir palabras acentuadas, siempre agrega la apostrofe al inicio de la palabra y no arriba de ella: Como por ejemplo: Jos´e.

La solución es modificar la configuración “Key Bindings” del SublimeText., para eso entramos a:

Preferences > Key Bindings – Users

Y pegamos el siguiente texto en el archivo de configuración, guardar y listo!!!!.

[
// missing accented characters fix for ubuntu 14.10

// a, [á, å, ä]
{ “keys”: [“´”,”a”], “command”: “insert”, “args”: {“characters”: “á”}},
{ “keys”: [“°”,”a”], “command”: “insert”, “args”: {“characters”: “å”}},
{ “keys”: [“¨”,”a”], “command”: “insert”, “args”: {“characters”: “ä”}},

// A, [Á, Å, Ä]
{ “keys”: [“´”,”A”], “command”: “insert”, “args”: {“characters”: “Á”}},
{ “keys”: [“°”,”A”], “command”: “insert”, “args”: {“characters”: “Å”}},
{ “keys”: [“¨”,”A”], “command”: “insert”, “args”: {“characters”: “Ä”}},

// e, [é, ë]
{ “keys”: [“´”,”e”], “command”: “insert”, “args”: {“characters”: “é”}},
{ “keys”: [“¨”,”e”], “command”: “insert”, “args”: {“characters”: “ë”}},

// E, [É, Ë]
{ “keys”: [“´”,”E”], “command”: “insert”, “args”: {“characters”: “É”}},
{ “keys”: [“¨”,”E”], “command”: “insert”, “args”: {“characters”: “Ë”}},

// i, [í, ï]
{ “keys”: [“´”,”i”], “command”: “insert”, “args”: {“characters”: “í”}},
{ “keys”: [“¨”,”i”], “command”: “insert”, “args”: {“characters”: “ï”}},

// I, [Í, Ï]
{ “keys”: [“´”,”I”], “command”: “insert”, “args”: {“characters”: “Í”}},
{ “keys”: [“¨”,”I”], “command”: “insert”, “args”: {“characters”: “Ï”}},

// o, [ó, ö]
{ “keys”: [“´”,”o”], “command”: “insert”, “args”: {“characters”: “ó”}},
{ “keys”: [“¨”,”o”], “command”: “insert”, “args”: {“characters”: “ö”}},

// O, [Ó, Ö]
{ “keys”: [“´”,”O”], “command”: “insert”, “args”: {“characters”: “Ó”}},
{ “keys”: [“¨”,”O”], “command”: “insert”, “args”: {“characters”: “Ö”}},

// u, [ú, ů, ü]
{ “keys”: [“´”,”u”], “command”: “insert”, “args”: {“characters”: “ú”}},
{ “keys”: [“°”,”u”], “command”: “insert”, “args”: {“characters”: “ů”}},
{ “keys”: [“¨”,”u”], “command”: “insert”, “args”: {“characters”: “ü”}},

// U, [Ú, Ů, Ü]
{ “keys”: [“´”,”U”], “command”: “insert”, “args”: {“characters”: “Ú”}},
{ “keys”: [“°”,”U”], “command”: “insert”, “args”: {“characters”: “Ů”}},
{ “keys”: [“¨”,”U”], “command”: “insert”, “args”: {“characters”: “Ü”}},

// y, [ý, ÿ]
{ “keys”: [“´”,”y”], “command”: “insert”, “args”: {“characters”: “ý”}},
{ “keys”: [“¨”,”y”], “command”: “insert”, “args”: {“characters”: “ÿ”}},

// Y, [Ý, Ÿ]
{ “keys”: [“´”,”Y”], “command”: “insert”, “args”: {“characters”: “Ý”}},
{ “keys”: [“¨”,”Y”], “command”: “insert”, “args”: {“characters”: “Ÿ”}}
]

Lo que hace esta configuración es detectar el apostrofe + la letra y convertirla a la letra con acento.

Jueves 19 de marzo de 2015

Emerson Posadas

Emerson Posadas
toxickore BLOG

Maintain known_hosts file with a puppet class

Each time an ssh client gets connected to another ssh remote host, a known_hosts file is generated or updated based on the remote host public key.

The purpose of this file is well explaines on the following link: http://en.wikibooks.org/wiki/OpenSSH/Client_Configuration_Files#.7E.2F.ssh.2Fknown_hosts

Let's say that we have a network with 100 servers and each time we add another server to this network all the machines need to update the known_hosts file with the new public key. 

First step: ask the new machine for it's public key with ssh-keyscan:

# ssh-keyscan localhost/remotehost
# localhost SSH-2.0-OpenSSH_5.3
localhost ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAygRKDjzHw1a1L79f5rNaGlqPUDndZv9KhtZPG2MYrUrU/9NiBOiVDWwllUwWXQkLY3fhdTVncjGfzn4oc09876J3uXZJaNWr0PZpD8S7Y6+50iZWYVA0fTM0j32WdD3MMfJjCtrXo+/gDx9+XiQPXlWqkuy5L5PRIvjIzVeZwL6BDDalmQXx3Jw5QcfQn9Bc7m+Bw7ZO80mxnFnKH5zZa8jdjd6XPSLXN0Q+5UlvZ5o5hxaFA+4ywtvKbF6avlQj5rm9+6kGUkVLIZRVw+lkkGqSixsTMGC3mZURH2s38UB1OjHXQSW8DP/mImcAAQWB3V5JDHbswee99C8CU6ekcw==

And manually append the output to your ssh_known_hosts/known_hosts file in the proper format (man ssh-keyscan):

     Output format for rsa1 keys:

     host-or-namelist bits exponent modulus

     Output format for rsa and dsa keys:

     host-or-namelist keytype base64-encoded-key

     Where keytype is either “ssh-rsa” or “ssh-dss”.


Distribute this file with a puppet class on your nodes and you won't be prompted again to add this new key into your known_hosts/ssh_known_hosts file at the first login attempt. 

For sure this is far from perfect, but solves the problem in a short time. 
Héctor Bautista

Héctor Bautista
Soy un Jedi » Gnu/Linux

Admin CFDI en Debian

¿Qué es Admin CFDI?

Es una herramienta para descargar facturas CFDI desde el SAT (tanto emitidas como recibidas), de uno o más correos electrónicos, organizar, validar y reportar facturas CFDI desde directorios.

Los creadores son de Factura Libre que vienen desarrollando esta poderosa herramienta desde hace ya un tiempo.

Tomado de la página del proyecto:

Esta herramienta te permite realizar las siguientes acciones:

  • Descargar facturas (CFDI) emitidas o recibidas directamente del SAT.
  • Descargar facturas (CFDI) recibidas de uno o más correos electrónicos.
  • Organizar las facturas (CFDI) en carpetas por emisor o receptor, año y mes.
  • Generar PDFs de facturas (CFDI) usando una plantilla ODS de Calc de LibreOffice
  • Generar un reporte de facturas (CFDI), así como validar los sellos y su estatus en el SAT

El desarrollo y últimas versiones del proyecto se están llevando en Github.

Requerimientos:

  • Python 3.4
  • Tk si usas Linux, si usas Windows ya lo integra Python
  • Firefox para la automatización de la descarga del SAT
  • Selenium para la automatización de la descarga del SAT
  • PyGubu para la interfaz gráfica.
  • ReportLab si usas una plantilla JSON (por implementar)
  • LibreOffice si usas la plantilla ODS
  • Extensiones win32 para Python si usas Windows

Tanto en la página del proyecto como en el sitio del buen Linuxman, encontrarán información para la instalación de lo necesario para que funcione.

En el caso particular de Debian, viene Python 2.7 por default, así que es necesario instalar los paquetes necesarios para que funcione.

root@kenobi:/home/hbautista# aptitude install python3-tk python3-pip python3-uno

Hay que tener instalado LibreOffice y Firefox además de los paquetes que se acaban de instalar. Una vez instaladas las dependencias, procedemos a instalar con pip, selenium y pygubu:

root@kenobi:/home/hbautista# pip3 install selenium pygubu

Tanto la instalación de paquetes con apt-get o aptitude, como los que se instalan con pip3, debe hacerse como root.

Descargar versión más reciente de producción: AdminCFDI v0.2.2 (567).

Como usuario normal, procedemos a ejecutar Admin CFDI en el directorio en dónde hayamos extraído el contenido de AdminCFDI:

hbautista@kenobi:~/AdminCFDI_v0.2.2$ python3 admincfdi.py

Admin CFDI 1Admin CFDI 2

Y eso sería todo

Agradecimientos a Factura Libre y a Linuxman por la ayuda prestada.

Notas relacionadas:

The post Admin CFDI en Debian appeared first on Soy un Jedi.

Miércoles 18 de marzo de 2015

Stoping spam with postfix

Well Ihad some small troubles with spamers on postfix I found some commands to parse logs and get the user.
Sometimes the user password was compromised, we need search the users what is sending spam like:

zgrep 'sasl_method'  /var/log/mail.log* | grep "postfix/smtpd" | awk '{print $9}' |  sort -n | uniq -c | sort -n | tail

that return is

4342 sasl_username=tania.perez@xxxx.com
20980 sasl_username=veroa@xxxxx.com

Wow i see that two users login alot of times with the mailserver. That users are sending spam!

Lets check the ips was autheticating:

zgrep $1  /var/log/mail.log* | grep "postfix/smtpd"| grep  -v reject | awk '{print $7}' |uniq -c | sort -n | tail

127 client=unknown[180.249.13.35],
127 client=unknown[5.34.35.160],
127 client=unknown[95.46.242.232],
128 client=ip-46-73-42-28.bb.netbynet.ru[46.73.42.28],
131 client=host-static-89-35-202-29.moldtelecom.md[89.35.202.29],
134 client=unknown[78.175.102.232],
136 client=unknown[124.227.149.62],
137 client=unknown[176.196.97.244],
137 client=unknown[187.4.82.244],
139 client=ip-552f.proline.net.ua[93.126.85.47],

that ips are very strange, lets check the country from comes with whois or with geoiplookup

geoiplookup 93.126.85.47
GeoIP Country Edition: UA, Ukraine

That ip is not from mexico lets ban with this script:

    #!/bin/bash
    IPT=/sbin/iptables
    SPAMLIST="spamlist"
    SPAMDROPMSG="SPAM LIST DROP"
    BADIPS=$(egrep -v -E "^#|^$" blocked.ips)

    # create a new iptables list
    $IPT -N $SPAMLIST

    for ipblock in $BADIPS
    do
    $IPT -A $SPAMLIST -s $ipblock -j LOG --log-prefix "$SPAMDROPMSG"
    $IPT -A $SPAMLIST -s $ipblock -j DROP
    done

    $IPT -I INPUT -j $SPAMLIST
    $IPT -I OUTPUT -j $SPAMLIST
    $IPT -I FORWARD -j $SPAMLIST

Domingo 15 de marzo de 2015

Gunnar Wolf

Gunnar Wolf
Gunnar Wolf

Crowdfunding call: "Natura" short film

My good friend Felipe Esquivel is driving a crowdfunded project: the first part of the "Natura" short film. I urge every reader of my blog to support Felipe's work!

Felipe, the director for this project, is a very talented Chilean-Mexican animator. He has produced short animated films such as A duel and One fine day.

Not only that: It might be interesting for my blog's readers that a good deal of the work of Chamán Animation's work (of course, I am not qualified to state that "all of" their work — But it might well be the case) is done using Free Software, specifically, using Blender.

So, people: Go look at their work. And try to be part of their work!

Itzcoalt Alvarez Moreno

Itzcoalt Alvarez Moreno
Itzcoalt (itz) Álvarez

La familia y el desarrollo profesional de sus integrantes

Sin duda alguna la familia juega un papel importante en el desarrollo personal y profesional de sus integrantes, en el núcleo familiar,los hijos no solo copian los patrones  de conducta de sus padres, si no que en base a las facilidades que estos otorgan, es posible tener un excelente desempeño o  un fracaso total.

Los limites que muchas veces tenemos, nos han sido fijado por nuestra familia de manera directa o indirecta, y dependiendo de nuestro desarrollo, logramos la independencia en la toma de decisiones.

Normalmente,  ante una disyuntiva importante, buscamos el consejo de nuestros padres, y normalmente valoramos fuertemente esta opinión.

He conocido casos que pueden estar en los extremos, en donde personas ya entradas en sus 40tas, deben someter sus acciones y decisiones a la aprobación de sus padres, que normalmente ejercen una control total sobre su hogar y sobre todo lo que en el sucede, aun cuando sus hijos hayan salido del seno familiar, la influencia continua.

 

Como padres, debemos ofrecer la seguridad necesaria para permitir que nuestros hijos tomen los riesgos (calculados) que ellos deseen, que sean responsables de sus acciones y sobre todo, que comprendan que estamos para apoyarlos, no para resolverles la vida.

Debemos ofrecerles una plataforma que les permita un desempeño libre de vicios y de temores fundados normalmente por nuestros propios temores, finalmente, ellos deben vivir su propia vida y tener su propio futuro.

Siempre debemos pensar, si los controles, o si la falta de estos pueden provocar algo no esperado en el desarrollo de nuestros hijos.

 

Cada caso es diferente, y debe ser evaluado de manera independiente, y nosotros debemos tener la mente abierta para identificar o aceptar cuando estamos entrando en excesos,

 

Viernes 13 de marzo de 2015

LibreOffice Styles Tutorial

LibreOffice Styles Tutorial (click to download)

LibreOffice Styles Tutorial

I wrote a small-and-quick tutorial for using LibreOffice Styles. It is intended to quickly let you understand (and hopefully grasp) the concepts behind the use of Styles without having to go through an entire manual.

It briefly covers and exemplifies the notion of Paragraph and Character Styles, Direct Formatting, automatic table of contents generation and chapter rearrangement through the Navigator.

Styles can do much more than explained in the tutorial, but it should get you started saving a significant amount of time.

Download it by clicking on the image or from here: /files/libreoffice-styles.odt

Martes 10 de marzo de 2015

Emerson Posadas

Emerson Posadas
toxickore BLOG

Puppet: estructura de un módulo y como invocar a sus clases

Dicen que es de sabios cambiar de opinión, pero también es de idiotas permanecer aferrados. Como sea, ahora que he estado aprendiendo algo de puppet, he tenido que generarme algunos módulos para hacer algunas tareas básicas de configuración en mis nodos. Para lo que es bueno recordar las siguientes referencias; basado en mi siguiente estructura de directorios:

# tree
.
└── base
    ├── files
    │   ├── hosts
    │   ├── motd
    │   └── vimrc
    ├── manifests
    │   ├── hosts.pp
    │   ├── init.pp
    │   ├── motd.pp
    │   └── vimrc.pp
    └── tests
        └── init.pp

4 directories, 8 files

Tendría que llamar a las clases de la siguiente manera:

# cat ../manifests/site.pp
node 'foo-host' {
        include base::hosts
}

node 'default' {
        include base::motd
        include base::vimrc
        include base::hosts
}

Lunes 09 de marzo de 2015

Fco. de la Torre Inguanzo

Fco. de la Torre Inguanzo
LINUXMANR4 » Linux y Software Libre

Control remoto para Kodi XBMC

Con el tiempo he instalado algunos addons pero nunca un control remoto para Kodi (anteriormente XBMC) que es para mi gusto, la cereza en el pastel de este programa multimedia.

Yatse

Después de buscar un poco encontré a Yatse que en mi corta búsqueda no me quedaron ganas de probar otra aplicación, Yatse lo hace todo y lo hace bien. Es de esas pocas veces que le atinas a la primera a la aplicación que estas buscando.

Controles generales de yatse

Controles generales de Yatse

Configuración de Kodi/XBMC

Para poder controlar Kodi es necesario activar primero una opción. Hay que ir al menú SistemaAjustesServiciosServidor Web y activar la opción que dice Permitir controlar Kodi via HTTP. Se pueden personalizar algunos parámetros, pero con eso es suficiente.

Activando el control por servidor web.

Activando el control por servidor web.

Lo primero que hace Yatse después de instalarlo es intentar localizar a Kodi y darlo de alta. Si no lo dan de alta en este momento pueden agregarlo posteriormente en el menú de ajustes en la sección de Media Centers.

Listado de media centers

Listado de media centers

Todo desde tu teléfono.

Yatse tiene todo tipo de controles por categoría, ya sean Películas, Videos, Música, Imágenes, un control de dirección para navegar por los menús, un teclado para las búsquedas, vamos, hasta tiene un “touchpad” si se nos hace más cómodo. Control de volumen, Mute, muestra la información del archivo que estamos viendo en ese momento. ¡Hasta se pueden descargar los subtítulos!

Reproducción de películas

Muestra la información básica de la película y sus controles.

Se pueden dar de alta varios sistemas de Kodi y se seleccionan desde la pantalla principal. No se como pude vivir tanto tiempo sin él.

Si saben de alguna otro programa para android que sea mejor no duden en recomendarlo en los cometarios.

The post Control remoto para Kodi XBMC appeared first on LINUXMANR4.

Viernes 06 de marzo de 2015

Renich Bon Ciric

CFDI y FOSS @ México

Bueno, de la manera más informal y no oficial, me gustaría escribir el primer artículo; presumo, sobre admin-cfdi.

Es un proyectito que están escribiendo unos batos locos del D.F. y de PythonCabal; así como de otros lados. Una colaboración como pocas que han habido en PythonCabal por lo menos.

En todo caso, qué es el mentado admin-cfdi? Es un administrador de CFDI; escrito en Python. Tengo entendido que va a ser parte de algo más grande pero, por lo pronto, están escribiendo ésto.

Recientemente, me platican, están re-escribiendo algunas cosas. Por ejemplo, van a usar el módulo request en vez de usar selenium (phew!) para hacer la descarga. Bastante bueno, el rollo.

Si quisieses apoyar, pues tuvieses que caerle a las reuniones semanales, que son los Miércoles, creo. Únete a la lista de correo de PythonCabal o, de plano, checa la wiki e infórmate.

También, en un googlazo, me econtré con varios otros proyectos que andan haciedo lo meeeeesmo! A webo!

Bien por ellos y nosotros!

Lunes 02 de marzo de 2015

Gustavo Rubio

Gustavo Rubio
Ahí vamos

That javascript framework was so this morning (and so was that problem)

Una de las cosas que un ingeniero disfruta (o debería) es solucionar problemas, es una actividad naturalmente atractiva para quienes deciden dedicarse a esta fina profesión. Esa misma curiosidad nos hace constantemente buscar otros desafíos.

Particularmente, en el desarrollo de software, buscar soluciones a problemas pequeños es una constante que usualmente nos mantiene entretenidos y ocupados sin embargo, es común que nos bloqueemos al grado de no querer continuar con nuestro trabajo, una especia de “Sindrome de bloqueo del escritor

¿Por qué perdemos el interés en la tarea actual, el proyecto o a veces nuestro empleo?

A todos nos ha pasado: estamos horas tratando de resolver un problema, diseñar un algoritmo, el programa no compila o no corre, en fín, infinidad de obstáculos que después de una cantidad razonable de tiempo se vuelven tediosos y nos aburren. Algunos se levantan de su escritorio a caminar y pensar un poco, otros van a la tienda por una coca, otros se fuman un cigarro… después regresamos a nuestro escritorio con la mente un poco más despavilada a tratar de solucionar el problema.

Otros, como yo, simplemente necesitamos un poco de concentración. A mi particularmente me ayuda estar solo, sin ruido. Es común que mientras trabajo no esté escuchando música como muchos de mis compañeros lo hacen, yo lo relaciono con mi poca capacidad de multitasking (aunque honestamente, no creo que ningún ser humano sea capaz de hacer varias cosas a la vez, o no bien al menos) incluso me es a veces necesario aislarme por completo sin presencia de nadie para poder pensar en la solución más adecuada a un problema, como Sherlock con su “palacio mental“.

El aburrimiento

Estar aburridos creo que es la principal causa de bloqueo u obstáculo para solucionar un problema y tiene todo el sentido del universo, es decir, si no estamos cautivados por lo que nos encontramos haciendo en este mismo instante, es decir, sumamente interesados ¿Cómo nó vamos a estar aburridos? Aunque en este caso el estar aburrido creo es la consecuencia y no la causa, además, estar aburrido es una de las cosas mas naturales y humanas que podemos experimentar los homo sapiens. Osho, conocido (y controvertido) gurú hindú, comentaba en una de sus entrevistas:

No animal is ever bored. Look at a buffalo, chewing grass, the same grass every day, sitting and chewing and chewing, never bored. You may get bored looking at her: she is not bored. No animal is ever bored, you cannot bore an animal. Too thick, too dense a mind -how can you bore? For boredom a very, very high sensitivity is needed, the higher your sensitivity the higher will be your boredom, the more will be your boredom.

Los humanos tenemos una sensibilidad profunda y somos emocionales lo cual fomenta cambios de ánimo, como el estar aburrido y contrario a ser algo negativo es un indicador de que somos seres que razonamos y buscamos adquirir conocimiento constantemente, hasta el día de nuestra muerte.

Estar aburridos, insisto, sería una consecuencia y no una causa.

Distractores

Obviamente lo primero que se nos viene a la mente son las redes sociales, el teléfono, etc. Aunque conozco muchos colegas que se distraen fácilmente con estos, llamemosle “artefactos“, hay quienes aun sin este tipo de distracción pueden perder el interés. Existen otros detonantes para distraernos de nuestro trabajo ya sean problemas personales, familiares, deudas, el resultado del partido del domingo, un viaje, etc. Creo que todos estos distractores los conocemos bien y no son específicos de nuestra profesión sino de cualquier persona que no sepa hacerse responsable de su trabajo.

Existen otros distractores, sin embargo, que hacen que nos enfademos de nuestro trabajo y que curiosamente los tenemos todo el tiempo entre nosotros, están escondidos ahí, como soldados aqueos en un caballo de madera.

A los primeros les llamaría yo distractores “naturales”, es decir, vienen de paquete con el hecho de que somos humanos y que necesitamos “despavilarnos” de cuando en cuando. El uso (y abuso) de los mismos es responsabilidad de cada individuo: hay trabajadores huevones que siempre buscarán un pretexto para no hacer bien su trabajo y hay otros que simplemente necesitan un “break” e independientemente del tiempo “fuera” cumpliran sus metas.

Al segundo tipo de distractor les llamo “artificiales” porque de alguna manera los desarrollamos inconcientemente, sin saber que estan ahí.

¿Cuáles son estos distractores artificiales, particularmente para los programadores?

Aquí un claro ejemplo:

El tweet anterior no solo es sarcástico y gracioso también es certero. ¿Cuántos nuevos frameworks de desarrollo nacen con la simple justificación de ser nuevos, de ser diferentes?

Programming “Gamification

El término gamification se entiende como la actividad o metodología de “premiar” simbólicamente a un individuo por completar tareas, cumplir metas o resolver problemas. Por ejemplo, un caso contemporaneo es foursquare / swarm o untappd para los amantes de la cerveza: cuantos más lugares conocemos o más tipos de cerveza probemos se nos proporciona un badge, o medallita que, aunque nos hace sentir que competimos, es igual de relevante que las estrellitas que nos pegaban en la frente en el jardín de niños.

Algo que he notado en programadores, sobre todo en los menos experimentados, es precisamente una necesidad de obtener algún tipo de reconocimiento por la cantidad de conocimiento con la que cuentan sin que necesariamente este se traduzca a algo útil para los usuarios finales quienes son, al final del día, la razón por la cual estamos desarrollando nuestro producto.

Conocer más lenguajes modernos, entender los frameworks más inovadores y radicales, cantidad de repositorios en github, todas actividades muy loables y necesariamente perseguibles para no quedarnos atrás con las nuevas tecnologías y perder práctica, sin embargo debe existir un balance saludable entre teoría, práctica y productividad.

Es mas o menos como juzgar un proyecto de software por su cantidad de líneas de código y deducir que a mayor cantidad es mejor, lo cual es obviamente falso. De la misma manera, tener cientos de commits a un proyecto no necesariamente aportan valor. El valor se encuentra en la utilidad de dicho código para quien pretenda utilizar nuestro software.

Como “project manager” constantemente me encuentro con código poco probado que el desarrollador asegura está listo o que incluso pasa las pruebas unitarias y que desde la perspectiva de desarrollo “sirve” pero desde la perspectiva de calidad de producto deja mucho que desear y la razón por la cual sucede esto es precisamente una aparente e innecesaria prisa por entregar rápido y pasarnos al siguiente problema porque ya nos aburrimos del anterior.

Similar a esto, algún colega, desarrollador de PHP comentaba recientemente en un foro el hecho de que muchos programadores apenas tienen algo de experiencia en un lenguaje o herramienta, se brincan a otra para poder solucionar otros problemas con paradigmas diferentes (y que si lo sabemos quienes aun tocamos PHP). Tal es el caso de node.js, tecnología completamente diferente a otros lenguajes o plataformas mas tradicionales que precisamente trata de solucionar problemas diferentes, no los mismos problemas con diferente código.

Desarrollar en tecnologías “viejas” como PHP o Java puede no ser cool, pero puede ser productivo. Desarrollar en nuevas tecnologías solo porque están de moda no necesariamente solucionará nuestros problemas.

En general podría decir que quienes buscan ser productivos se preocupan menos por las herramientas y más por el producto mientras que quienes buscan brillar en la comunidad haran lo contrario: estar al grito de la moda en tecnologías aun cuando no signifique algo laboralmente hablando. Ambos buscan reconocimiento, los primeros de sus clientes y usuarios, los otros de sus propios colegas. Los primeros son relevantes para quien usa el software, los segundos no tanto.

La generación Github

Una de las cosas mas espectaculares que le ha sucedido al gremio de desarrolladores es github y el trabajo en colaboración por medio de Internet ya que propicia inovación sin lugar a duda. Como hub de desarrollo, camaradería y aprendizaje es una plataforma excelente, sin embargo esto no necesariamente significa que todo lo que encontramos en ese vasto sitio sea de calidad.

La idea de colaboración open source no es nueva. Existieron sitios anteriormente como sourceforge, berlios y otros. Incluso antes de que colaborar y compartir código  por Internet fuera razonablemente posible existieron comunidades de desarrollo abiertas por medio de mailing lists, canales de IRC y simples servidores de FTP.

Es precisamente la comunidad de desarrollo abierta la que más experiencia tiene en este tema, la de la vieja escuela. Una de las razones (ampliamente discutida por expertos en el tema) por las cuales, por ejemplo, muchos productos open source o libres no terminan de “cuajar” es por el protagonismo tanto de sus autores como de sus contribuyentes: cuando el autor original de un producto rechaza un parche por mala calidad, no seguir los lineamientos del proyecto o simplemente porque considera que es un feature que no va de la mano con el objetivo del software era común que dicho contribuyente creara un fork o versión alterna del proyecto, que persiguiera los objetivos del segundo. Esta actitud ha dañado al ecosistema de software open source por años, particularmente al software de escritorio. La razón generalmente era la misma: búsqueda de reconocimiento por encima de buscar solución a un problema.

Esta mentalidad se ha ido pasando de generación en generación, particularmente en github y comunidades aledañas: crear software desde cero porque nosotros creemos que nuestra manera de abordar un problema es mejor.

Si lo vemos desde el punto de vista de un programador que pudiera aportar conocimiento y esfuerzo a un proyecto entonces vemos que ese potencial contribuyente a dicho proyecto duplicará esfuerzos tratando de resolver exactamente el mismo problema. De igual manera, quienes consumen su tecnología tendrán que aprender, de nuevo, otra nueva tecnología y muy seguramente, aun sin dominarla, tendrán que estar pendientes el nuevo chico de la cuadra.

Pareciera que estoy en contra de las comunidades de desarrollo y el open source ¿Cierto?

Un claro ejemplo de como se busca más el reconocimiento que los resultados tangibles es el caso de OpenSSL, componente de software utilizado prácticamente en todos lados, en todo el mundo, necesario para encriptar casi cualquier cosa que utilicemos como usuarios finales o como programadores ¿Cuántos contribuyentes existen? ¿Cuántos forks? Recientemente y a raíz del bug heartbleed los mantenedores del proyecto tuvieron que pedir ayuda financiera, casi como limosna, en un llamado de emergencia por la poca cantidad de recursos con la que cuentan.

¿Por qué tan pocos programadores han contribuido al desarrollo de OpenSSL? Bueno es muy simple, porque no es un producto particularmente inovador, hace lo que debe hacer y lo hace bien, a nadie le interesa tocar en una banda de jazz, todos quieren ser miembro de la banda de pop de moda, o un rockstar. Y así como hacer playback es más fácil también lo es crear un pequeño framework web. Tocar jazz en este caso es una buena metáfora para la cantidad de conocimiento, técnica e inteligencia que requiere diseñar algoritmos de seguridad.

Enfoque y objetivos como solución

Tener un objetivo de la tarea actual, milestones de nuestro proyecto o del producto final como tal es sumamente importante, y para poder trazarlos debemos:

  1. Entender el problema que debemos solucionar
  2. Procurar investigar si hay una manera ya existente de solucionarlo, no reinventar la rueda
  3.  Entregar calidad: ¿Hace mi software lo que el usuario espera que haga?

Creo que la mayoría de las veces perdemos precisamente el enfoque por estar pensando e invirtiendo tiempo en temas auxiliares al objetivo principal, como que framework usar, convenciones de código, entornos de desarrollo, proveedores de cloud hosting, bugtrackers, etc. Estos puntos deben de tratarse como decisión o consecuencia del análisis de los 3 puntos que mencioné arriba y no al revés.

Muchas veces veo a desarrolladores sumamente inteligentes y astutos ansiosos por aplicar alguna nueva librería, lenguaje o metodología sin embargo no tienen ningún problema que solucionar. Es más fácil (y divertido) encontrar desafíos y problemas técnicos para aplicar tecnología que inventar o aprender tecnología nueva por si “algún dia la necesitamos”.

Le llevó años de trabajo a Thomas Alva Edison (y a otro puño) desarrollar un foco con filamentos para solucionar un problema simple: iluminación artificial y llevó otros casi 80 años solucionar un nuevo problema: focos que hicieran uso eficiente de energía. ¿Por qué estamos entonces tan apurados como desarrolladores por solucionar un nuevo problema si aun no hemos solucionado el anterior?

 

Sábado 28 de febrero de 2015

Gunnar Wolf

Gunnar Wolf
Gunnar Wolf

Welcome to the world, little ones!

Welcome to the world, little ones!

Welcome little babies!

Yesterday night, we entered the hospital. Nervous, heavy, and... Well, would we ever be ready? As ready as we could.

A couple of hours later, Alan and Elena Wolf Daichman became individuals on their own right. As is often the case in the case of twins, they were brought to this world after a relatively short preparation (34 weeks, that's about 7.5 months). At 1.820 and 1.980Kg, they are considerably smaller than either of the parents... But we will be working on that!

Regina is recovering from the operation, the babies are under observation. As far as we were told, they seem to be quite healthy, with just minor issues to work on during neonatal care. We are waiting for our doctors to come today and allow us to spend time with them.

And as for us... It's a shocking change to finally see the so long expected babies. We are very very very happy... And the new reality is hard to grasp, to even begin understanding :)

PS- Many people have told me that my blog often errors out under load. I expect it to happen today :) So, if you cannot do it here, there are many other ways to contact us. Use them! :)

Viernes 27 de febrero de 2015

Héctor Daniel Cortés

Héctor Daniel Cortés
'Aztec Eagle' Turbo

Larga vida y prosperidad.



El actor del inolvidable personaje de Star Trek, Doctor Spock, murió hoy 27 de febrero del 2015 a las 08:40 EST a la edad de 83 años por complicaciones de una enfermedad pulmonar crónica. Larga vida y prosperidad.

La nota original en http://news.slashdot.org/story/15/02/27/1734228/leonard-nimoy-dies-at-83

Otros enlaces: Twitter.

Jueves 26 de febrero de 2015

LogicalBricks Solutions: Ha terminado el soporte para Ruby 1.9.3

Manuelton 2015

Y bueno al mal paso darle prisa, nuestro buen amigo Manuel Medina, en este momento tiene algunas necesidades económicas que no planeaba tener, léase no le caería mal un apoyo económico,como buen mexicano y como hombre orgulloso aún viviendo en el país del sol naciente, no va a publicitarlo en su blog, probablemente en su momento escribirá en retrospectiva de esto, pero dudo que lo haga en estos días en que lo necesita, por lo tanto y tomándolo como ejemplo vamos a tomarnos la libertad de platicarlo por acá.

Manuel como el mismo lo dice, no está en problemas, pero pronto va a tener que hacer un desembolso fuerte de dinero en los próximos meses, es decir no está muriendo de hambre, sin casa o enfermo, sin embargo un poco de apoyo no le vendría mal, y tal cual muchos disfrutamos de su blog y muchos otros de leerlo en el twitter o de haber cruzado palabra en algún medio de mensajería, no seria mala idea apoyarlo con algo mas que “anímate” y convertirlo en ahí van unos pesos, bueno yenes.

No esta demás decir que el propio Manuel organizo una cosa como esta para apoyar a Omar en 2008, por lo mismo yo creo que es una oportunidad de apoyarlo, en todo caso el mismo ha creado una página de preguntas frecuentes sobre el botón de donación que ha creado en su blog ahí mismo esta el botón de donación y alguna información extra, en fin que los invito a que se den una vuelta por su blog y lean la interesante saga que esta escribiendo y claro para que quienes lo leen en planetalinux no se pregunten que diantres hace aquí una entrada de estas, Manuel es linuxero de tiempo atrás y escribe también sobre programación y cosas muy interesantes para quienes visitan PL.

Domingo 22 de febrero de 2015

Héctor Daniel Cortés

Héctor Daniel Cortés
'Aztec Eagle' Turbo

2015-02-22 14:23:14 UPDATED: (M6.2) OFF THE COAST OF JALISCO, MEXICO 18.7 -106.8 (82934)

Region: OFF THE COAST OF JALISCO, MEXICO
Geographic coordinates: 18.717N, 106.806W
Magnitude: 6.2
Depth: 10 km
Universal Time (UTC): 22 Feb 2015 14:23:14
Time near the Epicenter: 22 Feb 2015 07:23:15
Local standard time in your area: 22 Feb 2015 08:23:14

Location with respect to nearby cities:
211 km (131 mi) SW of Tomatlan, Mexico
242 km (150 mi) WSW of Cihuatlan, Mexico
264 km (164 mi) W of Manzanillo, Mexico
267 km (166 mi) SW of Puerto Vallarta, Mexico
811 km (503 mi) W of Mexico City, Mexico


ADDITIONAL EARTHQUAKE PARAMETERS
________________________________
event ID : us c000tsak

This is a computer-generated message and has not yet been reviewed by a
seismologist.
For subsequent updates, maps, and technical information, see:
http://earthquake.usgs.gov/earthquakes/eventpage/usc000tsak
or
http://earthquake.usgs.gov/



DISCLAIMER: https://sslearthquake.usgs.gov/ens/help.html?page=help#disclaimer

Miércoles 18 de febrero de 2015

César Yáñez Fernández

Escritura a mano, teclados y la devaluación de la tipografía

Algo que me ha llamado la atención por mucho tiempo es la torpeza de nuestros teclados desde un punto de vista tipográfico. Creo que la manera en que las teclas están colocadas puede ser un factor que contribuye a la falta de calidad tipográfica en nuestra escritura diaria y publicación en línea. ¿Cómo se podría solucionar?

Regresando en el tiempo

Antes de la edición por computadora, la mayoría de los libros o revistas publicados eran elaborados por artesanos que tenían las herramientas y habilidades necesarias para reproducir y publicar un texto que cumplía los estándares más altos en legibilidad y tipografía. Mucho de esto tenía que ver con la imprenta y el conocimiento del tipógrafo acerca del idioma y la tipografía. Él o ella sabían que cada caracter en un tipo de letra significaba diferentes cosas así como las diferentes palabras significan diferentes cosas.

Los tipógrafos e impresores tenían acceso a un conjunto de caracteres extenso para ajustar la tipografía de libros y revistas.

La publicación en aquellos días era para producción de información en masa. No era algo que cualquiera podía hacer. Tomaba tiempo, era caro y contenía muchos detalles que tenían que ser cuidadosamente considerados para hacerlo bien.

Lo contrario a la publicación lenta y cara era la escritura a mano. La escritura a mano era rápida, barata y a mi punto de vista era una extensión de la voz humana. Hablábamos cuando nuestro destinatario estaba cerca, y escribíamos cuando estaba lejos. Ya que el propósito de la escritura a mano era imitar la voz, no requería el conjunto de caracteres extendido que la imprenta o el tipógrafo profesional tenían a la mano. En la mayoría de los casos funcionaba bien con únicamente A-Z, a-z y números.

La tipografía y la escritura a mano eran dos cosas que podían vivir juntas ya que no competían entre estas; una era para comunicación rápida e informal, y la otra para una comunicación formal y permanente.

El cruce de caminos

Si miramos a la historia de la máquina de escribir, podremos ver que el propósito de la invención no era para reemplazar o democratizar la impresión o la publicación en maza. Era para reemplazar la escritura a mano en oficinas, la correspondencia formal y la escritura profesional.

[Él] tenía por su gran estudio y dolor y gastos, el inventado y traído a la perfección una máquina artificial o método de impresión o transcripción de letras, una tras de otra, como en la escritura, por lo cual toda la escritura puede ser absortada en papel o pergamino tan claro y exacto tal que no puede ser distinguido de la imprenta, y que dicha máquina o método puede ser de gran uso en asentamientos y registros públicos, la impresión siendo más profunda y más duradera que cualquier otra escritura, y que no se puede borrar o falsificar sin un descubrimiento manifestado. -- De la patente de la Máquina de Escribir de Henry Mills, 1714

Había otras patentes solicitadas para dispositivos de tipografía en 1808, 1829 y 1852 pero no ganaron interés público. Alrededor de 1860, la máquina de escribir similar a la que se usaron por muchas décadas fue introducida y ganó popularidad.

Las primeras máquinas de escribir tenían las teclas distribuidas en orden alfabético.

3 5 7 9 N O P Q R S T U V W X Y Z
2 4 6 8 . A B C D E F G H I J K L M

Como se puede ver, solo se tenía de la A a la Z y números en el teclado. Esto muestra que el propósito era el reemplazar la escritura a mano.

Se usaban barras con letras que físicamente "martillaban" las letras en el papel. El problema era que las letras más usadas frecuentemente en esas máquinas de escribir se colocaban muy cerca una de otra lo que resultaba en la obstrucción de las barras y se atoraba el papel.

Alrededor de 1868, Christopher Latham Sholes introdujo el teclado qwerty para prevenir que las barras se atascaran.

Originalmente las teclas se distribuían en orden alfabético, lo que causaba obstrucciones frecuentes de las partes móviles. Sholes redistribuyó las teclas para que las letras más usadas frecuentemente estuvieran dispersas para minimizar el atascado. Obtuvo una patente por su distribución del teclado que se conoció como qwerty y se volvió el teclado us standard 101. -- Comparación de teclados QWERTY y DVORAK

Esto fue un mejoramiento enorme desde el punto de vista técnico, pero eso era todo, una solución a un problema técnico. La distribución qwerty hizo que el que teclado fuera más lento y forzaba al usuario a mover los dedos de una manera no natural y de maneras raras de teclear sin atascar las barras. Pero no mejoró la situación del escritor para nada.

En 1878, la distribución qwerty se asentó a como es en la actualidad.

1 2 3 4 5 6 7 8 9 0 - =
Q W E R T Y U I O P [ ] \
A S D F G H J K L ; '
Z X C V B N M , . /

En 1930, la máquina de escribir eléctrica fue inventada y la más popular fue IBM Selectrics, que usaba una esfera para imprimir las letras en el papel.

Sabían poco en aquellos tiempos acerca de la transformación que venía sobre la impresión y publicación digital. Si hubieran sabido podrían haber tomado decisiones muy diferentes.

Con la invención de la esfera para mecanografiar y la máquina de escribir eléctrica pudimos ver dos cosas:

Primero, ya que las barras estaban fuera de la ecuación era posible reacomodar las teclas en cualquier forma que beneficiaría a los que tecleaban y en 1936, el Dr. August Dvorak inventó el teclado DVORAK.

; , . P Y F G C R L
A O E U I D H T N S
Z Q J K X B M W V _

El teclado Dvorak acomodó las teclas para que las letras más usadas frecuentemente estuvieran distribuidas cerca de los dedos más fuertes de los que tecleaban. Esto fue muy bueno para los mecanógrafos, ya que aumentó la velocidad de la mecanografía y era más placentero de usar. Desafortunadamente, el teclado Dvorak no ganó su momento y el teclado QWERTY se volvió la distribución estándar.

Segundo, el juego de caracteres se pudo haber extendido para parecerse mejor a la variedad en juego de caracteres que se usaba con las imprentas y los tipógrafos profesionales. Pero, al igual que con la máquina de escribir original, la máquina de escribir eléctrica no fue diseñada para competir con la imprenta, la producción en masa o la publicación a gran escala, por lo que era natural seguir con el teclado existente de las máquinas de escribir originales.

La única extensión al juego de caracteres fue la introducción permanente de la tecla SHIFT. Era usada para agregar caracteres al teclado. Vemos caracteres alternos agregados a las teclas numéricas; [ ] @ # $ % & * ( ) " ', por ejemplo.

No he encontrado información de por qué esos caracteres fueron elegidos en favor de otros, que desde el punto de vista tipográfico, son más valiosos. Pero desde que las máquinas de escribir se usaban en oficinas, la comunicación formal, acuerdos, documentos financieros y demás, eran los que más necesitaban esos caracteres.

Desde que el teclado QWERTY extendido se volvió un estándar, significó que las personas empezaran a usar lo que estaba disponible en la máquina de escribir para tipografiar su texto. Aunque las comillas y los signos de interrogación eran tipográficamente incorrectos.

Lo mismo pasó con muchos otros caracteres tipográficamente importantes como el guion medio largo — y la elipsis … por ejemplo. Ya que inicialmente no estaban disponibles, y después en los teclados de computadoras, casi inexistentes, simplemente se olvidaron.

El resultado de la tipografía en la actualidad

La máquina de escribir y la computadora fueron introducidos a través de una cadena de invenciones y patentes que empezaron a reemplazar la escritura a mano. Estas no competían con la impresión tradicional y la publicación, pero en retrospectiva, era muy obvio que el camino de la máquina de escribir iba a liderar la invención de las máquinas de duplicación en masa como el mimeógrafo o la fotocopiadora. Aunque esto es bueno, porque democratizó la comunicación en masa y la publicación que cualquiera puede hacer, casi sin mayor costo, publicar sus propios libros, blogs, revistas o cualquier cosa que puedan imaginar.

La única cosa que puede molestar, es que aún tenemos herramientas tipográficas demasiado especializadas para hacerlo.

Sorprendentemente muchos diseñadores, editores y desarrolladores que gastan la mayoría de su tiempo trabajando con texto y copiado, tienen muy poco o nada de conocimiento sobre las implicaciones del lenguaje con los diferentes juegos de caracteres que usan.

La evolución de la escritura a mano a la mecanografía al teclado puede ser una de las causas de la falta del entendimiento tipográfico en la actualidad.

Así que ... ¿Hay algo por hacer? Bueno, el teclado QWERTY no va a irse. Puede haber algunos casos extremos de redistribuir las teclas en el teclado que puedan proveer una solución a corto plazo (o comprar un teclado DVORAK). Pero una solución a largo plazo puede ser el construir un sistema tipográfico dentro del software (que hay algunos que ya existen a un costo de uso muy elevado). La introducción del formato OpenType en gran escala dará acceso público a una variedad de caracteres que los tipógrafos profesionales tenían en sus días. Se necesita continuar empujando las características de OpenType en navegadores y otro software, y una vez hecho se habrá pasado un gran camino. Pero aún no se ha llegado, así que mientras tanto también es igualmente importante continuar con la construcción de otras herramientas como OpenTypography y LaTeX. Estas herramientas, presionarán sobre los desarrolladores de navegadores y mantener la discusión.

Martes 17 de febrero de 2015

Renich Bon Ciric

El dir-foss va creciendo

Que gusto me dá que esté creciendo el proyecto de dir-foss. La gente de México ha estado colaborando bastante para hacer el proyecto de fiar y demás.

Nos faltan algunas cosas, todavía. Por ejemplo:

  • Hay que hacerlo más bonito.
  • Hay que seguir agregando gente.
  • Hay que escribir algunas pruebillas unitarias.

Es un trabajo en progreso pero, la neta, ahí la llevamos.

Muchas gracias a todos los que han colaborado. Han ayudado bastante. Este directorio es el primer paso para unificar a las organizaciones alineadas con el FOSS de México. Una vez que sepamos qué hay, será más fácil establecer canales de comunicación y organizarnos.

Muchas gracias a todos y sigamos con el proyecto.

Viernes 13 de febrero de 2015

Alex Callejas

Alex Callejas
|rootzilopochtli.com|

RetroPie: Contruyendo una consola retro

I don’t like all the attention. I think it’s better to let my work do the talking.

No me gusta toda la atención. Creo que es mejor dejar que mi trabajo hable por mí.

Shigeru Miyamoto (Entrevista en DigitalTrends. 2006)

En días pasados, el buen amigo Dragón, me equipó con una Raspberry Pi, y me dí a la tarea de investigar varios proyectos interesantes que se pueden desarrollar con este hardware tan versátil. El que más llamo mi atención, además de satisfacer una necesidad geek recién adquirida, fue construir una consola de videojuegos retro.

En este post quiero compartirles como la construí. El hardware que utilice es:

Raspberry Pi 1 B+ TP-LINK Wireless Nano USB Adapter SanDisk Ultra microSDHC SNES Retro USB Super Nintendo Controller Charge cable Raspberry Pi 1 B+ Ensamblado 1 Ensamblado 2

Después de ensamblar el hardware, descargue la imagen de Raspbian y la instale en la microSD con el ARM installer de Fedora:

Screenshot from 2015-02-11 22:38:54

Al encender la Raspberry, se ejecuta el raspi-config, donde debemos modificar la configuración:

13

  • Expand Filesystem [Para que utilice los 8 Gb de la MicroSD]
  • Change User Password [Del usuario Pi]
  • Internationalisation Options [Modificar Teclado y zona horaria]
  • Advanced Options
    • SSH [Habilitar]
    • Hostname [Cambiar]
    • Memory Split [Modificar a 128 o 192]

Al seleccionar Finish, la raspberry se reiniciará. Después del reinicio, conectada a Internet vía Ethernet, actualizamos el firmware de la Pi:

root@heimdall:~# rpi-update 

Y posteriormente los paquetes:

root@heimdall:~# apt-get update
root@heimdall:~# apt-get upgrade

Después del reinicio, validamos que arranque correctamente el modo gráfico:

root@heimdall:~# startx

13-1

Al conectar la tarjeta wireless, no la reconocía, googleando un poco, encontré como instalar la tarjeta:

Descargar el driver más actual, siguiendo este post para ubicar el que le corresponde conforme la versión que tengamos, en mi caso:

root@heimdall:~# uname -a
Linux heimdall 3.18.5+ #744 PREEMPT Fri Jan 30 18:19:07 GMT 2015 armv6l GNU/Linux
root@heimdall:~#

En el post encontré el comentario acerca de la versión 3.18.5+ que  tengo, donde, para descargar la versión correspondiente había que ejecutar:

root@heimdall:~# wget https://github.com/lwfinger/rtl8188eu/raw/c83976d1dfb4793893158461430261562b3a5bf0/rtl8188eufw.bin -O /lib/firmware/rtlwifi/rtl8188eufw.bin

Y después de reiniciar, la tarjeta es funcional y se puede configurar con wpa_cli:

root@heimdall:~# wpa_cli 
...
Selected interface 'wlan0'

Interactive mode

> scan
OK
<3>CTRL-EVENT-SCAN-RESULTS 
> scan_results
bssid / frequency / signal level / flags / ssid
20:73:85:24:e2:a0 2412 46 [WPA2-PSK-CCMP][WPS][ESS] wifi_local 
c0:a5:62:7a:68:c0 2437 0 [WPA2-PSK-CCMP][WPS][ESS] ARRIS-76C3
0c:f8:96:29:f0:b0 2442 0 [WPA-PSK-TKIP+CCMP][WPA2-PSK-TKIP+CCMP][WPS][ESS] ARRIS-F030
> quit
root@heimdall:~#

Con esta info, generamos el archivo que contenga la configuración de nuestra red:

root@heimdall:~# vi /etc/wpa_supplicant/wpa_supplicant.conf
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1

network={
	ssid="wifi_local"
	psk="password"
	proto=RSN
	key_mgmt=WPA-PSK
	pairwise=CCMP
	auth_alg=OPEN
}
root@heimdall:~#

Si queremos agregar otra red, como la del trabajo, por ejemplo, podemos editar este mismo archivo, agregando las líneas correspondientes de la red deseada:

network={
	ssid="wifi_chamba"
	psk="password_chamba"
	proto=RSN
	key_mgmt=WPA-PSK
	pairwise=CCMP
	auth_alg=OPEN
}

Y configuramos la conexión automática al arranque, editando el archivo /etc/network/interfaces, agregando al principio del archivo la línea:

auto wlan0

Al final del mismo archivo, agregamos:

allow-hotplug wlan0
iface wlan0 inet dhcp
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
iface default inet dhcp

Al reiniciar, debe conectarse automáticamente a nuestra red inalámbrica, lo comprobamos con wpa_client:

root@heimdall:~# wpa_cli 
...
Selected interface 'wlan0'

Interactive mode

> status
bssid=20:73:85:24:e2:a0
ssid=wifi_local 
id=0
mode=station
pairwise_cipher=CCMP
group_cipher=CCMP
key_mgmt=WPA2-PSK
wpa_state=COMPLETED
ip_address=192.168.0.11
address=e8:de:27:a5:44:fb
> quit
root@heimdall:~#

Con la wireless funcional, iniciamos la configuración de la RetroPie, para lo cual opte por utilizar el método de la wiki del proyecto en github; entonces, primeramente, instalamos git y sus dependencias:

root@heimdall:~# apt-get install -y git dialog

Con el usuario pi, iniciamos la instalación de RetroPie:

pi@heimdall ~ $ git clone --depth=1 git://github.com/petrockblog/RetroPie-Setup.git
pi@heimdall ~ $ cd RetroPie-Setup
pi@heimdall ~ $ chmod +x retropie_setup.sh
pi@heimdall ~ $ sudo ./retropie_setup.sh

Al terminar la instalación/configuración, nos creará varios directorios dentro del directorio $HOME/RetroPie:

pi@heimdall ~ $ ls RetroPie/*
RetroPie/BIOS:
CARTS.SHA fast.bin gles2n64rom.conf MSX2EXT.ROM MSX2.ROM PAINTER.ROM system.bin
CYRILLIC.FNT FMPAC16.ROM ITALIC.FNT MSX2PEXT.ROM MSXDOS2.ROM RS232.ROM
DISK.ROM FMPAC.ROM KANJI.ROM MSX2P.ROM MSX.ROM skip.bin

RetroPie/roms:
amiga gamegear mame-samples pc snes
amstradcpc gamegear-osmose mastersystem pcengine snes-pisnes
apple2 gb mastersystem-osmose pcengine-libretro snes-snes9xrpi
atari2600-libretro gba megadrive ports vectrex
atari2600-stella gbc megadrive-dgen psx zmachine
atari800 intellivision msx quake3 zxspectrum
atarilynx macintosh n64 scummvm zxspectrum-fbzx
atariststefalcon mame n64-mupen64plus sega32x
c64 mame-advmame neogeo sega32x-dgen
fba mame-artwork neogeo-gngeopi segacd
fba-libretro mame-libretro nes segacd-dgen
pi@heimdall ~ $

Después de reiniciar la Pi, al hacer login, nos muestra el inicio característico de RetroPie:

Retropie Console

Los ROM’s de los juegos hay que transferirlos por SSH al directorio correspondiente de la consola, por ejemplo:

[alex.callejas@isengard retropie]$ scp Super_Mario_Bros.3.nes  pi@192.168.0.9:/home/pi/RetroPie/roms/nes/

Buscando un poco se pueden encontrar nuestros juegos predilectos ;-)

Para arrancar la consola Retropie, ejecutamos:

pi@heimdall ~ $ emulationstation

La primera vez, nos pedirá configurar el control que deseemos usar y después de eso ya podemos jugar en la consola.

Para mayor información, consulten la wiki del proyecto, acerca de roms, emulación de plataformas, configuración de controles, etc.

Aquí la galería con la RetroPie en funciones:

RetroPie Consola RetroPie emulationstation NES Roms Super Mario Bros 3 Super Mario Bros 3 Super Mario Bros 3 Super Mario Bros 3 emulationstation

Próximamente estaré probando el nuevo modelo, la Raspberry Pi 2 B+, para poder emular Nintendo 64 como se debe:

Ver en YouTube

Espero se diviertan… :-)

Jueves 12 de febrero de 2015

Fco. de la Torre Inguanzo

Fco. de la Torre Inguanzo
LINUXMANR4 » Linux y Software Libre

Función para calcular el ISPT 2014 en Excel y LibreOffice

Hace ya algunos años desarrollé una función similar a la que hoy les comparto y la pueden ver en el artículo Función en Excel para calcular el ISPT anual.

ISPT 2014 en Excel y Libreoffice

Nuevamente la rescato del baúl del programador para hacerle algunas modificaciones. En primer lugar, la actualización de los valores de la tabla que sirve para el cálculo que corresponden al ejercicio 2014 y además de que en esta ocasión me pidieron que ya no descontara el subsidio anual y solamente hiciera el cálculo del ISPT.

La Fórmula

Según me explicaron, esta es la fórmula que se utiliza para calcular el ISPT:

nbsp;

Fórmula para calcular el ISPT

nbsp;

El asunto se complica un poco porque varios de los valores se buscan en una tabla dependiendo de las Percepciones Gravables.

Tabla para el cálculo del ISPT 2014

Fig.1 Tabla utilizada para hacer los cálculos.

Por eso creo que el mejor enfoque fue hacer una función para Excel y otra para LibreOffice que hicieran de manera automática la búsqueda de los valores y el cálculo del impuesto.

Código de la función para Excel

Inicialmente desarrolle esta función para Excel ya que es el programa que generalmente usan los contadores.

Código de la función para LibreOffice

El código para LibreOffice es muy similar al de Excel, solo se cambio la función Round por Format para que el resultado lo muestre solamente con 2 decimales.

Software Libre

Los códigos de las funciones son software libre (libertad para usar,copiar y modificar). Aunque hice varias pruebas y lo verifiqué varias veces haciendo el cálculo manualmente no esta exento de errores, así que les pido que si notan algún “detallito” o error, por favor no dejen de reportarlo.

Para que no batallen, les dejo este archivo zip ISPT 2014 v20140212 que incluye sendos ejemplos en Excel y Libreoffice.

Espero que esta función les sea de utilidad a los amigos contadores que siendo honestos, les deberían de dar una medalla por hacer de estos cálculos su trabajo cotidiano.

The post Función para calcular el ISPT 2014 en Excel y LibreOffice appeared first on LINUXMANR4.

Viernes 06 de febrero de 2015

Fco. de la Torre Inguanzo

Fco. de la Torre Inguanzo
LINUXMANR4 » Linux y Software Libre

Imprimir archivos en orden con lpr y Ruby

El otro día me llegó un problema interesante, tenía una colección de archivos en formato PDF que se tenían que imprimir en orden.

Bueno, al principio no sabía que tenía que ser en orden y para imprimir todos los archivos de una capeta sólo use el comando:

lpr *.pdf

Y cumplía con el objetivo de imprimir todos los archivos PDF de la carpeta, pero luego resultó que el orden de impresión era importante (para buscarlos posteriormente) y es donde el problema se complicó un poco, porque hacerlo a mano simplemente no era una opción ¡Son demasiados!.

Orden alfábetico o númerico.

El problema es que una cosa es el orden alfabético y otro muy distinto el orden numérico.

Por ejemplo, tengo esta colección de archivos:

  • 1.pdf
  • 521.pdf
  • 002.pdf
  • 11.pdf
  • 0850.pdf

El resultado de un ordenamiento estándar sería el siguiente:

archivos = ["1.pdf","521.pdf","002.pdf","11.pdf","0850.pdf"]
puts archivos.sort

  • 002.pdf
  • 0850.pdf
  • 1.pdf
  • 11.pdf
  • 521.pdf
orden alfanumerico en ruby

Fig.1 Ejemplo de un ordenamiento estándar en Ruby.

Como pueden ver, están bien ordenados, pero de manera alfanúmerica. Es una cuestión de interpretación de los datos y generalmente el nombre de un archivo se considera un dato alfanúmerico.

Y el caso se complica aún más porque la longitud del nombre del archivo no es la misma.

Aunque es correcto no es el efecto que deseo.

La solución: Naturally

Buscando en Google dí con Naturally una gema de Ruby que se encarga de interpretar de una forma más humana este tipo de ordenamientos númericos.

Para usar Naturally primero hay que instalarlo.

gem install naturally

Y este es un ejemplo de su uso:

El resultado del ordenamiento es:

  • 1.pdf
  • 002.pdf
  • 11.pdf
  • 521.pdf
  • 0850.pdf
Resultado del ordenamiento usando Naturally.

Fig. 2. Resultado del ordenamiento usando Naturally.

Y ahora si, el orden es el que precisamente estoy buscando ¡Yeeeeeei!

A imprimir.

A estas alturas ya estaba muy cerca de la solución, ahora solo tenía que desarrollar un programa en Ruby que leyera todos los archivos PDF de una carpeta, los ordenara de forma natural y mandar imprimir cada archivo.

Al ejecutar el script empieza la impresión de los archivos PDF en la impresora predeterminada uno por uno, pero ahora en el orden que quiero.

Espero que este artículo les sea de utilidad. Todavía intuyo que es posible hacerlo en bash, pero como ya lo resolví este problema utilizando Ruby y funciona tan bien que voy a dar por cerrado el tema.

Ahora con Bash

Gracias a este comentario en google plus de Rodolfo Zola que me aclaró como resolver el mismo problema usando bash y el comando sort.

Y funciona perfectamente, sólo lo modifiqué un poco para que solamente imprimiera archivos pdf.

The post Imprimir archivos en orden con lpr y Ruby appeared first on LINUXMANR4.

Jueves 29 de enero de 2015

Gustavo Rubio

Gustavo Rubio
Ahí vamos

Grim Fandango y reviviendo otros muertos

Leía entre mis noticias hace un par de días sobre el remake de “La Bella y La Bestia” de Disney que protagonizará Emma Wattson y en dicho artículo de titulado “Why Is Disney Trying So Hard To Dilute it’s Brand?” (que traducido sería mas o menos algo así como “¿Por qué Disney se esfuerza en desaparecer su escencia?“) me llama la atención lo siguiente:

News of a Beauty and the Beast remake indicates that the corporation is less and less worried about approving unoriginal products as long as they’re guaranteed moneymakers.

¿Se trata entonces del simple hecho de repetir fórmulas probadas en vez de intentar evolucionar en el medio del entretenimiento? Difiero y estas son mis razones.

Solía haber un tiempo en el que las películas eran buenas, MTV ponía buenos videos musicales y en general la industria del entretenimiento valía la pena.

Lo anterior es uno de los comentarios mas comunes y latosos que escucharemos de cualquier persona pasada de sus 30’s. Es normal, es natural y es parte de la adultéz. Cuestión melancólica más guiada por puro sentimiento que por otra cosa.

A veces cuando me preguntan si he escuchado alguna canción en el radio de alguna nueva (o no tan nueva banda) suelo responder con un inocente y penoso “no, no me suena” y es que hace ya un tiempo que dejé de escuchar radio y simplemente cargo con mi colección de música para todos lados, ya sea en mi carro, en mi teléfono, en mi computadora, etc.

Inicialmente uno pensaría que la razón es porque la “nueva música” no es de mi agrado o me parece de poca calidad, sin embargo conforme he ido analizando el asunto me he dado cuenta que no es que esté cerrado a “nuevas propuestas”, es simplemente que lo que suelo escuchar es demasiado bueno para no escucharlo una y otra vez. Con algunas excepciones, pocas veces un disco nuevo o película contemporánea a marcado mi vida de manera que necesite volver a escucharla o verla de nuevo, sin embargo, eso no necesariamente significa que esta nueva música, o estas nuevas películas sean de mala calidad.

Me gusta pensar que me “he enamorado de los clásicos”, es decir, ¿A quién no le gustó Volver al Futuro? Cuando la primera entrega de esta saga salio al cine yo probablemente estaba en los brazos de mi madre, y mucha de la música que escucho se hizo cuando ni siquiera había nacido, decir que estos elementos artísticos me agradan porque son de mi generación sería hipócrita de mi parte, lo menos.

¿Cómo es que le tomé gusto a Los Beatles, Led Zeppelin, Hall & Oates Star Wars, Back To The Future, etc.? Bueno, porque simplemente son demasiado buenos para pasar desapercibidos. Y habrá quien no guste de estas bandas o de las mencionadas películas, pero para un grueso de la población simplemente son joyas, tesoros, patrimonio y debe compartirse tras generaciones tal como otras expresiones artísticas como la literatura, la pintura, etc. Simplemente se vuelven clásicos.

Dentro de estas expresiones artísticas existe un nicho que comparte, particularmente, la misma crítica que el cine y que la música para quienes lo consumen: Los Videojuegos.

Podría autodeclararme si bien no necesariamente un gran jugador si una persona que creció con la evolución de los mismos; desde NES con juegos clásicos como Mario, Contra, “El de los patos” hasta consolas actuales. Crecí con arcades o “maquinitas” como les decimos en muchos lugares pero en realidad nunca me convertí en fan ni jugador empedernido salvo por honrosas excepciones como Zelda en 64 y algunos otros títulos de SNES.

Una crítica concurrente entre los declarados “videojugadores genuinos” y a los que consideran como simples mortales son la diferencia entre el amor y pasión a los videojuegos e incluso apreciacion del arte dentro de los mismos y como los segundos simplemente lo ven como otro hobbie o pretexto para entretenerse. Los primeros aseguran que un buen videojuego debe contar con una historia que sumerja al jugador lo suficiente para apreciar este como algo más que un programa de entretenimiento. Aquellos que juegan títulos como Call of Duty, FIFA, Grand Theft Auto y otros títulos “AAA” suelen ser rebajados a n00bs.

Lo cierto es que mucha de la generación actual videojugadora simplemente usa lo que tiene a la mano, juega lo que el mercado le vende, no es tan sencillo como con la música o las películas. Uno puede simplemente comprarse un disco (o descargarselo) y escucharlo o ver una película hecha hace 40 años en un formato moderno con un dispositivo actual, no sucede lo mismo con los videojuegos. Estos últimos suelen estar creados para plataformas mas anticuadas y lo que sucede es que, a diferencia de la música o de las películas, un videojuego es una pieza electrónica de software que requiere interacción mas compleja con el dispositivo, es decir, no puedo tomar un cartucho del viejo NES y simplemente jugarlo en un Play Station 4 o un XBox One.

Y precisamente la razón por la cual es más sencillo que una persona contemporánea, joven de edad, adquiera gusto por discos musicales y títulos de películas clásicas más fácilmente. Remasterizar música y video es relativamente sencillo, “portar” un videojuego a nuevas plataformas no lo es.

Podría decir que me considero parte de los videojugadores que prefieren las buenas historias a unos gráficos que me dejen con la boca abierta. Me intriga más una buena ambientación en un videojuego que la facilidad de jugarlo en línea con otras personas. Y no es precisamente porque sea un hipster o melancólico, es porque afortunadamente me tocó crecer con títulos así.

Cuando comencé a jugar videojuegos por voluntad propia fue cuando tuve acceso a una computadora. Si bien mi hermano mayor y yo tuvimos la fortuna de tener consolas desde muy pequeños, nunca me volví “vicioso“. Tampoco solía gastarme el poco dinero extra que tenía en las maquinitas, nunca existió un enamoramiento de mi parte hacia los videojuegos de consolas, pero eso cambió conforme pude jugar en una computadora ya que ahí los juegos solían ser mucho más desarrollados, con historias más ricas, extensas, mapas mejor diseñados y detallados, ambientación, soundtrack, etc. La experiencia simplemente era abismal comparado a las consolas.

Uno de estos juegos que me cautivó fue Grim Fandando. Videojuego que casualmente será relanzado el día de hoy remasterizado. Un juego que se desarrolló hace casi 20 años por Lucasarts, casa desarrolladora de videojuegos del corporativo de George Lucas, ya inexistente por cierto, y que ahora es parte de los derechos de autor de Disney toda vez que esta última adquirió los derechos de mucho de lo que Lucas había creado con anterioridad.

El videojuego cuenta la trama de Manny Calavera, un personaje en el mundo de los muertos, muy al estilo de la reciente película “The Book Of Life“, pero en videojuego. Este, además de contar con una historia que envuelve y una ambientación “noir”, toma elementos de películas de antaño como “Casablanca” y “El halcón maltés“, todos por cierto, considerados clásicos del cine.

Es obvio que Disney sabe crear clásicos y tiene suficiente talento para crear nuevo material, sin embargo, como menciona el artículo que citaba al principio, pareciera que Disney, y muchas otras empresas se han quedado sin ideas y simplemente pretenden retornar a fórmulas probadas o bien comprar los derechos de productos de incluso otras industrias (como Grim Fandango) para generar ganancias, vivir de los refritos pues.

Creo que si bien en parte lo que busca Disney y otras empresas “reiniciando franquicias” es generar dinero, también el hecho de poder distribuir este material considerado clásico, a nuevas generaciones, es una buena jugada.

Tal como se ha estado desempolvando viejos títulos de cine y relanzando con éxito también se está trayendo clásicos de los videojuegos a aquellos que, como yo con algunos discos musicales, ni siquiera habían nacido. Para mi es algo positivo y definitivamente como consumidor me alegra la noticia.

Como dicen por ahí, “Los clásicos nunca pasarán de moda

Extra:

Además de haber sido remasterizado, Grim Fandango puede ser comprado desde Steam para plataformas Mac y Linux!

Martes 27 de enero de 2015

Alex Callejas

Alex Callejas
|rootzilopochtli.com|

Seguridad y Hardening en Servidores Linux

Lo mejor que podemos hacer por otro no es sólo compartir con él nuestras riquezas, sino también mostrarle las suyas - Benjamin Disraeli

El pasado Noviembre presente este tema durante un evento, el cuál les quiero compartir, en caso de que no hayan podido asistir:

Ver en YouTube

Además, la tira de Dilbert presentada ese día:

Ver en YouTube

Aquí la presentación.

Espero les sirva…

Sábado 24 de enero de 2015

Lo que no me gusta de nativos digitales

El año que paso lo he discutido bastante en clase y por lo que estuve medio leyendo por ahí varios lo han estado discutiendo en la red, igual menciono los puntos que me parecen importantes.

En más de un momento he expresado que no me gusta la categorización de Nativos Digitales / Inmigrantes Digitales (Prensky 2001[1]), para hablar sobre los estudiantes que tienen facilidad con las TIC, me parece que es un concepto incompleto ya que se basa en un corte por fecha o por decirlo por edad, el cual se sostiene solo en zonas con solvencia económica.

Hablar de que son más inteligentes por estar expuestos a la tecnología también me parece un despropósito, creo que hay dos cosas que especialmente dejan de lado quienes apoyan esta categorización con fiereza, 1) los chicos no solo tienen acceso a la tecnología, tienen mucho tiempo libre para usarla 2) No tienen temor a equivocarse (todavía) por lo mismo a prueba y error descubren como usarla.

Noten que entonces con estos dos puntos no es que nazcan con nuevo chip, que nosotros hayamos nacido con transistores o nuestros padres con bulbos, cada generación dependiendo de su capacidad económica, cultural y otros parámetros ha tenido una exposición diferenciada ya no digamos uso y apropiación a las diferentes tecnologías disponibles.

Pero el punto que más me lleva a pensar sobre esta generalización es que mucha gente mayor que de por si se siente presionada por la velocidad con la que los jóvenes utilizan ahora la tecnología, se siente hoy día más presionados y se auto sabotean al pensar que ellos deben usarla así de rápido, cuando en realidad ellos ya saben mucho más que los otros y si deben aprender cosas, pero no las mismas y en los cursos de formación digital, estamos poniendo énfasis en intenciones distintas, valga el ejemplo que he mencionado en clase y que alude a mi entorno de trabajo.

En algún momento estas materias se sacaron del currículo con la justificación de que todos saben usar una computadora, por lo mismo no hay necesidad de tener una materia que enseñe a usarla, es decir se confundió el medio con el fin, para ponerlo en una metáfora, todos tenemos pies y todos aprendimos a caminar… y no,  yo prefiero ponerlo en, si todos caminamos, pero no por tener pies mañana vamos a participar en un maratón y siquiera terminarlo, hay que aprender a usar las herramientas de las mejores formas o dicho de otra forma no vamos a enseñar a usar la computadora, enseñamos a usar la computadora para hacer cosas escolares y profesionales.

[1] http://www.marcprensky.com/writing/Prensky%20-%20Digital%20Natives,%20Digital%20Immigrants%20-%20Part1.pdf

Viernes 23 de enero de 2015

Miguel de Icaza

Miguel de Icaza
Miguel de Icaza

In Defense of the Selfie Stick

From the sophisticated opinion of the trendsetters to Forbes, the Selfie Stick is the recipient of scorn and ridicule.

One of the popular arguments against the Selfie Stick is that you should build the courage to ask a stranger to take a picture of you or your group.

This poses three problems.

First, the courage/imposition problem. Asking a stranger in the street assumes that you will find such a volunteer.

Further, it assumes that the volunteer will have the patience to wait for the perfect shot ("wait, I want the waves breaking" or "Try to get the sign, just on top of me"). And that the volunteer will have the patience to show you the result and take another picture.

Often, the selfista that has amassed the courage to approach a stranger on the street, out of politeness, will just accept the shot as taken. Good or bad.

Except for a few of you (I am looking at you Patrick), most people feel uncomfortable imposing something out of the blue on a stranger.

And out of shyness, will not ask a second stranger for a better shot as long as the first one is within earshot.

I know this.

Second, you might fear for the stranger to either take your precious iPhone 6+ and run, or even worse, that he might sweat all over your beautiful phone and you might need to disinfect it.

Do not pretend like you do not care about this, because I know you do.

Third, and most important, we have the legal aspect.

When you ask someone to take a picture of you, technically, they are the photographer, and they own the copyright of your picture.

This means that they own the rights to the picture and are entitled to copyright protection. The photographer, and, not you, gets to decide on the terms to distribute, redistribute, publish or share the picture with others. Including making copies of it, or most every other thing that you might want to do with those pictures.

You need to explicitly get a license from them, or purchase the rights. Otherwise, ten years from now, you may find yourself facing a copyright lawsuit.

All of a sudden, your backpacking adventure in Europe requires you to pack a stack of legal contracts.

Now your exchange goes from "Can you take a picture of us?" to "Can you take a picture of us, making sure that the church is on the top right corner, and also, I am going to need you to sign this paper".

Using a Selfie Stick may feel awkward, but just like a condom, when properly used, it is the best protection against unwanted surprises.

Martes 20 de enero de 2015

Miguel de Icaza

Miguel de Icaza
Miguel de Icaza

In Defense of the Selfie Stick

From the sophisticated opinion of the trendsetters to Forbes, the Selfie Stick is the recipient of scorn and ridicule.

One of the popular arguments against the Selfie Stick is that you should build the courage to ask a stranger to take a picture of you or your group.

This poses three problems.

First, the courage/imposition problem. Asking a stranger in the street assumes that you will find such a volunteer.

Further, it assumes that the volunteer will have the patience to wait for the perfect shot ("wait, I want the waves breaking" or "Try to get the sign, just on top of me"). And that the volunteer will have the patience to show you the result and take another picture.

Often, the selfista that has amassed the courage to approach a stranger on the street, out of politeness, will just accept the shot as taken. Good or bad.

Except for a few of you (I am looking at you Patrick), most people feel uncomfortable imposing something out of the blue on a stranger.

And out of shyness, will not ask a second stranger for a better shot as long as the first stranger is within earshot.

I know this.

Second, you might fear for the stranger to either take your precious iPhone 6+ and run. Or even worse, that he might sweat all over your beautiful phone and you might need to disinfect it.

Do not pretend like you do not care about this, because I know you do.

Third, and most important, we have the legal aspect.

When you ask someone to take a picture of you, technically, they are the photographer, and they own the copyright of your picture.

This means that they own the rights to the picture and are entitled to copyright protection. The photographer, and not you, gets to decide on the terms to distribute, redistribute, publish or share the picture with others. Including making copies of it, or most every other thing that you might want to do with those pictures.

You need to explicitly get a license from them, or purchase the rights. Otherwise, ten years from now, you may find yourself facing a copyright lawsuit.

All of a sudden, your backpacking adventure in Europe requires you to pack a stack of legal contracts.

Now your exchange goes from "Can you take a picture of us?" to "Can you take a picture of us, making sure that the church is on the top right corner, and also, I am going to need you to sign this paper".

Using a Selfie Stick may feel awkward, but just like a condom, when properly used, it is the best protection against unwanted surprises.

Lo que dejo el año viejo

  • Gallery [1] dejo de ser soportado a mediados del año y me entere justo antes de salir de vacaciones, tengo que buscar un remplazo.
  • Zenphoto no me gusto como remplazo… y creo que tiene un rato que anda descuidado [2]
  • Coppermine no me gusta como remplazo de Gallery [3]
  • Aprendí mucho más de Moodle, Claroline y otros muchos LMS [4] de lo que hubiera deseado y espero también se publique un articulo al respecto.
  • Logre pasar unas vacaciones offline casi por completo.
  • Dormí como no había hecho en un buen rato.
  • Planetalinux se movió lejos, pero ahora ya esta de regreso, geográficamente esta lejos, se encuentra cerca y me involucre un poco más.
  • Aprendí que las prioridades cambian con el tiempo, de primera mano
  • Y que es cierto eso de que hay cosas que no se pagan con dinero, sobre todo las satisfactorias.
  • Todavía queda mucho por hacer este año, mucho por organizar y más por concretar, esperemos como lo he planeado pueda sacar el mejor provecho del mismo.

[1] http://galleryproject.org/time-to-hibernate
[
2] http://www.zenphoto.org/
[3] http://coppermine-gallery.net/
[
4] http://seminarioplataformas.cuaed.unam.mx

Lunes 19 de enero de 2015

Gustavo Rubio

Gustavo Rubio
Ahí vamos

The invented here syndrome

lazywebCuenta la historia que, hace muchos años, cuando los programadores eran hombres y se escribían sus propias rutinas, clases, funciones y módulos, un fenómeno conocido como reutilización de código comenzaba a volverse hip, igual que las canciones de MC Hammer, los trolls y otras cosas espantosas de la epoca. Para entonces, los más viejos, y no por ello sabios, arraigados a sus ortodoxas, anticuadas y puercas formas, sufrían de lo que se le conoce hoy como el “Not Invented Here” syndrome, o el síndrome de “No se hizo aquí” que significa, en breve, solo utilizar recursos propios de la empresa y evitar a toda costa aquellos de externos, palabras más, palabras menos.

The “Not invented here” syndrome

Desarrollar software es una de las disciplinas más complejas que existen. Quien se dedique a esta biznaga lo sabrá, y quienes no probablemente no lo comprenderán. Y es que, como siempre comento, para desarrollar software útil uno debe no solamente entender su propia profesión relacionada con código, lenguajes de programación, lógica, razonamiento, matemáticas, cálculo y demás chunches sino que además debe entender perfectamente bien el negocio para el cual está desarrollando el producto, sería tonto pensar que solo con saber ciencias computacionales podríamos ser útiles a la sociedad. Para realizar un artefacto (virtual, en este caso) que ayude a mejorar el flujo de trabajo, ahorrar tiempo y eficientar procesos de otros sectores laborales es imperante que uno como ingeniero en software, programador o desarrollador entienda perfectamente bien el problema que intenta solucionar, de hecho, y la mayoría de las veces, aun mejor que quien nos paga para solucionar dicho problema.

Habiendo entonces tantos problemas que solucionar, diagramas que diseñar, juntas, análisis, levantamiento de requerimientos, etc. queda, sino mínimo, sí muy limitado tiempo para hacer lo que nos gusta, “tirar código“, como dicen mis colegas, y es por esta razón que conforme la computación se volvió mas accesible y sobre todo el Internet, se propuso, de manera extra oficial, ayudarnos los unos a los otros, como dice por ahí en algunas escrituras.

Verán, el hecho de reutilizar el trabajo de otros no es nada nuevo. Una de mis frases favoritas, y probablemente lo he dicho un millón de veces es aquella de Sir Isaac Newton, aplicable siempre a muchos de mis posts:

If I have seen further than others, it is by standing upon the shoulders of giants

Mi estimado Isaac se refiere al hecho de que, reutilizando y apoyandose en el trabajo de terceros es posible progresar, de alguna manera, el poder invertir nuestro preciado tiempo solucionando otros problemas nos permite tener mejores resultados, es decir, si ya existen motores que nos permiten mover vehículos es más inteligente reutilizar las leyes de la física, comprobadas, de un motor de bobina o de combustión que reinventar uno nuevo basado en alguna otra cosa. “If it works, don’t try to fix it” es el motto de muchos ingenieros.

Sin embargo, a pesar de esta filosofía, existe aún mucho programador decidido a utilizar solamente su código o aquel de sus colegas propios del mismo empleador. Verán, el programador es un animal sumamente ególatra, celoso de su trabajo y posesivo y hará lo que sea para demostrar que sus dancing moves son los mejores, aun cuando, francamente, a nadie le importa.  Lo anterior se conoce como el not invented here syndrome, o el sindrome de “No está hecho aquí” y aunque cada vez se ha vuelto menos común esta actitúd, aun existe, sobre todo en aquellos de la vieja escuela, no dispuestos a aceptar que hay alguien que probablemente lo haya hecho mejor que nosotros.

El sindrome de “No está hecho aquí” se ha desterrado de muchas industrias a lo largo de los años, no solo de la del desarrollo de software, por ejemplo, hace años, cualquier empresa de manufactura de electrónicos probablemente diseñaría la mayoría de los dispositivos, microcontroladores, tarjetas y chips de una televisión, hoy en día esta misma industria probablemente solo ensamble componentes, hechos en diferentes empresas, de diferentes países, globalización le llaman. ¿Por qué? Bueno porque permite una línea de ensamble muy rápida a menores costos lo cual se traduce a mejores ganancias, o sea lana.

Por otra parte, el hecho de tener enfocado a un equipo de trabajo o empresa en un área específica es sumamente redituable ya que especializa a dicho equipo o empresa a ser líder en su sector o ramo específico y sobre todo de invertir tiempo, dinero e investigación en problemas muy particulares mientras que su vecino de nave industrial hace lo mismo; dedicarse a resolver otros problemas muy particulares.

En nuestro estado, Baja California, existen infinidad de fábricas, o maquilas, como se les conoce, que se dedican a mercados verticales muy específicos, por ejemplo, asientos para aviones, marcos para ventanas, cajas de cartón. Si! Uno podría pensar, y bueno ¿Quién estaría interesado en fabricar marcos para ventanas exclusivamente? Bueno, toda la industria de construcción, hotelera, compañías dedicadas a materiales y muebles, etc. El beneficio es que quien se encarga de uno de estos mercados verticales lo hará perfectamente bien con procesos muy eficientados y esto se vuelve una cadena donde al final la suma de esos mercados verticales se traduce a un producto final para el consumidor de calidad.

El software no es muy diferente a estas otras industrias. Una aplicación requiere de infinidad de componentes y módulos que bien nos pueden llevar años terminar, es por ello que también existen casas de desarrollo y empresas dedicadas a vender productos para nosotros, los programadores, que podemos ensamblar y agregar extras para tener una aplicación útil para el consumidor en un tiempo relativamente corto, el tiempo es dinero así que entre más rápido se saque un release es mejor.

Recuerdo mis primeros pininos intentando hacer algo útil con un lenguaje de programación. Era más difícil de lo habitual, tenía uno muy pocas herramientas a la mano y había que hacer casi todo “a pata”. Alguna vez intenté hacer una aplicación de chat, que se conectara a la recién nacida red de Microsoft MSN, sin embargo, conforme pude juntar los requerimientos para mi aplicación en Visual Basic 6, me dí cuenta que inevitablemente tendría que programar un módulo de sockets TCP para realizar dicha comunicación. Logré realizar un pequeño cliente capáz de iniciar sesión y enviar mensajes, nunca recibirlos. Al final decidí que era más complicado de lo que parecía y tiré la toalla, de cualquier modo ni siquiera me pagaban por ello.

Si hubiera tenido el cuerno de la abundancia de componentes de terceros que existen ahora, y que permiten solucionar problemas muy específicos, otro gallo me hubiera cantado.

Los años dorados

Tiempo después de mis intentos (o varios) de aplicaciones, hace unos 15 años ya, el Internet mejoró no solo la comunicación de los mortales, como nos gusta llamarle a los usuarios comunes a nosotros los geeks, sino que además permitió a quienes ya estábamos metidos en esto volvernos más creativos; salas de chat de temas específicos donde podíamos compartir ideas, foros de Internet donde hacer preguntas cuando alguien estaba atorado en alguna parte de su código y claro, componentes o software de terceros, bien sea pagados o descargados, “de prestado” de algún FTP.

Por ejemplo, mi primer lenguaje de programación oficialmente fue Pascal, con Turbo Pascal de Borland. Aplicaciones de consola en Ms-Dos. No había mucha creatividad que explotar. Tiempo después me di cuenta que no llegaría muy lejos con dicha herramienta y me pasé Visual Basic 6 ya que era lo más fácil de tomar para alguien de la epoca, bien era esto, Visual C++ o Delphi. ¿Por qué no pasarme directamente a Delphi, si era la evolución natural de Turbo Pascal, con la misma empresa, y el mismo lenguaje que ya conocía pero orientado a objetos? Bueno, por los componentes!

Aquellos eran tiempos dorados para ambas empresas. Por una parte, Borland tenía con Delphi sus VCL’s que permitían crear interfaces de usuario en poco tiempo y con mucha funcionalidad, Microsoft Visual Basic 6 incluía ya también componentes que encapsulaban elementos de GUI’s que nos llevarían meses pulir en MFC de Visual C++. ¿El resultado? Bolsillos llenos de dinero tanto para ISV’s como para quienes extendían estos componentes y los vendían como 3rd party libraries listas para usarse, justo como tu madre dejó de hacer caldo de pollo para el guisado y comenzó a comprar cubos de Knorr Suiza.

La segunda ronda

Poco duró el gusto a quienes se estancaron desarrollando aplicaciones para el escritorio. Conforme hubo más Internet y velocidades de acceso más rápidas las aplicaciones web se volvieron un estandard, y con ello, las interfaces de usuario basadas en nuevas tecnologías como HTML con CSS para el diseño y Javascript para la interacción con el usuario. Pero así como Delphi, Visual Basic 6 y Microsoft Visual C++ tenían sus pormenores dependiendo la versión del sistema operativo, del compilador y de las librerías así nos pasó con el desarrollo web: diferentes versiones de navegadores suponían (y suponen aun, hasta el día de hoy) problemas de compatibilidad entre el mismo código, es parte de nuestro trabajo sí, pero lo hace más complicado, y nos quita tiempo, es una de esas cosas las cuales optamos por dejarle a alguien mas resolver mientras nosotros nos enfocamos en solucionar los problemas para los cuales nos ha pagado nuestro cliente o nos pagara nuestro usuario final.

Es así como nacen librerías como Dojo Toolkit, jQuery, script.acolo.us y otras que nos permiten encapsular funcionalidad general para varios navegadores y desarrollar interfaces de usuario compatibles entre distintos entornos de una manera fácil.

El web developer vs el programador

Hay quienes onerosamente y con mucho orgullo se hacían llamar web developers. Una especia de nueva profesión nacida del programador de hobbie y con fuertes influencias de aquellos programadores de Visual Basic 6, a quienes seguramente estoy ofendiendo con la comparación, pero veamos, alguien que se dedica al “desarrollo web” suele ser usualmente alguien que:

  • Viene de la industria del diseño o alguna otra área creativa, completamente diferente a la del desarrollo de software
  • Busca maximizar la productividad con el esfuerzo mínimo
  • Entiende conceptos básicos de programación pero no el ciclo de desarrollo de software o teorías computacionales

Por otra parte, quienes se bautizaron en la industria del software con tecnologías como Visual Basic 6:

  • Tendían a ser personas con estudios técnicos con mucha práctica y poca teoría
  • Buscaban entregar productos con la mayor cantidad de características con el esfuerzo mínimo
  • Encapsulaban la mayoría de la carga pesada en el código de sus aplicaciones en componentes de terceros

Siendo que las industrias y sectores ajenos al del software no logran comprender la complejidad del nuestro, es común que buzzwords como web development se vuelvan una moda y se invierta buena cantidad de dinero en ser parte del movimiento, tal como en estos días todo es la nube, para gerentes, CTO’s y otros ejecutivos.

Y como vivimos en la selva y cada quien se tiene que rascar con sus propias uñas, no era raro que quienes ayudados por estos componentes de terceros, content management systems como joomla, drupal o wordpress y conocimientos básicos de programación se hayan vendido como… bueno, web developers.

A diferencia de un web developer, un programador suele conocer los fundamentos del desarrollo de software, metodologías, herramientas y teorías de ciencia computacional que al otro le parecen bien aburridas, pérdida de tiempo o simplemente difíciles de comprender.

Si bien un buen programador e inteligente, usará el trabajo de otros para agilizar su trabajo, conoce el balance entre uso y abuso porque, creanlo o no, como todo en esta vida, es posible abusar también del trabajo de terceros.

El sindrome de “Está hecho aquí

Hace apenas unos días, una situación que ocurrió en el trabajo, me hizo pensar y motivó a escribir este artículo. Era día de release o entrega al cliente, se probó una nueva versión del producto, todo parecía haber funcionado a la perfección tanto en el equipo del desarrollador de frontend encargado de este feature como en la mía al momento de hacer QA, se realizaron pruebas también en el servidor de producción de este feature, todo funcionaba correctamente.

Pasó el fin de semana y recibí un correo de nuestro cliente indicando que uno de los features no funcionaba. Pensé que algo mal habría hecho el cliente ¿Qué podría haber fallado? Es decir, pruebas en todos los entornos se realizaron sin que este feature en especial hubiera fallado.

El lunes al llegar a la oficina probamos el deployment hecho al servidor, efectivamente había un problema en una de las páginas, problema que NO se manifestó cuando inicialmente se hizo el deployment a producción. Después de un par de horas encontramos el problema, problema que fue causado por el framework de UI que utilizamos, AngularJS.

¿Cómo pudo haber pasado esto?

Muy sencillo, a pesar de haber probado el feature A, contra el entorno de producción, y sin problemas, posteriormente se hicieron otras actualizaciones totalmente diferentes al feature A y que de ninguna manera afectaban su funcionamiento, sin embargo hubo un factor diferente, ajeno a nuestro propio código: el script que se corre cada vez que actualizamos realiza un build o empaquetado del frontend por medio de bower:

bower install && bower update

Si, el culpable estaba ahí, no en nuestro código, sino en uno de los (muchos, muchísimos) plugins que utiliza AngularJS, específicamente uno encargado de las rutas de la aplicación.

Una de las veces que se ejecutó este comando, después de haber probado feature A, se actualizó el plugin dejando este feature A, que ya se había probado, con problemas. Es decir, la actualización de código que no controlamos introdujo un problema.

¿Cómo pudimos solucionarlo?

Básicamente tuvimos dos opciones:

  1. Actualizar el plugin, volviendo a ejecutar el comando, pues ya existía una nueva versión con este fix aplicado
  2. Ajustar la versión a una específica dentro de nuestro proyecto, a una que sabemos funciona sin problemas, de manera que bower no actualice nunca el plugin

Y, temporalmente, decidimos aplicar la opción 1, en lo que lograbamos entender realmente el problema y buscar una solución adecuada y de largo plazo.

¿Nos hemos vuelto holgazanes como programadores?

Esta es una pregunta que me hago, y les hago a mis compañeros de trabajo, en repetidas ocasiones. Tal como en algún momento, los programadores de Visual Basic 6 abusaron de los componentes de terceros siento que aun, en pleno 2015, seguimos aplicando las mismas tendencias y malas prácticas, las trajimos del desarrollo de software de aplicaciones de escritorio a las aplicaciones web.

Si bien no estoy en contra de librerías que encapsulan funcionalidad para manipular el DOM entre navegadores, object relational mappers para acceso a base de datos, etc. sí estoy en contra de su abuso.

Alguna vez en uno de mis anteriores empleos, mientras desarrollábamos una aplicación en ASP.Net, uno de mis compañeros, encargado de la parte de UI decidió que era buena idea agregar un DLL como dependencia extra para ahorrarnos trabajo en la generación de cierta parte del código, y, ¿Cuál era esa parte? Un menú, un menú de 5 elementos, una simple lista con 5 enláces para el cual agregamos una dependencia de 1.2Mb solo porque mi colega era demasiado huevón (o inútil) para agregar unas 20 líneas de código HTML y CSS para crear dicho menú pero, oh, nuestro componente incluso tenía un editor visual!

Esta misma aplicación, con esta dependencia contaba además con:

  • jQuery
  • Dojo
  • ASP.Net Ajax Toolkit
  • Otros…

Y esto solo como parte del UI. Podrán imaginarse la aplicación entera, dependencia sobre dependencia, con tiempos de compilación ridículos para lo que debía hacer nuestra aplicación.

La razón por la cual se utilizaron tantos frameworks y librerías es que algunos implementaban features que otros no tenían, es decir, siempre se buscó la manera de complementar la falta de características o plugins de uno con el de otro, pero jamás les pasó por la cabeza la solución mas cercana, obvia y al final del día razón para la cual nos habían contratado: programarlo nosotros mismos.

Hay quienes podrán criticarme y mencionarme términos como DRY, KISS y otros principios de desarrollo y yo les digo: fuimos contratados para programar y resolver problemas.

Es decir, no somos una línea de ensamble, aunque existan empresas que claramente eso quieren y necesitan. Aun, particularmente en entornos donde no necesariamente se vive un ambiente de “maquila de software” se vive un frenesí casi absurdo de dependencia de terceros, donde si utilizamos algo hecho por nosotros esté probablemente mal, porque, ¿sábes? alguien más ya lo hizo en github, pero ¿lo has probado? No! pero no voy a complicarme…

Herramientas como nuget, composer, gems, npm y demás si bien nos han facilitado la vida también nos han vuelto holgazanes, esperando siempre que alguien más resuelva nuestros problemas.

A esta holgazanería la he bautizado como “El sindrome de está hecho aquí”, queda estrictamente prohibido utilizar nuestro código en primer plano de prioridad porque, somos tontos, inferiores y menos inteligentes que cualquier otro indivudo en github.

Las consecuencias de la co-dependencia absurda en tiempos modernos

¿Existen consecuencias de abusar del uso de estos componentes de terceros? Claro! De hecho, todos los extremos son malos, ustedes saben, el ying y el yang.

Una de las cosas que hacen más estables a sistemas como Linux es la filosofía UNIX: cada componente del sistema debe realizar una tarea específica, y realizarla bien. El problema es que que ya no vivimos en tiempos de UNIX cuando los hombres eran hombres, y los programadores programaban. La facilidad y encapsulación de los nuevos lenguajes de programación de muy alto nivel nos han vuelto maquinas ensambladoras y menos pensadores, cuando se desarrollaron la mayoría de las herramientas base de UNIX había otro pensamiento entre el mundo de los ingenieros.

Aun cuando consideramos que cada componente debe realizar una tarea específica y bien hecha y que seguramente quien realizó dicho componente puso empeño en realizarlo con altos estándares de calidad, existen problemas naturales derivados de que quien realizó dichos componentes sufre de un mal común: ser humano. Los humanos no somos perfectos y nos equivocamos así que es muy común que nuestro software contenga bugs o problemas con cada versión, es entendible y natural.

El problema real se asoma cuando, en la búsqueda de volvernos más productivos, nos volvemos consumidores enfermizos del trabajo de otros. Una de las razones por las que más se quejaban los usuarios de aplicaciones a finales de los 90’s y principios de los 2000’s, sobre todo en entornos de Microsoft Windows era la poca calidad y estabilidad de los productos. ¿Adivinen quienes eran los culpables?  DLL’s, librerías de terceros, componentes hechos fuera de casa. Mientras que el fabricante de dicho software esperaba ansiosamente una actualización de dicha librería para solucionar el problema, problema que naturalmente estaría fuera de sus manos resolver pues era código sobre el cual no tenía experiencia, ya habría pasado suficiente tiempo para que tanto el producto como el fabricante fueran tachados como mala calidad, chafa, chino, etc.

No mucho ha cambiado desde entonces ya que solo nos movimos a otras plataformas. He visto aplicaciones web “modernas” utilizar librerías de terceros de una manera abusiva, helpers de bases de datos que agregan megabytes y megabytes a nuestro build solo para realizar algunas pocas validaciones, 35 plugins de node para poder hacer funcionar un pequeño componente de UI en angular.

Tal como los programadores, en su momento, y aun en dias actuales, de C++ y otros lenguajes de mas bajo nivel no temen crear sus propias librerías, frameworks y utilizar componentes de terceros cuando es estrictamente necesario así quienes nos dedicamos a desarrollar aplicaciones web y otras plataformas no deberíamos temer aplicar nuestros conocimientos para crear software inteligente y no solo ensamblarlo, basado en código de otros, código que en cualquier momento puede fallar y del cual no solamente no tenemos el suficiente conocimiento para mantener sino además los recursos.

La colaboración es una de las cosas más extraordinarias que nos ha dado el Internet y las tecnologías distribuidas y hacen nuestro trabajo emocionante e interesante, pero también pensar como solucionar problemas propios y no temer a hacer lo que se supone sabemos hacer es una de las cosas más gratificantes que puede haber, aun cuando podamos pensar que alguien más lo hizo mejor que nosotros. Nunca debemos subestimarnos, pero sobre todo, nunca hay que dejar de sorprendernos a nosotros mismos con lo que podemos hacer individualmente o en un mismo equipo de trabajo.

Y es que colaborar no es un delito pero la mente humana está desarrollada para tomar las mejores decisiones si el sujeto u objetivo en cuestión es uno mismo, ¿Cómo podría siempre, alguien más, decidir la mejor manera de hacer algo?

Existe una anécdota extraída del libro Gabby: A story of courage and hope, de Gabrielle Giffords y Mark Kelly, este último, piloto de la NASA quien llevó varias veces el transbordador allá arriba y esposo de la primera, ex-congresista de EUA y quien recibió un disparo en la cabeza en Arizona hace unos años:

as the doctor described the massively invasive surgery his wife would require, Kelly thought back to the poor decision-making at NASA that had resulted in two fatal accidents. Post-Challenger and -Columbia, NASA set up a conference room to facilitate good decision-making. One wall bears the warning “None of us is as dumb as all of us.”

Determined not to let the medical team march off in lockstep, Kelly gathered all the doctors and residents in a small break room at the hospital. “At NASA, one thing I’ve learned is you can’t ask the space shuttle commander or the flight director or the chief engineer their opinion first. You’ve got to seek out the opinion of the junior people,” said Kelly. So he chose the youngest looking person in the room–an opthamology resident–and asked for her opinion on the injury and procedure. He then went around the room until everyone had had a chance to voice their views. Ultimately, the doctors performed the operation.

Tal como Kelly lo menciona, “None of us is as dumb as all of us” así que quizá, y solo quizá, si de vez en cuando individualizamos nuestro trabajo como ingenieros de una manera objetiva e independiente, de manera que, pensemos en la mejor opción para resolver nuestro propio problema y no el de todos los demás (o el de alguien más en particular) entonces podamos tener mejores resultados. La NASA tomó esta filosofía después de los desastres del columbia y el challenger, no veo porque nosotros como ingenieros en software no podamos aplicarla también… de vez en cuando.

Saludos.

Viernes 16 de enero de 2015

Gerónimo Orozco

Gerónimo Orozco
Patux's booring news

OpenStackGDL Meetup Enero 2015

Registrate


Jueves 15 de enero de 2015

Itzcoalt Alvarez Moreno

Itzcoalt Alvarez Moreno
Itzcoalt (itz) Álvarez

Buscando la Pasión

Recientemente y ante ciertos acontecimientos, me he puesto a pensar el papel que como padres tenemos en la elección de la carrera universitaria de nuestros hijos.

En teoría, la elección es de ellos, sin embargo, en muchas familias, la opinión de los padres o tal vez la tradición familiar los inclina hacia una profesión, padre contador, madre contadora, hijo contador, por mencionar un ejemplo.

Pero, me pregunto, ¿quiénes somos nosotros para definir o acaso influenciar en tan gran decisión a nuestros hijos?

Pues nadie, aun cuando nosotros paguemos la carrera, además, esta influencia puede ser perjudicial para ellos, porque, como siempre he mencionado, lo importante es que ellos encuentren la pasión que los alimente a seguir adelante, la pasión que les permita ser felices estudiando y haciendo lo que les gusta.

De nada sirve un Médico, que no ejerce, porque lo suyo es el baile clásico, se convierte en un mal médico, si es que alguna vez entra a ese mundo.

O peor aún, que tal si ellos no desean una educación universitaria, o si a lo que desean dedicarse no está basado en una licenciatura.

Finalmente es la decisión de ellos, y debemos respetarla, no obligarlos a hacer algo que no quieren.

Lo que si es importante, es ayudarles a encontrar su pasión, algunos lo hacen pronto, otros por desgracia nunca la encuentran y vagan de un oficio a otro.

Domingo 11 de enero de 2015

Farid Bielma

Oportunidades de la Reforma Energética para ingenieros

Recientemente, para un grupo de trabajo de la carrera de ingeniería industrial del Tecnológico de Monterrey, me hacían la pregunta: para ti, que ventajas trae la reforma energética que podamos aprovechar? Es oportuno mencionar, que por definición, costumbre o necesidad, egresados de esta ingeniería se especializan en temas de gestión de la calidad, sin embargo, con la reforma, existen un mundo que oportunidades que podrían aprovechar.

Enumero una lista de áreas de trabajo a los qué egresados de ingenierías podrían especializarse:

- Identificando o creando necesidades en el mercado
- Analizando la cadena de suministro y creando las oportunidades para optimizar algún proceso
- Diseñando y mejorando métodos de trabajo y resolviendo fallas de mercado
- Simular procesos de extracción
- Ayudando a detectar áreas de mejora para la incorporación de tecnología en la producción
- Participación en concursos públicos y/o privados: licitaciones