2015

miércoles, 25 de febrero de 2015

Otra forma de entender recursividad en programación


Un amigo me comentó que jamás entendió recursividad y después de hacerlo sufrir un poco, (como todo buen amigo jeje), le expliqué recursividad a mi manera. Lo primero que le dije fue, - la recursividad es un bucle while desglosado, con la diferencia de que en recursividad regresamos un valor que podría ser utilizado o asignado.- Continua leyendo para que conozcas el porqué.
Nota: Los ejemplos estan realizados en c.
"Se denomina llamada recursiva (o recursividad), a aquellas funciones que en su algoritmo, hacen referencia a sí misma." (Python para principiantes)
Imagina que tenemos que imprimir un texto tres veces con un ciclo while, un ejemplo de esto sería:
int main(void){
    num=3;
    while(num>=1){
        printf("Hola Mundo!!");
        num--;
    }
    return 0;
}
Si esto lo pasamos a una función recursiva quedaría así:
int imprime(int num){
    if ( num>=1 ){
        printf("Hola Mundo!!");        
        return imprime(num-1);
} else {
        return 0;
    }
}

int main(void) {

    imprime(3);
    return 0;
}
Empecemos viendo las similitudes mientras vamos corriendo el código mentalmente:
  • Al momento de llamar la función le pasamos el valor de 3, así que la variable num en la función imprime tendrá el valor de tres, igual que en el ejemplo del while.
  • Después se comprueba que la variable num sea mayor a 1 en ambos ejemplos, (aquí entra el ciclo while o el primer if y se imprime por primera vez el texto Hola Mundo). 
  • En el while se le resta uno a la variable num y empieza nuevamente el ciclo. En la función recursiva se vuelve a llamar a la función imprime, pasando el resultado de la resta (num-1). Por el momento no le pongas atención al return, eso lo explicaré más adelante.
  • Nuestra variable num=2, el proceso de comprobación sucede de nuevo, se imprime por segunda vez el texto y se resta nuevamente el valor de uno a la variable num. Esto sucede una vez mas hasta que el valor de la variable num es menor que uno.
Hasta aqui no creo que exista ningún problema, si es así te invito a comentarlo.

Si has notado, el texto se imprime tres veces, el ciclo while debe de terminar en la siguiente comprobación y el if en la función recursiva ya no es verdadera. Hasta este punto la función ha sido llamada cuatro veces y tenemos pendiente el retorno del valor. En este caso, el valor de cero se regresará sin ser utilizado ni asignado. Por ejemplo, si modificamos el código anterior para imprimir el valor que regresa nuestra función el resultado sería.
Hola mundo
Hola mundo
Hola mundo
0
Para explicar el return utilizaré un ejemplo muy utilizado en la enseñanza de las funciones recursivas, que es la obtención del factorial.
#include <stdio.h>
int factorial(int num){
    if (num > 1){
        return num*factorial(num-1);
    } else {
        return 1;
    }
}

int main (void){

    printf("%d\n",factorial(5));
    return 0;
}
Imagina que cuando se llama la función factorial se crea un recuadro, y cada vez que la función factorial se llama a sí misma se crea un nuevo recuadro dentro del anterior. La función deja de llamarse a sí misma hasta que llega la variable num al valor de uno, regresando ese valor.

Cuando se inicia el retorno de los valores, se realizan las operaciones pendientes en el returns anteriores. Tal vez una imagen ayude a entenderlo un poco más.

animación recursividad garpillo


Es muy importante tener en cuenta que siempre que podamos evitar las funciones recursivas será mejor (ocupa menos memoria de ram y se ejecuta más rápidamente). Pero hay casos donde el usar de recursividad hace mucho más sencillo el desarrollo de un algoritmo.

miércoles, 11 de febrero de 2015

Configurar msmtp para enviar correos desde consola en Linux




Msmtp es un cliente de SMTP muy simple, personalizable y fácil de usar. Podemos enviar correos desde la terminal utilizando una cuenta de correo existente. Puedes configurar el servidor que tu quieras, yo te muestro tres. Hotmail, Gmail y Yahoo.

Para poder utilizarlo debemos instalarlo utilizando el gestor de descargas de nuestra distribución, además necesitamos instalar ca-certificates, sin el, los servidores no nos permitirán conectarnos.
sudo pacman -S msmtp ca-certificates
Una vez instalado creamos el archivo ~/.msmtprc y agregamos lo siguiente.

 nano ~/.msmtprc
 ~/.msmtprc

