¿Cómo saber cuantas cifras tiene un número?

El logaritmo es la inversa de la potencia.

Entonces, al hallar el logaritmo en base 10 de determinado número, la parte entera representa la cantidad de cifras del número.

Por ejemplo:


Log(1) => 0
Log(9) => 0,95...
Log(10) => 1
Log(11) => 1,04...
Log(99) => 1,99...
Log(100) => 2

Así que de esta manera se puede hacer una función simple para contar las cifras. Por ejemplo en PHP se podría contar las cifras con la siguiente función:
<?php

function getCifras($number) {
   return intval(log($number, 10)) + 1;
}

echo getCifras(11);   // imprime 2
echo getCifras(100);  // imprime 3
echo getCifras(1999); // imprime 4

?>


Cómo asociar tipos de archivos en MAC

1. Desde el Finder hacer click sobre el archivo.

2. Presionar CMD + I

3. Seleccionar con cuál programa abrirlo

4. Hacer click en Change All.


Instalar Open SSL en Ubuntu Linux

1. Descargar Open SSL
# wget http://www.openssl.org/source/openssl-0.9.8e.tar.gz

2. Descomprimir el archivo
# tar -xvzf openssl-0.9.8e.tar.gz

3. Ingresar al directorio
# cd openssl-0.9.8e

4. Configurar Open SSL
# ./config --prefix=/usr/local/openssl --openssldir=/usr/local/openssl
Cambiar "/usr/local/openssl" por la carpeta en la que querés que se copien los archivos

5. Instalarlo
# sudo make install

Download file with GWT

Esta es una manera fácil de enviar desde GWT archivos al navegador para que los usuarios se los puedan descargar.

1. Hay que agregar un frame oculto en el HTML de la hosted page:
<div id="__gwt_downloadFrame" tabIndex='-1'></div>

2. Para iniciar la descarga poner este código en la parte cliente (código GWT):
public static void download(String p_uuid, String p_filename) { 
        String fileDownloadURL = "/fileDownloadServlet" 
                               + "?id=" + p_uuid 
                               + "&filename=" + 
URL.encode(p_filename); 
        Frame fileDownloadFrame = new Frame(fileDownloadURL); 
        fileDownloadFrame.setSize("0px", "0px"); 
        fileDownloadFrame.setVisible(false); 
        RootPanel panel = RootPanel.get("__gwt_downloadFrame"); 
        while (panel.getWidgetCount() > 0) 
            panel.remove(0); 
        panel.add(fileDownloadFrame); 
} 

3. Poner esto en el servlet que va a servir el archivo a descargar:
@Override 
protected void doGet(HttpServletRequest p_request, 
                         HttpServletResponse p_response) 
        throws ServletException, IOException { 
        String filename = p_request.getParameter("filename"); 
        if (filename == null) 
        { 
            p_response.sendError(SC_BAD_REQUEST, "Missing filename"); 
            return; 
        } 

        File file = /* however you choose to go about resolving 
filename */ 

        long length = file.length(); 
        FileInputStream fis = new FileInputStream(file); 
        p_response.addHeader("Content-Disposition", 
                             "attachment; filename=\"" + filename + 
"\""); 
        p_response.setContentType("application/octet-stream"); 
        if (length > 0 && length <= Integer.MAX_VALUE); 
            p_response.setContentLength((int)length); 
        ServletOutputStream out = p_response.getOutputStream(); 
        p_response.setBufferSize(32768); 
        int bufSize = p_response.getBufferSize(); 
        byte[] buffer = new byte[bufSize]; 
        BufferedInputStream bis = new BufferedInputStream(fis, 
bufSize); 
        int bytes; 
        while ((bytes = bis.read(buffer, 0, bufSize)) >= 0) 
            out.write(buffer, 0, bytes); 
        bis.close(); 
        fis.close(); 
        out.flush(); 
        out.close(); 
} 


Cómo saber si ser freelance es tu vocación :)

Copio un cuestionario que encontré por ahí y que me pareció divertido acerca del autoconocimiento acerca de si uno puede ser freelance.

1. 
Que te interesa de ser freelance?
a) Los retos
b) La libertad
c) Tiempo para vos y tu familia

