sábado, 2 de abril de 2011

Eliminar programas de arranque de Mac OS - Snow Leopard

Tengo instalado en mi Mac el Media Center Plex, con el que estoy mas que contento. Sin embargo, no siempre que prendo la pc es para ver una película o una serie y me resulta bastante molesto esperar a que el Plex Media Server termine de cargar, etc. Sumado a que se come parte de la ram en cosas que no voy a usar. Comencé a buscar y no daba en la tecla de cómo sacarlo del arranque, hasta que al final lo logré. Dejo un mini tutorial de todos los lugares donde se pueden poner aplicaciones, scripts o incluso configuraciones, para que arranquen cuando se enciende el Mac.

1. Aplicaciones de arranque de usuario


Estas son las más comunes, y las que todo internet indica que hay que verificar en primera instancia. Se encuentran en Preferencias del Sistema / Cuentas / Arranque. La siguiente figura lo muestra mejor.
Preferencias del sistema - cuentas
Preferencias del sistema - cuentas

En el mismo se pueden agregar nuevas aplicaciones que deseamos que se inicien con el arranque del sistema o también eliminar las que ya tenemos si no nos interesa que sigan estando. Hasta aquí venía todo bien, pero mi Plex Media Server no estaba en la lista...

2. Launch Agents y Launch Daemons


Acá hay mas gente de esta que se inicializa al arranque... Los Launch Agents y Launch Daemons son dos tipos diferentes de servicios que utiliza mac desde hace varias ediciones de su sistema operativo. Se encuentran bajo archivos con extensiones .plist, que si los abrimos podemos ver a qué binario/script/archivo en general apunta, los argumentos que se pasan y alguna que otra opción más, dependiendo del caso. El funcionamiento es similar a lo que en linux hacemos con los archivos en /etc/init.d/ o /etc/rc. En particular, los archivos plist son manejados por launchd, un manager de servicios incorporado por Apple desde desde Mac OS Tiger. Launchd ejecuta /etc/rc y luego busca en diferentes lugares por archivos .plist para su ejecución.

Los mismos están ubicados en los siguientes lugares:

HDD/Librería/LaunchAgents

HDD/Librería/LaunchDaemons

HDD/Sistema/Librería/LaunchAgents

HDD/Sistema/Librería/LaunchDaemons

HDD/Usuarios/bernardo/Librería/LaunchAgents

Así que en este último encontré el agente de plex que hace que se levante el Media Server al arranque.
Carpeta de los LaunchAgents
Carpeta de LaunchAgents

 

Cuando doy botón derecho sobre el archivo .plist del plex, se abre la  siguiente ventana.
Archivo Plex .plist
Archivo Plex .plist

 

Acá según leí hay dos caminos. O eliminamos el archivo, o si tiene la opción de RunAtLoad, desmarcarla. En este caso voy a hacer eso.

Cuando reinicio mi pc, ya no tengo el fastidioso Plex Media Server corriendo. Cuando quiera encenderlo lo hago sin problemas.

 

3. StartUpItems


Hay un tercer tipo de archivos que se pueden levantar con el arranque del sistema. Son los denominados StartUpItems. Son elementos que se ejecutan luego del arranque, pero antes de que cualquier usuario comience sesión. Se encuentran en:

HDD/Librería/StartupItems

HDD/Sistema/Librería/StartupItems

Bastará con borrar la entrada que corresponda para que no arranquen más con el SO.

 

 

Ruby: Creando clases y objetos

Luego de tener idea básica del lenguaje y definición de métodos, veamos la creación de clases y objetos.
class Anfitrion
def initialize(nombre=”Mundo”)
@nombre = nombre
end

def decir_hola
puts “Hola #{@nombre)“
end

def decir_adios
puts “Adios #{@nombre}“
end

De esa forma tenemos una clase anfitrión con dos métodos (decir_hola, decir_adios). Además se tiene una variable de instancia (@nombre) disponible durante la vida del objeto. Para crear el objeto:

A = Anfitrion.new(“Bernardo“).
A.decir_hola => “Hola Bernardo“
A.decir_adios => “Adios Bernardo“

Una aspecto interesante es que no podemos acceder a la variable de instancia como sí se puede en otros lenguajes. La expresión A.@nombre no es válida.

Anfitrion.instance_methods devuelve todos los métodos de instancia que se pueden invocar. Eso retorna todos los métodos disponibles de la clase Anfitrion y sus superclases. Si quisiéramos solamente los métodos que se definieron en la clase anfitrión y nada más, entonces bastará con poner:
Anfitrion.instance_methods(false)
En este caso se retornará
 => “[decir_hola, decir_adios]“


Existe otra funcionalidad interesante que es la de respond_to?. Escribimos
 Anfitrion.respond_to?(“nombre“)

y retornará false. Sin embargo si escribimos Anfitrion.respond_to?(“decir_hola“) retornará true. Si el objeto es capaz de responder a esos métodos entonces retorna true.

Para poder acceder y modificar los valores de las variables de clase, es necesario poner attr_accessor: nombres.
De esa forma podemos acceder como a.nombre, donde a es el objeto instanciado de la clase Anfitrion.

Ejemplo....




class MegaAnfitrion
attr_accessor :nombres

# Crear el objeto
def initialize(nombres = "Mundo")
@nombres = nombres
end

# Decirle hola a todos
def decir_hola
if @nombres.nil?
puts "..."
elsif @nombres.respond_to?("each")