defaults tls on tls_starttls on tls_trust_file /etc/ssl/certs/ca-certificates.crt logfile ~/.msmtp.log # Gmail account gmail host smtp.gmail.com port 587 auth on from usuario@gmail.com user usuario password lacontraseña # Hotmail account hotmail host smtp.live.com port 587 auth on user usuario@hotmail.com password lacontraseña from usuario@hotmail.com # Yahoo account yahoo host smtp.mail.yahoo.com port 587 auth on user usuario@yahoo.com password lacontraseña from usuario@yahoo.com # Set a deafault account account default : gmail
Remplaza los valores usuario y lacontraseña por los tuyos.
Debemos tener permiso de lectura y escritura sobre el archivo:
chmod 600 ~/.msmtprc
Y probamos:

echo "Estoy enviando un correo desde consola con msmtp" | msmtp -a default usuario@dominio.com
El correo se enviará con la cuenta que tengamos definida en account default en nuestro archivo msmtprc o podemos cambiar en el comando anterior la opción default por hotmail, yahoo o gmail. Debes de cambiar usuario@dominio.com por la dirección del usuario al que le enviarás el correo, (por ejemplo la tuya).

Utilizando Gnu PG

Nunca está de más la seguridad, para eso nos podemos apoyar en Gnu PG (GPG) y evitar guardar la contraseña en texto plano, aunque podemos utilizar cualquier otra herramienta de cifrado. Al utilizar passwordeval podemos lanzar un programa externo. Encriptando:
 echo -e "lacontraseña\n" | gpg --encrypt -o .msmtp-gmail.gpg
Y en nuestro archivo de configuración cambiamos password por passwordeval y su valor de esta manera:
 passwordeval    "gpg --quiet --for-your-eyes-only --decrypt ~/.msmtp-gmail.pgp"

jueves, 5 de febrero de 2015

Cambiar iconos de Oblogout


oblogout final garpillo


Oblogout es un script configurable para la escritura de cierre de sesión que presenta una interfaz gráfica (es decir, botones) para cancelar, cerrar sesión, reiniciar, apagar, suspender, hibernar, y bloquear la pantalla. Es usado principalmente por los usuarios de openbox.

Para cambiar los iconos podemos buscar algunos temas en devianart o en google, aunque si no encuentras alguno que te guste puedes buscar imágenes y hacer tus combinaciones. (El tamaño de las imágenes en la captura de pantalla es de 64x64).


Si creamos nuestro tema tenemos que nombrar cada imagen con su respectiva acción, es decir, si el botón lo queremos para reiniciar su nombre será restart, si es para apagar shutdown, etc.

Las imágenes las guardamos dentro de una carpeta llamada oblogout, ésta carpeta a la vez la guardamos en otra con el nombre que tu quieras prefieras. Esto es importante ya que si no se hace de esta manera oblogout no la tomará en cuenta.


Después copiaremos la carpeta de nuestro tema a themes, en mi caso el nombre de los iconos que uso son Moka-Minimal.
sudo cp -r  ~/Moka-Minimal /usr/share/themes/

Para terminar tenemos que editar el archivo /etc/oblogput.conf con nuestro editor favorito.
sudo vi /etc/oblogout.conf

En ese archivo buscamos donde dice:
buttontheme = oxygen

y lo modifican por el nombre de de su tema
buttontheme = Moka-Minimal

Guardamos y con esto ya deben de tener los nuevos iconos.

Extra

Si tu quieres modificar el orden o eliminar alguna de las opciones que muestra oblogout, puedes hacerlo en el mismo archivo, busca

buttons = cancel, logout, restart, shutdown, suspend, hibernate, lock
si eliminas alguna opción, ésta ya no se mostrará, el orden de las opciones puede modificarse también en esta propiedad.

miércoles, 28 de enero de 2015

Alternativas para Evernote en Linux




Evernote es una aplicación que nos permite anotar todo lo que necesitamos, lo puedes utilizar para tomar notas para un trabajo de la universidad o guardar algo que te llamó la atención en una página de Internet. Evernote te permite la creación de un planning de trabajo, es óptimo para un brainstorming, está preparado para guardar texto, imagen, vídeo y portales Web de referencia, reconoce la escritura y los textos inmersos en imágenes…

