Putty, Puttygen, Pageant, .ssh/authorized_keys, claves privadas, Linux y Windows #ssh

Guía pasar usar claves privadas con las herramientas “putty” de windows y ssh en el servidor.

En relación a este post: http://blog.cballesterosvelasco.es/2011/12/desarrollo-con-linux-desde-windows.html

Puttygen

El programa puttygen es un programa visual para windows que nos permite genera claves privadas y obtener de forma sencilla la cadena que tendremos que usar en el archivo .ssh/authorized_keys.

Al arrancar el programa veremos la siguiente ventana. Podemos generar una nueva clave privada o cargar una existente. Si no tenemos ninguna, pulsaremos el botón generar.

Leer más...

Desarrollo con Linux desde Windows : Introducción #windows #linux

He estado mucho tiempo desarrollando aplicaciones web Windows que iban a ejecutarse finalmente en un servidor Linux. Intentando que todas las librerías y programas que usaba estuviesen disponibles también en Windows y limitándome a las tecnologías disponibles en ambos sitios.

Hace ya algunos meses y ahora que en la actualidad tenemos a nuestra disposición montones de gigas de RAM de una  forma muy económica, vale la pena ponerse un Linux en un VirtualBox y desarrollar desde Windows haciendo uso de esa máquina virtual.

Antes tenías una carpeta en Windows y la compartía con el Linux en la máquina virtual. Ahora es al revés: tengo una carpeta en la máquina virtual, y la comparto via Samba con Windows. Desde Windows la monto con un enlace simbólico a una ruta UNC.

Aunque tengo un servidor Linux dedicado (Un Fedora), sigo sin estar especializado en administración de sistemas Linux y tengo mucho que aprender. Y aprovechando ese desconocimiento, voy a intentar escribir por aquí los problemas a los que me he enfrentado y cómo los he solucionado.

Así que a partir de ahora y de vez en cuando, iré escribiendo sobre los siguientes temas y algunos más:

  • Configurar VirtualBox e instalar un Fedora
  • Configurar el SSH y .ssh/authorized_keys para acceder a la máquina con putty o winscp de una forma rápida y cómoda
  • Configurar Samba, nginx, php o mono con FastCGI
  • Resolver problemas con Samba, con SELinux
  • Montar una ruta UNC en una carpeta local Windows
  • Configurar servicios MySQL o MongoDB

Leer más...

Filosofía de vida : Ser aire #filosofia

A lo largo de mi vida he ido reflexionando sobre cómo enfocar mi vida. Sobre qué principios seguir en ella. Y hace muchos años ya determiné esos principios míos.

En cada cambio importante en mi vida me he replanteado esos mismos principios. Ahora estoy en un periodo de transición. Pasé de “no estar trabajando” a trabajar por cuenta ajena, a hacerme autónomo y trabajar como autónomo y por cuenta ajena al mismo tiempo, a ahora, lanzarme de cabeza a la piscina y dedicarme íntegramente a mi trabajo como autónomo.

En este nuevo periodo estoy haciendo cosas que desconocía por completo; enfrentándome a problemas completamente nuevos y a tener un tipo de lectura completamente diferente al que solía tener con mis intereses de programador.

Los emprendedores y los autónomos en concreto tienen una forma muy distinta de ver la vida a la que pueda tener un programador. Pero en el fondo hay muchas cosas en común. Los emprendedores tratan a personas, mientras que los programadores trabajamos con máquinas predecibles. Ante este nuevo paradigma, la metodología que pudiese usar ya no sirve. ¿Tampoco me sirve mi filosofía de vida?
Me sigue sirviendo. Y es por eso que la he conservado todo este tiempo. Porque me ha permitido afaptarme a todos los periodos de mi vida. Quizá he tenido la suerte por familia y por entorno de haber adquirido esta filosofía de vida; pero estoy enormemente agradecido de no tener que torar por tierra algo tan básico como los principios, para poder aeguir adelante con mi vida satisfactoriamente.

Mi filosofía de vida se centra en la felicidad como objetivo a corto, medio y largo plazo. Y la forma de conseguirla mediante la superación personal y la capacidad de hacer felices a los demás y de crear entornos agradables. La gente rencorosa trata de encontrar esa felicidad intentando devolver lo que recibió. Eso puede dar satisfacción a algunas personas a corto plazo. Pero no lo hace ni a medio ni a largo plazo. Estar alegre, ser feliz e intentar hacer feliz a los que quiero, evitando hacer daño a las personas irrelevantes en mi vida. Obviamente, es imposible no errar por el camino y hacer daño a las personas. Pero saber pedir perdón a tiempo, rectificar e intentar reencauzar el camino hacen que no se convierta en un mal mayor.
La única forma de ser feliz es que otros te permitan serlo, así que esto es algo que debe hacer gran parte de la gente. Yo no soy creyente, pero sí comparto este principio con los cristianos.

Mi segundo principio que se ha mantenido inmutable pese a ser precisamente el que permitía algo de mutabilidad es el ser agua: adaptarme; no tener prejuicios y replantear cualquier cosa las veces que haga falta y en el momento que haga falta. Todo el mundo sigue en parte este principio en relación al instinto de supervivencia. Para poder vivir, tienes que adaptarte. Pero puedes conformarte con adaptarte lo mínimo, lo necesario, o ser parte del recipiente en el que estás, como hace cualquier líquido o gas.
Mi principio restringe esta adaptación, al máximo exponente. Ser un gas, que se adapta al recipiente en el que está, sin ser limitado por la gravedad como el agua. Y si puedes, que no te limite siquiera el propio recipiente. Adaptarse, e ir más allá de las expectativas. Más allá de lo que parece posible.