2. El reto más grande al trabajar por tu cuenta sería
a) Estar solo todo el día
b) Ingresos irregulares y poco predecibles
c) Promocionarte y venderte

3. Que tan flexible sos?
a) Puedo manejar cualquier cosa que se presente cómodamente
b) Mi especialidad es controlar las emergencias pero me gusta la rutina
c) Prefiero tener una estructura predecible y prestablecida

4. La idea de no recibir ingresos durante varios meses:
a) Siento cierta ansiedad pero también me motiva.
b) No soy fan, pero puedo sobrellevarlo y asumirlo como parte del proceso.
c) Me aterra horrores y me duele el estómago.

5. Tus habilidades para negociar son:
a) Excelentes
b) Me salgo con la mía la mayoría de las veces
c) No muy buenas

6. En automotivación ¿cómo te calificas?
a) Con 9-10 porque Soy extremadamente automotivado
b) Con 8-7 porque lo soy una buena parte del tiempo, pero a veces me cuesta
c) Con 5 de reprobado porque no logro automotivarme

7. ¿Qué logra hacer que cumplas con tus tiempos de entrega?
a) Algo en mi que no se está en paz si no lo logro.
b) El jefe que está respirándome en la nuca
c) Casi nunca entrego en los tiempos acordados

8. Llegas a tu próximo día de pago:
a) Sorprendentemente bien. Siempre tengo algo en la bolsa.
b) Más o menos. Le sufro a veces. 
Llego con la tarjeta de crédito o pidiendo prestado aunque sea un poco.
c) Siempre me falta

9. ¿Te gusta venderte a ti mismo?
a) Me encanta
b) En ocasiones me inspiro y lo logro muy bien
c) Soy más tímido de lo que quisiera

10. Es casi la hora de salida en viernes, tu:
a) ¿Hora de salida?
b) Emocionado por que llegue el fin
c) Estás con un pié en la puerta

11. Te gusta tratar con personas de todo tipo (aún las difíciles)
a) Si. Rara vez alguien me cae mal o me exaspera
b) No siempre, pero logro anteponer lo que me parece más importante.
c) No me gusta tratar con gente idiota/necia/loca/emocional (osea todos)

12. Cuando alguien te pide un favor tu:
a) Lo haces sin chistar
b) Evalúas todos los factores involucrados antes de decir
c) NO haces favores. Punto

13. Alguna vez te han transado?
a) No. Mi escepticismo está de lo más sano
b) Me han engañado un par de veces, pero ahora es difícil
c) Si, caigo a menudo

14. Los tiempos y tu…
a) Nos llevamos bien. Es raro que no haga todo lo que proyecté hacer en un día
b) Hay días muy buenos y muy malos. Me organizo pero a veces el tiempo me gana
c) Nos llevamos muy mal. Nunca me da tiempo de nada y no logro averiguar porque.

Si contestaste más de 8 a
Estás preparado para ser freelance. Al menos en lo que mental, organizacional y financieramente se refiere. Hay altas posibilidades que este sea TU paraíso. Ya lo has probado,  te sientes como pez en el agua, o lo suficientemente cómodo para adoptarlo como modo de vida.

Si contestaste más de 8 b
Tienes buena madera para ser freelance. Quizá has estado demasiado tiempo en el mundo corporativo y no sabes como sería la vida fuera, pero te interesa y tienes características muy útiles para el freelanceo. Eres flexible y estás dispuesto a cambiar tu punto de vista. Te falta pulir habilidades pero eso se hace con la práctica y experiencia.
Este puede ser tu paraíso si te interesa.

Si contestaste más de 8 C
El ser freelance no es tu primera opción. No te ves trabajando solo y menos sin un sueldo fijo. Te cuesta “inventar trabajo de la nada” y  la improvisación no es tu fuerte. Sin embargo, si quisieras freelancear, no todo está perdido. Hay maneras de aprender habilidades como: vender, negociar, gastar menos de lo que ganas, tratar con gente.

También se pueden hacer “trucos” para adaptar la vida independiente a quien gusta de las estructuras: asociarte con alguien, diseñar los procedimientos. Que los días de pago siempre sean los mismos (una vez que el cliente pagó), etc. Quizá valga la pena que intentes asomarte a este paraíso para averiguar en carne propia.