Esta aplicación es muy útil y sencilla, desafortunadamente los creadores no tienen ningún plan de lanzar un cliente de Evernote para Linux. Existen varias alternativas que se sincronizan con Evernote y otras que no. Continua leyendo y descubre alternativas que puedes usar en Linux.

Antes de iniciar es bueno comentar que si bien no existe un cliente de Evernote para Linux, podemos utilizar la interfaz web de la aplicación, que nos permite la gestión de nuestras notas y libretas, así como la opciones de uso compartido que permiten colaborar a nuestros amigos de una manera muy simple.


Everpad

Everpad es un cliente no oficial de Evernote. Utilizando Everpad, puedes encontrar rápidamente y editar tus notas, compartir contenido con amigos y administrar tu cuenta de Evernote. Everpad incluso incluye un menú desplegable con todas tus notas recientes - una característica que incluso el cliente oficial no ofrece.


NixNote

Anteriormente conocido como NeverNote, NixNote es un cliente de Evernote código abierto que ofrece un acceso total Evernote para los usuarios de Linux. Este poderoso cliente sincroniza automáticamente con tu cuenta de Evernote utilizando la API del servicio, haciendo sencilla la gestión de la nota.

NixNote destacan de los otros clientes de Evernote por sus grandes características de seguridad. Con el fin de proteger la privacidad de los blocs de notas, puede cifrar la base de datos a nivel local y evitar que los forasteros tengan acceso a sus archivos.

Springseed

Esta aplicación es una gran alternativa para tener nuestras notasy fue construida por usuarios de Linux. Springseed copia exactamente la funcionalidad de Evernote con una interfaz simple y ordenada. Aunque no se sincroniza con Evernote, su función de integración con Dropbox hace atractivo su uso y ayuda a que puedas acceder a tus notas en todos tus dispositivos.

RedNotebook

Esta genial aplicación es una combinación entre un libro de notas y un calendario, con funciones como guardar enlaces, imágenes, archivos, y más a su portátil.
Incluso puede exportar sus datos en formatos PDF o texto plano para distribuir, imprimir o compartir con amigos.

RedNotebook realiza copias de seguridad a un archivo ZIP locales, que le da una excelente seguridad y fácil acceso a sus datos. Es una buena alternativa a Evernote para personas interesadas en tomar notas, la planificación de los días, y la organización.

Geeknote

Para el verdadero gurú de código abierto, es difícil no recomendar Geeknote. Este poderoso cliente de consola para Evernote funciona desde la línea de comandos, con toda la funcionalidad ofrecida por el cliente Evernote.

Si bien su interfaz es inadecuado para los principiantes, Geeknote es un divertido cliente para Evernote para gurús de código abierto. Diseñado para la administración del sistema, es, sin duda, el la elección de cliente Evernote para la gente apasionada por la tecnología.

Si tu conoces alguna otra me gustaría conocerla, agregala a un comentario. También te recomiendo que leas las opciones que hay para Sincronizar Linux con la nube.

lunes, 19 de enero de 2015

Evita los iconos al instalar en Android




Una de las funciones de Android que intenta darnos comodidad, es, agregar un icono a la pantalla principal del dispositivo cuando instalamos una aplicación, esto para no tener que buscarla en el menú. Si no te gusta tener iconos en la pantalla de inicio o no quieres que te agregue el icono de la aplicación recién instalada, ya que no es algo muy comodo estar eliminando cada que se instala una aplicación, continúa leyendo.

La función se encuentra en las opciones de la aplicación Google Play Store. Ingresamos a la aplicación presionamos en las tres líneas paralelas que se encuentran en la esquina superior izquierda. Buscamos la opción ajustes y desactivados la casilla que dice Añadir icono a pantalla de inicio

Una ves desactivada la casilla puedes salir de Google Play Store sin necesidad de presionar algún botón de guardar cambios o algo así. Con esto queda configurado el dispositivo Android y la próxima ocasión que instales una aplicación no volverá a agregar el icono a la pantalla de inicio.

miércoles, 14 de enero de 2015

Configurando Tint2 como dock




gonzalotorres-tint2


Siempre me ha gustado tener mi entorno gráfico personalizado, una de las cosas que me faltaba agregarle era un dock. Después de probar algunos docks, recordé que tint2 es bastante personalizable así que me dí la tarea de agregar una barra extra y configurarla como un dock.

Nota: Se debe tener instalado tint2-svn.

Agregando segundo panel