# @nombres es una lista de algún tipo,
# ¡así que podemos iterar!
@nombres.each do |nombre|
puts "Hola #{nombre}"
end
else
puts "Hola #{@nombres}"
end
end

# Decirle adiós a todos
def decir_adios
if @nombres.nil?
puts "..."
elsif @nombres.respond_to?("join")
# Juntar los elementos de la lista
# usando la coma como separador
puts "Adiós #{@nombres.join(", ")}. Vuelvan pronto."
else
puts "Adiós #{@nombres}. Vuelve pronto."
end
end

end



if __FILE__ == $0
ma = MegaAnfitrion.new
ma.decir_hola
ma.decir_adios

# Cambiar el nombre a "Diego"
ma.nombres = "Diego"
ma.decir_hola
ma.decir_adios

# Cambiar el nombre a un vector de nombres
ma.nombres = ["Alberto", "Beatriz", "Carlos",
"David", "Ernesto"]
ma.decir_hola
ma.decir_adios

# Cambiarlo a nil
ma.nombres = nil
ma.decir_hola
ma.decir_adios
end


Y hasta aquí llegué con Ruby. En cuanto profundice en él iré actualizando los posts. Saludos!

Ruby: Definiendo métodos

La sintáxis de definición de un método es similar a la sintaxis de python:

def saludador
puts “Hola mundo“
end


“def“ es la definición del método llamado saludador. La palabra “end“ al final indica el fin del método.

La invocación del método requiere que solamente se escriba el nombre del mismo, en este caso saludador. También puede ser invocado como saludador(). En este caso tendrán el mismo comportamiento. Sin embargo este caso es un tanto particular, ya que no se pasan parámetros al método. En caso de tener parámetros se deberían pasar entre medio de los paréntesis, por ejemplo saludador(“bernie”).


def saludador(nombre)
puts “Hola #{nombre}“
end


 

Otra alternativa es definir el método con un valor por defecto para el paráemtro. Por ejemplo:


def saludador(nombre=”Mundo”)
puts ”Hola #{nombre.capitalize}”
end


En este caso se pone la primer letra del parámetro en mayúscula. Si invocamos:

Saludador ->; obtendremos la salida “Hola Mundo“

Dado que si no se pasa un parámetro, el mismo toma el valor (=”Mundo”).

 

Ruby: Primeros pasos...

Hace un tiempo hice un tutorial de Ruby para aprender el lenguaje. La verdad es que me gustó, se asemejó bastante a Python en lo que refiere a sintaxis. No me dio el tiempo de ver performance, variedad de frameworks en la vuelta, etc. Sin embargo como primeros pasos para conocer la sintaxis básica puede servir. Pongo una serie de posts explicando conceptos básicos del lenguaje.

Accediendo a la consola


Para poder acceder a la consola de Ruby simplemente escribimos “irb“ en el terminal (si estamos en Mac OS o Linux, si estuviéramos en Windows sería Fxri).

Si quisieramos obtener la versión que tenemos instalada de Ruby en nuestro pc, basta con escribir “ruby -v“ en la terminal. La salida debería ser algo similar a la siguiente línea:

ruby 1.8.7 (2009-06-12 patchlevel 174) [universal-darwin10.0].

Primeros pasos...


La salida de Ruby es con puts.

Puts “Hola mundo“ responderá en pantalla dos cosas:

  1. Hola mundo

  2. Nil.


El nil es la salida de la evaluación del comando puts. Puts siempre retorna nil luego de una evaluación.

Las operaciones matemáticas son sencillamente como si fuera una calculadora, 2+3, 5*2, 5**2.  Existen ciertos módulos como ser Math que agrupan funcionalidades similares, como ser Sqrt, Sin, Cos, Tan, etc. Para poder invocar ese tipo de operaciones es necesario escribir Math.sqrt(16). El resultado de ese mensaje será 4.0.

 

 

Recuperar archivo adjunto editado y guardado... desde Outlook

Suele ser bastante común, para quienes usan Outlook, abrir algún archivo adjunto desde el programa mismo y realizarle algún tipo de modificación. Entonces grabamos el archivo y un tiempo después cuando lo queremos recuperar... vamos al viejo correo que contenía el adjunto y lo abrimos. La sorpresa suele ser tan desagradable como el tiempo que le dedicamos a la edición: Los cambios que guardamos y que nunca se nos alertó de un error, NO ESTÁN! (no nos alertó, porque en realidad no hay error).

Entonces, luego de un ratito en que estamos relajando a la PC, a Bill Gates y estamos a punto de comenzar el trabajo de nuevo, podemos intentar lo siguiente:

Inicio -> Examinar (en Windows Vista y Seven ya es directo en "Escribir comando") -> Regedit.

Vamos a

HKEY_USERSS-1-5-21-2743691432-338821429-3103819822-1106SoftwareMicrosoftOffice12.0OutlookSecurityOutlookSecureTempFolder

Luego de MicrosoftOffice pueden probar además de con 12.0, con las carpetas que tengan, 11.0, 10.0, 9.0, etc.

Damos doble click y nos vamos a encontrar con una ruta que nos indica donde es que Outlook almacena los archivos adjuntos que descarga para las ediciones. Así es que abrimos un Explorer de Windows, ponemos esa ruta y allí encontraremos el archivo que estabamos buscando.

Espero que sirva cuando se enfrenten a esos casos!

Saludos!