Mi tercer principio es el análisis para alvanzar la adaptabilidad y en última instancia la satisfacción personal y la parte de felicidad correspondiente.
Aquí es donde entra la pregunta que más hacen los niños y que erróneamente hacen tan poco los adultos: “¿Por qué?”.
Es una pregunta que me hago mucho junto a otra: “¿Si fuese posible, cómo sería posible?”
¿Qué es lo que marca la diferencia? ¿Qué es lo importante, el factor determinante en este asunto? ¿Por qué he perdido y otro ha ganado? ¿Qué cosas hacen los demás bien y yo mal? ¿Qué cosas tengo que aprender para conseguir mis objetivos?
Análisis, reflexión y conocimiento. Lectura y escritura de opiniones. Creatividad; ganas de superación.
Disfrutar tanto del trayecto como de la satisfacción de llegar al camino.
Las personas necesitamos cubrir ciertos aspectos en nuestras vidas para ser felices. El cultivo personal, las relaciones sociales, el cultivo del cuerpo y de la menta, la diversión… Hay que cuidar los aspectos más importantes de nuestra vida, y vivir cada día como si fuese el último, pero trabajando para que si no lo fuese, pudieses seguir manteniendo la plenitud al día siguiente, y al siguiente del siguiente.

Leer más...

Planificación de posts

Desde que empecé este Blog en concreto, y todos estos años de blogging en general, había deseado poder tener una cierta constancia a la hora de escribir. El tiempo me ha hecho ver que encontrar una constancia diaria para escribir, con mi ritmo actual es prácticamente imposible. Habrá gente en concreto que encuentre un ratito a diario para escribir. Yo con dos trabajos, novia, y otros tantos compromisos, lo veo imposible.

Y con ese pensamiento en mente he intentado encontrar una solución que encaje. Al principio no se me ocurría ninguna, pero tras darle vueltas en varias ocasiones, he visto que era mucho más sencillo de lo que pensaba. Y es sobre lo que quería hablar en este post.

Conseguir un compromiso diario es imposible. Semanal quizá tampoco sea posible. Pero un compromiso mensual sí que es posible. Y por compromiso mensual me refiero no a escribir un post al mes. Sino a escribir y planificar una serie de posts a lo largo de un periodo.

Vale que no pueda ni todos, ni cada dos días escribir un post, pero sí que puedo escribir 3 posts una vez a la semana y planificarlos para que se publiquen a lo largo de ese lapso de tiempo. Blogger permite planificar la publicación de posts. Y aunque esté escribiendo este post desde el móvil mientras espero para pasar la itv, puedo hacer que este texto de publique mañana, aunque no tenga tiempo ni para pulsar un botón o recursos mentales para acordame de hacerlo. Además hay servicios que permiten autopublicar entradas de blog en twitter, facebook y/o google+ automáticamente tras la publicación. Y puedo enterarme de las reacciones sociales directamente en mi móvil, sin tener que estar pendiente de ellas.

Y eso es todo por ahora. Quería compartir este pensamiento. He visto que no soy el único con este problema y creo que lo que comento es una solución bastante aceptable.

Por mi parte voy a intentar escribir una semanalmente, tres posts cuyas planificaciones se harán a lo largo de la semana siguiente.

¡Hasta el jueves!

Leer más...

C# : Enteros Big/Little Endian usando struct + implicit operator

Cuando se trata de trabajar con datos binarios C/C++ o D se llevan la palma. La cercanía del lenguaje a los punteros y a estructuras con una correspondencia directa de cada campo con un offset en memoria con respecto al inicio de la estructura, facilita mucho el trabajo.

En C# y haciendo uso de la palabra clave reservada unsafe + fixed, podemos hacer uso de punteros e incluso punteros a estructuras siempre y cuando las estructuras contengan únicamente valores primitivos u otras estructuras que cumplan la misma condición. Poder mapear un array de bytes o un puntero a una estructura y poderla modificar insitu sin tener que extraer cada valor y volverlo a insertar luego individualmente, facilita infinitamente el trabajo con estructuras y datos binarios.

Recientemente me he tenido que enfrentar al problema de trabajar con datos binarios que contenían valores Big Endian y en algunos casos mezclados con otros campos Little Endian. ¿Cómo hacer esto de una forma sencilla?

La gente comenta por ahí que usando BitConverter, o en mi caso BitUtils. O incluso algunas personas lo hacen “a manopla” a base de desplazamiento de bits.

Pues bien, yo tengo una alternativa mucho mejor que nos permitirá tener estructuras/campos/variables o parámetros con campos BigEndian y trabajar con ellos de forma completamente transparente. Aunque la utilidad real es en serialización/deserialización y mapeo de memoria con punteros.

Esto lo podemos lograr creando una estructura que contenga un único entero de la longitud deseada, privado y haciendo uso del implicit operator:

Por ejemplo para un entero de 32 bits:

public struct uint_be  
{  
 private uint _InternalValue;  

 public uint NativeValue  
 {  
  set  
  {  
   _InternalValue = MathUtils.ByteSwap(value);  
  }  
  get  
  {  
   return MathUtils.ByteSwap(_InternalValue);  
  }  
 }  

 public static implicit operator uint(uint_be that)  
 {  
  return that.NativeValue;  
 }  

 public static implicit operator uint_be(uint that)  
 {  
  return new uint_be()  
  {  
   NativeValue = that,  
  };  
 }  
}

A partir de ese momento podremos usar el tipo uint_be como si fuese un entero cualquiera. Se hará un casteo automático con el tipo uint. El campo en memoria estará como big endian, mientras que la propiedad y los casts implícitos trabajarán con un entero little endian. Esta estructura solo sirve para plataformas little endian. Convendría detectar el endian de la plataforma actual y hacer un ByteSwap si es un little endian o no hacer nada si ya es big endian.

Leer más...

Suscribirse via RSS