¿Cómo salir adelante?

O debería decir “Cómo salir” y ya.

En general, la decisión de emprender es complicada para muchos y ese camino está sembrado de sueños y desesperanzas. En lo particular, creo que el principal obstaculo es la inseguridad que tiene cada quién.

Para mi, esta inseguridad es un mostro de 3 cabezas:

gigante

La limitante personal que uno se repite es que no tiene las habilidades suficientes para continuar. A veces esto se esconde detrás de la mentira blanca de “voy a hacer un curso que me permita agarrar un mejor trabajo” pero la verdad es que muchas veces se aprende más metido en la candela que sentadito en la biblioteca.

La limitante temporal es que a veces el tiempo no alcanza para hacer lo que quieres. La verdad es que al día dedico mucho tiempo a cosas como preparar la comida, jugar con el cel, o simplemente no sé en qué se va el día.

La limitante de la experiencia va de que teniendo el tiempo y las habilidades, nos congelamos cuando vemos a la competencia, e imaginamos el tamaño de sus problemas, y el tamaño de sus soluciones, y nos achicamos al tamaño de no hacer nada.

Matando mostros.

starshiptroopers.jpg

Las limitantes personales son tan dificiles de superar como las limitantes externas. Y acá voy a dejar mi granito de arena:

Dedicar una hora al día a un proyecto luego de un año, equivale a 15 días trabajando sin parar, sin dormir. O siendo más realistas, a dos meses de trabajo de 8 horas, de lunes a viernes.

La constancia en el tiempo da frutos pero no está garantizado. No todo el mundo que trabaja arduamente es exitoso. Pero la suerte sí le sonrie al que la enamora.

Prueba una idea a la vez, y dale tiempo para madurar. Si le dedicas a cada idea 2 años, en los próximos 40 años vas a poder desarrollar 20 ideas completamente. Y habrás crecido con ellas. Que cada oportunidad te permita aprender y te deje dinero para ayudar a la idea siguiente.

Aprende en el camino y come las verdes. Una hora al día los próximos 2 años, o hasta que termines. Lo que pase primero.

t vs z.jpg

Anuncios

Aprendiendo Sass: Mixins

Sigo peleando. No he terminado el primer set de vídeos y eso me trae un poco cabezon. El curso de sass dice que es de tres horas, y ya llevo tres días y todavía no termino.

Mixins

Problema que resuelven: reutilización de código de CSS. Paul Graham en su libro Hackers Vs. Painters defiende que si tienes que copiar y pegar código dentro de tu aplicación, entonces estás programando mal. Kevlin Henney también respalda esta idea.

Al comienzo los mixins recuerdan un poco a las macros de C; pedazos de código que se agrupan con un identificador. Luego, cada vez que vas a usar ese segmento de código, en vez llamas a la macro.

La principal diferencia entre las macros y las funciones es que las primeras son preprocesadas, y las segundas son compiladas. Entonces un mixin es más parecido a una macro que a una función.

Uso de un mixin

En la página oficial de Sass hacen un comentario interesante de los mixins, y es que en CSS3 hay que definir propiedades con prefijos de cada navegador (vendor prefixes)

@mixin border-radius($radius : 15px) {
  -webkit-border-radius: $radius;
     -moz-border-radius: $radius;
      -ms-border-radius: $radius;
          border-radius: $radius;
}

Y para estos casos es útil la herramienta. El llamado se realiza mediante la directiva @include:

.box { @include border-radius(10px); }

Nota que la definición original tiene un argumento $radius, y que en el llamado al mixin se pasa un valor de 10px. Si no se pasa ningun argumento en el llamado de border-radius, entonces el valor por defecto de radius es de 15px.

Y básicamente esto es todo amigos.

Aprendiendo Sass: @, $, ; o nada?

Comencé un curso de SMACSS en teamtreehouse.com con @guilh y hasta ahora la cosa pinta muy bien.