Si ya tenemos configurado un panel a nuestro gusto y queremos agregar un segundo panel como un dock, debemos hacer una copia de nuestro archivo tint2rc
$ cp ~/.config/tint2/tint2rc  ~/.config/tint2/tint2rc2
y empezamos a configurar...

Configurando un panel como dock

Para modificar la configuración de tint2 utilizaremos nuestro editor de texto favorito y modificaremos el archivo tint2rc.
$ vi ~/.config/tint2/tint2rc2
Dentro del archivo, en la parte de #Panel, podemos modificar la posición en la que se encontrará nuestro panel, bottom, top, right, left, puedes combinarlos para localizar la barra en donde la desees. Además de su orientación (vertical, horizontal). En mi caso la configure abajo, centrada y con orientación horizontal.



panel_position = bottom center horizontal



También podemos modificar los elementos que aparecerán en el panel, en este caso solo dejaremos la L ya que solo queremos que muestre los Launchers o Lanzador de aplicaciones. Si no encuentras la linea, agregala en la sección.


panel_items = L


Puedes agregar otros elementos aquí si así lo deseas. Esto es lo que significan las letras:

    L = Muestra Launcher (lanzador de aplicaciones)
    T =
Muestra la barra de tareas (muestra las aplicaciones abiertas)
    S =
Muestra Systray (muestra los iconos de red / sonidos / idioma / etc.)
    B =
Muestra el estado de la batería
    C = 
Muestra el reloj


Para modificar el tamaño de la barra y del icono buscamos la opción panel_size, el primer valor es para el tamaño de la barra, puede ser usado en forma de pixeles o en porcentaje del tamaño de la pantalla. El segundo valor es para el tamaño de los iconos.



panel_size = 15% 30

Hacer que el dock se oculte automáticamente

Esta es una de las opciones que para mi es indispensable en un dock. Para activar esta opción debemos de modificar autohide, (1 activado, 0 desactivado). En esta parte podemos configurar el tiempo que tarda en aparecer, el tiempo que se muestra, el área debajo de las ventanas que tint2 tomará cuando se oculta.


# Panel Autohide
autohide = 1
autohide_show_timeout = 0.3
autohide_hide_timeout = 2
autohide_height = 2
strut_policy = none


Agregar los lanzadores de aplicaciones

Para agregar los lanzadores tenemos que agregar la dirección de los archivos .desktop, los cuales básicamente, son los accesos directos a sus aplicaciones. Estos contienen la ubicación del lanzador, el icono y otra información. Los puedes encontrar en /usr/share/applications/
En mi caso eh agregado los siguientes:


launcher_item_app = /usr/share/applications/brackets.desktop
launcher_item_app = /usr/share/applications/Eclipse.desktop
launcher_item_app = /usr/share/applications/libreoffice-startcenter.desktop
launcher_item_app = /usr/share/applications/vmware-player.desktop
launcher_item_app = /usr/share/applications/firefox.desktop

  
Los archivos .desktop  son creados al instalar el programa, pero no siempre es así, en esas ocasiones debemos de crear nuestro propio archivo .desktop.

 $ sudo vi /usr/share/applications/Nombre_Aplicación.desktop

Copiamos y pegamos lo siguiente:


Encoding=UTF-8
Name=
Exec=
Icon=
Type=Application
Categories=


Lo llenaremos con los datos de la aplicación que queremos agregar, en este caso utilizaré el programa brackets como ejemplo...

Name=Brackets   <-- Nombre de la aplicación
Exec= /opt/brackets/brackets   <-- Donde se encuentra el ejecutable
Icon= /usr/share/icons/Moka-Minimal/48x48/apps/brackets.png  <-- Icono a mostrar, agregué ese paquete de iconos pero puedes usar Adwaita (/usr/shar/icons/Adawaita).
Type=Application   <-- Se deja como está
Categories=Development   <-- Agregamos una categoría


Hasta aquí ya tenemos configurado nuestro segundo panel como un dock, solo queda ejecutarlo:
tint2 -c ~/.config/tint2/tint2rc2 &
Nota: Recuerden que si quieren que se inicie desde el arranque deben de agregarlo a su archivo de inicio. (~/.config/openbox/autostart).

Si quieren visualizar las modificaciones que van realizando, pueden crear un archivo llamado tint2restart.


$ sudo vi /usr/bin/tint2restart

Agrega lo siguiente:

if [ "$(pidof tint2)" ]; then
    killall tint2 && sleep 1s && tint2 && tint2 -c /home/usuario/.config/tint2/tint2rc2 &
    exit 0