Cómo eliminar el atributo com.apple.quarantine

En Mac, por cuestiones de seguridad cuando se descargan archivos, éstos son marcados con un atributo de "cuarentena".

Esto es así para que una vez descargado el archivo al intentar abrirlo Mac nos pregunte "El archivo bla bla bla se ha descargado el día tal, desea abrirlo?". Una vez que le damos OK no nos lo vuelve a preguntar porque le elimina este atributo (com.apple.quarantine) al archivo.


Esto normalmente no es tema escabroso. Pero en mi caso me había descargado los fuentes de Wordpress y cuando lo quise ejecutar en mi apache local por este tema no se ejecutaba ya que los archivos estaban en cuarentena.

Hay unos comandos para trabajar con estos atributos (y otros).

Para ver desde consola los atributos de un archivo:
xattr filename
Para eliminar el atributo com.apple.quarantine de un archivo:
xattr -d com.apple.quarantine filename
Para eliminar el atributo com.apple.quarantine de un directorio de manera recursiva:
xattr -dr com.apple.quarantine diretoryName

Cómo ejecutar Chrome con parámetros en Mac

Hay veces en las cuales es necesario ejecutar una aplicación pasándole parámetros. Por ejemplo si se quiere abrir Chrome con alguna funcionalidad extra que no viene por defecto.

Para ello hay que abrir una terminal (Applications > Utilities > Terminal) y ejecutar lo siguiente:
# open /Applications/Google\ Chrome.app --args --enable-speech-input
Acá hay una lista de launch parameters para Chrome.

Virtual Box compartir carpetas entre host Mac y guest Debian

Esto es para poder acceder desde una máquina virtual Debian corriendo en Virtual Box a las carpetas del host (en este caso Mac, Mountain Lion).

1. Desde Virtual Box asignar las carpetas a compartir.

2. En la máquina virtual (guest) crear puntos de montaje (como root).
mkdir /mnt/share
mkdir /mnt/share/music
mkdir /mnt/share/videos
mkdir /mnt/share/pix
mkdir /mnt/share/dox
mkdir /mnt/share/down
3. Agregar lo siguiente al final del archivo /etc/sudoers:
user ALL = NOPASSWD : ALL
Reemplazar "user" con tu usuario.

4. Crear un script para montar las carpetas compartidas:
mkdir ~/scripts
nano scripts/shared-folders

#!/bin/sh
sudo mount -t vboxsf music /mnt/share/music
sudo mount -t vboxsf videos /mnt/share/videos
sudo mount -t vboxsf pix /mnt/share/pix
sudo mount -t vboxsf dox /mnt/share/dox
sudo mount -t vboxsf down /mnt/share/down
Los nombres que van luego de "vboxsf" son los que se designaron en el punto 1.

5. Agregar el script a los programas de inicio de Gnome: Desktop > Preferences > Sessions > Startup programs

Cómo evitar que Google Analytics contabilice mis propias visitas

Si Google Analytics está contabilizando tus propias visitas a tu sitio web eso puede implicar un margen de error en las estadísticas.

Si tenés un blog o sitio que no tiene muchas visitas, y vos estás visitándolo porque estás editando posts, haciendo cosas de programación, etc, puede ser que la cantidad de visitas propias esté distorcionando tus estadísticas.

Hay una manera simple de evitar que Google Analytics contabilice tus visitas y es con un plugin de Google para Chrome que lo podés descargar desde acá.

Cómo hacer un redirect 301 en blogger

Hay veces en las cuales es necesario hacer un redirect de una página o post en un sitio web.

Esto también puede ser necesario en un blog, ya que se pueden eliminar contenidos, o cambiar, actualizar, etc.

Ahora bien, para hacer un redirect hay varias maneras posibles. Puede hacerse por javascript, desde un lenguaje de servidor (PHP, Java, etc), con la etiqueta meta redirect, etc. Cada opción tiene sus pros y contras.

En Blogger no se puede hacer un redirect con lenguaje de servidor ya que no hay lenguaje de servidor :)

Se puede hacer con JS, pero no sirve para no perder el posicionamiento en Google.