El primer ejercicio con el que me encuentro (y sin saber nada de Sass) es este:

$font-url :"https://fonts.googleapis.com/css?family=Roboto";
@if variable-exists(font-url){
 @import url($font-url)
}

y veo que para $ hay una estructura, pero no entiendo muy bien de qué va

  • $ se usa para decir acá hay una variable
  • Pero en la línea 3 también se usa para llamar a la variable
  • Aunque en la línea 2 no se usa,  porque se quiere saber si el nombre existe.

Ok, acá entiendo. Valor ($) Vs. Referencia (sin el $)

Peeero… el @:

  • hay funciones como el if, y el import que lo requieren,
  • Pero otras funciones como el url y el variable-exists no lo requieren

Bono: ¿Porqué si se supone que es sass, tuve que poner el punto y coma luego de la definición de la línea 1? Será algo del teamtreehouse?

Despues preguntan que porqué prefiero CSS y JS vanilla… #devrant

Swift del BCP para transferencias internacionales

Sigo en la línea de “Problemas al trabajar remoto”.

Para recibir transferencias desde el extranjero en el BCP del Perú es necesario proveer al depositante de:

  • Nombre del banco (BCP)
  • Tu nombre (Tu nombre)
  • Dirección del banco (Av. Aviación 2431, San Borja 15037, Lima, Perú)
  • Teléfono del banco ( (01) 6258080)
  • Número de cuenta de quién recibe (Hace falta abrir una cuenta en $ en el BCP, y es el número que comienza por 193, no el CCI)
  • Y lo más importante acá fue el swift, que tecnicamente es BCPLPEPL, pero hubo un problema con esto, y al llamar al número del banco le dijeron a la persona que me deposita que el swift correcto es BCPLPEPLXXX con esas XXX de película de adultos al final.

Espero que esta info te sea útil.

Trabajar remoto: ¿Cómo cobrar?

Así que conseguí una oportunidad de trabajo remoto para una empresa de distribución de equipos de impresión y bueno, tras un mes de trabajo ellos amablemente me solicitan que les facture mis servicios…

Que les facture… mis… servicios(?)

Nunca había facturado servicios profesionales, lo más que había hecho era dar mi número de cuenta bancaria a un amigo para cobrar alguna “segunda”, pero siempre había sido algo informal.

Esto debería ser un blog acerca de Google Docs y Google Spreadsheets, porque siempre termino usando esas herramientas 🙂 Bueno, resulta que en la sección de plantillas hay dos que son muy útiles a la hora de cobrar:

templates

Y esas dos plantillas que están ahí, la de Invoice, y la de Weekly time sheet (Imagino que se traducen “Factura” y “carga horaria semanal”, respectivamente) son formas de encaminarse rápido porque es sólo rellenar los campos vacíos… ¿o no?

No tanto. En inglés hay algunos términos con los que no estoy familiarizado a la hora de cobrar.

templates

Lo primero es que la factura tiene dos fechas, la de emisión (Submitted on) y en la fecha que esperas que te paguen (Due date). No sé si es “etiqueta” de las facturas en USA o en todas partes del mundo que a veces tienen un campo llamado “Payment Terms” que significa la ventana de tiempo que tiene el cliente desde que recibe la factura para pagarte. En esta página hay un diccionario de términos comunes de Due Dates

La otra herramienta útil para facturar es la justificación detallada de las tareas, a mi parecer es algo importante y de buena educación ya que el cliente entiende que no está lanzando su dinero al vacío contigo. Por eso llevo un registro a mano de las tareas que voy ejecutando. Qué correos mando, qué clientes atiendo, las visitas que realizo y todo intento detallarlo con fecha

hojas

Y a la hora de comunicársela al cliente, redacto en una versión modificada de esa tabla de Google. La modificación viene porque no llevo cuenta (todavía) de cuánto tiempo dedico a cada tarea aunque sí estoy incorporando el hábito de contar en pomodoros cuánto tiempo me toma hacer una actividad.