else
    tint2 && tint2 -c /home/usuario/.config/tint2/tint2rc2 &
    exit 0
fi


Guarda el archivo, y cada vez que modifiques algo en tint2rc2 y quieres ver el cambio puedes utilizar el comando tint2restart. Recuerda cambiar usuario por el nombre de tu usuario.

Les agrego la configuración de mi dock. Aquí.


domingo, 4 de enero de 2015

Cambio de propietario de una carpeta




Tarde o temprano como usuario recurrente de GNU-Linux nos enfrentamos con la necesidad de cambiar los permisos de algún archivo. Hoy te voy a  platicar sobre comandos chmod, chown y chgrp que nos permiten modificar permisos. Recuerda hacer uso responsable de éstos.

Hay una lista de letras que especifica a quién se le está otorgando permisos.

u - Usuario
g - Grupo
o - Todos los usuarios

 Permisos

Las letras que se usan para  especificar el tipo de permiso son los siguientes.

r - Permiso de lectura.
w - Permiso de escritura o eliminar el archivo.
x - Permiso para ejecutar el archivo, o, en el caso de ser un directorio buscarlo.

Podemos usar el comando ls -l para ver la configuración actual de los permisos en el directorio que nos encontramos.  

CHMOD : sirve para cambiar los permisos de un archivo o un directorio.

Podemos dar permisos en forma binaria

rwx = 111 en binario 7
rw-  = 110 en binario 6
r-x   = 101 en binario 5
r - -  = 001 en binario 4

Por ejemplo, si queremos que solo nosotros podamos ver y editar un archivo podemos usar el siguiente comando.

chmod 600 nombre_archivo


Valor Significado
777 (rwxrwxrwx) No hay restricciones en los permisos. Cualquier persona puede hacer cualquier cosa. Generalmente no es una configuración deseable.
755 (rwxr-xr-x) El propietario del archivo puede leer, escribir y ejecutar el archivo. Todos los demás pueden leer y ejecutar el archivo. Este ajuste es común para los programas que son utilizados por todos los usuarios. /p>
700 (rwx------) El propietario del archivo puede leer, escribir y ejecutar el archivo. Nadie más tiene ningún derecho. Esta configuración es útil para los programas que sólo el propietario puede utilizar y se deben mantener privada de los demás.
666 (rw-rw-rw-) Todos los usuarios pueden leer y escribir en el archivo.
644 (rw-r--r--) El propietario puede leer y escribir en un archivo, mientras que todos los demás sólo pueden leer el archivo. Una configuración común para archivos de datos que todo el mundo puede leer, pero sólo el propietario puede cambiar.
600 (rw-------) El propietario puede leer y escribir en un archivo. Todos los demás no tienen derechos. Una configuración común para archivos de datos que el propietario quiere mantener en privado.

  Permisos en directorios


El comando chmod también se puede utilizar para controlar los permisos de acceso para los directorios. En la mayoría de los aspectos, el régimen de permisos para los directorios funciona de la misma manera como lo hacen con los archivos. Sin embargo, el permiso de ejecución se utiliza de una manera diferente. Proporciona un control de acceso a la lista de archivos y otras cosas. Veamos algunos parámetros útiles para los directorios:


Value Meaning
777 (rwxrwxrwx) No hay restricciones en los permisos. Cualquier persona puede listar los archivos, crear nuevos archivos en el directorio y borrar archivos en el directorio. En general no es un buen ajuste.
755 (rwxr-xr-x)  El propietario del directorio tiene acceso completo. Todos los otros pueden enumerar el directorio, pero no pueden crear archivos ni borrarlos. Este ajuste es común para los directorios que desee compartir con otros usuarios.
700 (rwx------)  El propietario del directorio tiene acceso completo. Nadie más tiene ningún derecho. Esta configuración es útil para los directorios que sólo el propietario puede utilizar y debe mantenerse privada de los demás.
Tomado de: http://www.linuxcommand.org/lts0070.php 


Nos gustaría quitar el permiso de escritura para el grupo y otros en archivo1, y añadir escritura y permiso de ejecución para todos los usuarios en archivo2.

En lugar de tratar de averiguar cuáles son los nuevos permisos y hacen estos comandos:

    chmod go = rx archivo1
    chmod a = rwx archivo2


El comando chmod permite, literalmente, nos sumamos y restamos permisos de un conjunto existente mediante el uso de + o - en lugar de =.