Así que la mejor opción es hacer un redirect 301. Ahora la cuestión es cómo hacer un redirect 301 en Blogger?

Simple, hay que ir a Configuración > Preferencias para motores de búsquedas > Errores y direccionamientos > Redireccionamiento personalizado y hacer click en "Editar". Acá hay que poner la URL antigua y la URL a la que debe redirigir. Simple!

Programador PHP Argentina

Hola.

Soy un programador freelance de Argentina que se dedica al desarrollo de aplicaciones web.

Desde hace más de 7 años que me dedico al desarrollo de aplicaciones PHP. Empecé con PHP "puro y duro" por así decirlo.

Luego estuve viendo los diferentes frameworks MVP del mercado de los cuales los que más me gustaron son Zend y Symphony.

Y finalmente comencé a trabajar con los diferentes CMS que hay para PHP para no "reinventar la rueda" :)

Trabajé con Wordpress y Drupal a nivel CMS. Y en cuanto a tiendas online con Magento y Prestashop.

Ahora mismo, además de dedicarme al desarrollo de aplicaciones web me encuentro trabajando en el desarrollo de aplicaciones móviles. Principalmente me dedico a iOS con Objective, pero también (dependiendo del proyecto) trabajo con Android (desde 2.2 en adelante) y con jQuery Mobile (para el caso de web applications móviles).

Si tenés alguna duda o querés un presupuesto contactame acá que hoy mismo me pongo en contacto con vos.

Dónde está el archivo php.ini en Mac

El archivo php.ini en Mac se encuentra en la ruta /usr/php.ini

Si no se encuentra allí hay que copiarlo desde /etc/php.ini.default y darle permisos de escritura para poder modificarlo

# sudo cp /etc/php.ini.default /etc/php.ini
# sudo chmod u+w  /etc/php.ini



Cómo instalar mcrypt en Mountain Lion

La libería mcrypt para PHP no viene instalada por defecto.

Para instalarla hay que seguir una serie de pasos.

1) Instalar las command line tools de xcode.

2) Instalar mcrypt. Para ello.

Abrir una terminal (Applications > Utilities > Terminal). Y crear un directorio llamado mcrypt

# cd ~ ; mkdir mcrypt ; cd mcrypt

Descargar la libería mcrypt desde Sourceforge.

Descargar el código fuente de PHP. Para saber qué versión de PHP descargar tipear en la consola:

# php -v

Mover los archivos descargados a ~/mcrypt y expandirlos.

Configurar libmcrypt


Ir al directorio de mcrypt:

# cd libmcrypt-2.5.8
# ./configure
# make
# sudo make install

Ahora la librería mcrypt está configurada e instalada.

Errores de Autoconf

Si tenés errores como el siguiente:

Cannot find autoconf. Please check your autoconf installation and the
$PHP_AUTOCONF environment variable. Then, rerun this script.

Significa que no está instalado autoconf. Para instalarlo ir a la consola ir tipear lo siguiente:

# cd ~/mcrypt<
# curl -O http://ftp.gnu.org/gnu/autoconf/autoconf-latest.tar.gz
# tar xvfz autoconf-latest.tar.gz
# cd autoconf-2.69/
# ./configure
# make
# sudo make install

Compilar la extensión mcrypt para php.


# cd ../php-5.3.13/ext/mcrypt/
# /usr/bin/phpize

La salida tiene que ser
Configuring for:
PHP Api Version: 20090626
Zend Module Api No: 20090626
Zend Extension Api No: 220090626 
configure.in:3: warning: prefer named diversions
configure.in:3: warning: prefer named diversions

# ./configure
# make
# sudo make install

La salida tiene que ser:

Installing shared extensions:     /usr/lib/php/extensions/no-debug-non-zts-20090626/


Habilitar la extensión mcrypt para PHP.


Abrir el archivo /etc/php.ini (si no se encuentra allí lo podés copiar del default) y agregar la siguiente linea al final del archivo:

extension=mcrypt.so



Cuál es la mejor app de gtalk para iPhone

Luego de estar buscando y probando una y otra app para utilizar gtalk en mi iPhone y ver que son una peor la que otra finalmente encontré una que funciona bien, no crashea a cada rato, se mantiene logueado a pesar de que se cierre la aplicación y que las notificaciones llegan en tiempo y forma.