Y el formato de las celdas es muy parecido, sólo que en vez de poner tarea, y tiempo organizado por día, digo que mi tabla es un resumen de todo el mes, y en la columna izquierda pongo el nombre del cliente o proyecto que atendí, y en la columna derecha los detalles de las actividades realizadas.

templates

Hacer un resumen de un mes es un trabajo que toma bastante tiempo, pensé que era cosa de una hora, y la verdad es que estuve cerca de 4 horas, entre hacer eso, y ayudar a un cliente con un caso.

Así que no era imposible trabajar remoto. Y bueno, espero que esto le ayude a alguien a poder organizar su flujo de trabajo.

Librerías ESC/POS de C++ en WPF .NET 4.5

Estoy desarrollando un demo de ESC/POS utilizando una librería vieja que conseguí. La ventaja de la librería es que ya tiene muchos métodos como el de corte de papel, efectos de texto, y que permite utilizar diferentes medios de comunicación (USB, Com y Ethernet) y que proveen de un demo en Visual Studio para .Net 2.0.

Mi problema particular es que estoy desarrollando en WPF, para lo que necesito un framework más actualizado. Intenté con .Net 3.5, pero dependía de System.Windows.Controls.Grid, y me daba un error de que grids no estaba implementado en esa versión del framework (?) aunque la documentación dice que sí.

pinvoque.png

Y la verdad es que el problema original era algo relacionado con las signature de las funciones de las funciones, y de la manera cómo pinvoque las estaba utilizando. Una búsqueda en google del error (pinvoque imbalance) arrojó apenas 2500 resultados.

Como siempre, StackOverflow salió al rescate, y ofreció una sugerencia. Al parecer el método de llamado (Pinvoque?) de las funciones cambió la manera que operaba a partir de VS2010, por lo que es necesario incluir CallingConvention = CallingConvention.Cdeclcomo uno de los argumentos de DllImport().

En total llegar a esta solución del Pinvoque me tomó un sábado, y por eso estoy escribiendo esta entrada. Espero que al menos sirva para empujar más arriba la entrada de stackoverflow en los motores de búsqueda xD

Mi problema fue que había tocado mucho el código y cuando por fin di con la solución, igual me estaba arrojando otros problemas. Tuve que iniciar con otro proyecto desde cero, e ir probando ideas de una a la vez.

Espero que esto le sirva a alguien.

Primer día de la semana en Google Spreadsheets.

Hace un par de semanas comencé a llevar un registro de las horas que dedico al día a las actividades de trabajo. Lo he estado haciendo de la manera más eficiente que puedo, en lápiz y papel, pero hoy que he querido redactar un correo con la lista cosas que he hecho y me di cuenta de que hubiera sido mejor llevar un registro digital, para no tener que redactar doble, porque soy así de “flojo”.

Excel… Google Spreadsheets… ¿Cuál era la diferencia?

Conseguí en la documentación oficial de google la formula de weeknum que la utilicé así en una celda para el inicio de la semana:

=TODAY()-WEEKDAY(TODAY(),1)+1

Que se interpreta así:

  • Today() es hoy.
  • weekday(FECHA, argumento) es qué día de la semana es hoy. Por ejemplo, domingo es 1, lunes es 2.
  • Argumento vale 1 si la semana comienza en domingo, y vale 2 si la semana comienza en lunes. Si la semana comienza un martes… Ya va, ¿qué semana comienza un martes? Deja las drogas… pero si la semana comienza un martes, el argumento vale 3…

Entonces la formula se lee realmente:
=La fecha de hoy – El número del día de la semana que es hoy +1

Ese +1 es un ajuste debido a que hoy ya está transcurriendo, y hay que tenerlo en cuenta en la formula.

Al final, la hoja de trabajo está colgada en este link