Por lo tanto, podemos quitar el permiso de escritura del primer archivo para el grupo y otros con este comando:

    chmod go-w archivo1

... Y podemos añadir escritura y permiso de ejecución para el segundo archivo para todos los usuarios con:

    chmod a + wx archivo2


Si quieres prevenirte de modificar un archivo importante, simplemente quita el permiso de escritura en tu “archivo” con el comando chmod

chmod -w archivo.xt

si quieres hacer un script ejecutable, escribe

chmod +x tuScript
si quieres remover o agregar todos los atributos a la vez

chmod -rwx archivo $ chmod +rwx archivo


 CHOWN

CHOWN : Sirve para cambiar de dueño y el grupo del archivo.

Ejemplo:

chown garpillo archivo.txt

De esta manera el archivo ahora pertenece a garpillo.

Puede especificarse el nombre del nuevo usuario o el de un grupo, para indicar que es un grupo debe ponerse el signo ":" (sin las comillas) delante del nombre del grupo.

chown -R :users libros

Con esto la carpeta y todos los archivos dentro de la carpeta libros pertenece al grupo users.

Opciones típicas son:
-R establece el propietario de la carpeta y todo su contenido -c muestra un mensaje con los ficheros que han cambiado de propietario realmente -f no muestra mensajes de error -h establece el propietario de los enlaces simbólicos en vez de sobre lo que apuntan.


CHGRP


CHGRP : Para cambiar el grupo especificado a un cierto documento

Ejemplos:

chgrp marketing archivo.txt 

chgrp oracle /usr/databasepara cambiar el grupo especificado para un determinado directorio.

chgrp -R marketing /sales/2008para cambiar el grupo especificado para un determinado directorio recursivamente.

sábado, 3 de enero de 2015

Salir con un programador







Así que tienes atracción para este programador nerd que conociste en algún lugar y que ya estás soñando con salir con él / ella!

Bastante bien, pero no es fácil salir con un geek!

Aquí hay 5 cosas que usted debe saber antes de salir con un programador y los consejos vienen directamente de la boca del caballo.

1. No estamos aquí para arreglar su ordenador.

"Si eso es lo primero que se cruza por la mente,y luego abandonar. No hay nada más molesto que alguien que te pregunta por lo que es un programador, puede arreglar las computadoras? De hecho no nos gusta arreglar nuestras propias computadoras, nuestra solución para un equipo lento es para borrar la maldita cosa y volver a instalar todo ".


2. Si, pensamos que somos más inteligentes que tú.

"La industria de TI es muy competitivo.Los programadores son una moneda de diez centavos por docena, así que la única manera de destacar es ser el mejor y ser la persona más inteligente en la habitación. Google, Apple, Microsoft, entre otros, sólo contratan a los mejores y las personas más inteligentes que hay para crear la segunda mejor opción. Debido a la naturaleza competitiva de nuestro campo, tendemos a ser arrogantes y demostrar que estás equivocado y estamos en lo correcto. Además, una gran cantidad de programadores tienen maestría o doctorado ".


3. El trabajo está por encima de todo, incluso de ti.

"Nos apasiona nuestro trabajo y dar la milla extra para hacer las cosas y hacer que se vea bien. A veces nos olvidamos incluso comer o dormir para cumplir con los plazos. Cuando estamos absortos en el trabajo, estamos en nuestro pequeño mundo de burbujas, sobre todo durante el período de crisis. Así que si nos olvidamos de comer o dormir, no esperar que nosotros le llamaremos. Somos perfeccionistas límite OCD, por lo que gastamos nuestras horas de vigilia tratando de hacer nuestro proyecto lo más perfecto posible ".

  4. Nos encanta nuestros juguetes - gadgets.

"No se sorprenda si saltamos como un niño de 5 años de edad cuando vemos un nuevo gadget en la naturaleza. Por lo general es algo que hemos estado leyendo y esperábamos en los últimos 5 meses, por lo que es normal estar emocionado cuando lo vemos en la vida real."


5. Valemos la pena, su tiempo y esfuerzo.

"Consideramos que nuestro trabajo como una extensión de nuestra personalidad. Si nuestro trabajo es una extensión de nuestra personalidad, es probable, nuestras relaciones son las mismas, para mejor o para peor ".



Esta publicación trajo a mi mente algunos recuerdos e ideas pasadas. Realizado por el equipo de Free Access Point. Enlace original: Salir Con Un Programador.