La aplicación es: Beejive y si bien es una aplicación de pago, la versión gratuita a pesar de tener unos banners bastante intrusivos es totalmente funcional.

Could not instantiate class named NSLayoutConstraint

Por defecto cuando se crea un proyecto nuevo en xcode 4.5 cada XIB creado utiliza autolayout lo cual es una propiedad de iOS 6.

Entonces al correr el proyecto con una versión de iOS < 6 explota.

Las posibles soluciones son:
  • O bien correr el proyecto con iOS >= 6.0
  • O bien modificar poner la propiedad autolayout de cada XIB a false.
Para poner la propiedad autolayout a false, seleccionar el XIB y en el File Inspector deseleccionarla.


No provisioned iOS devices are available with a compatible iOS version.

Si ocurre este problema al intentar hacer correr una aplicación desde xcode en el un terminal iOS es probable que se deba a lo siguiente.

Por defecto xcode 4 crea aplicaciones con soporte sólo para armv7. Si tu terminal tiene un procesador armv6 ahí está el problema.

Para solucionarlo hay que agregar armv6 a la lista de arquitecturas soportadas. Esto se hace agregando una nueva entrada en el archivo ProjectName-Info.plist




Cómo comprobar si funciona el envío de emails de Magento

Hay veces en las cuales es necesario comprobar si Magento está enviando de manera correcta los emails y no hay en el backend un botón "Enviar email".

Una manera fácil de comprobar si nuestra tienda de Magento está enviando los emails correctamente es tener un usuario de pruebas y desde el backend resetear su password.

Si está funcionando correctamente le llegará el email al usuario. Si no no llega es porque hay algún problema con el envío de emails.

Cómo limpiar la cache DNS en Mac

Los request normalmente son cacheados para agilizar las búsquedas que atacan a un mismo host pero a veces es necesario limpiar la cache.

Para hacerlo hay que abrir una terminal y tipear lo siguiente:

Para OSX 10.4

# lookupd -flushcache

A partir de OSX 10.5

# dscacheutil -flushcache

Cómo compartir carpetas entre Mac OS X y Ubuntu (Virtual Box).

Para poder compartir carpetas entre Mac y una máquina virtual Ubuntu corriendo en Virtual Box hay que seguir los siguientes pasos:

1. Dentro de la máquina virtual Ubuntu instalar el Guest Aditions de Virtual Box.
2. Agregar el usuario de Linux al grupo virtualboxsf.
3. Compartir la carpeta (hacerla automontable). Esto se hace desde el menú de Virtual Box.
4. Reiniciar Ubuntu.

Dónde están guardados los mensajes de Skype en Mac?


Skype no aloja de manera online los mensajes antiguos de chat. Sólo aloja los contactos.

Si querés cambiar de Mac y no querés perder tus mensajes tenés que copiar el contenido de la carpeta ~/Library/Application Support/Skype/tu_usuario de la vieja Mac a la nueva.

De la misma manera también podés recuperar tus mensajes antiguos desde una Time Capsule ;)

Cómo utilizar valores hexadecimales para definir colores en Objective C

Objective C no tiene una función para definir un color a partir de un valor hexadecimal. Y normalmente esto es una necesidad :)

Pero sí tiene una función para definir un color a partir de valores RGB (Red, Green, Blue). Para ello se utliza la siguiente función:

[UIColor colorWithRed:0.5 green:0.5 blue:0.5 alpha:1.0];

A partir de ello se puede crear una macro e incluirla en algún header para que esté disponible:

#define UIColorFromRGB(rgbValue) [UIColor \
colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 \
green:((float)((rgbValue & 0xFF00) >> 8))/255.0 \
blue:((float)(rgbValue & 0xFF))/255.0 alpha:1.0]

Luego se puede utilizar esta macro de la siguiente manera:

self.view.backgroundColor = UIColorFromRGB(0xCECECE);

Cómo mostrar el directorio /usr en Finder

El directorio /usr por defecto está oculto en el Finder.

Para poder verlo hay que cambiar el flag hidden a nohidden.

Para esto hay que abrir una terminal y tipear lo siguiente:
# sudo chflags nohidden /usr