Crea un archivo llamado ‘com.companyname.ethernetmonitor‘ y ponlo en ‘/System/Library /LaunchDaemons’.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>Label</key>
  <string>com.companyname.ethernetmonitor</string>
  <key>ProgramArguments</key>
  <array>
    <string>/Library/Scripts/CompanyName/turnOffAirport.sh</string>
  </array>
  <key>WatchPaths</key>
  <array>
    <string>/Library/Preferences/SystemConfiguration</string>
  </array>
</dict>
</plist>

Crea un script llamado ‘turnOffAirport.sh‘, guardalo en ‘/Library/Scripts’.

#!/bin/sh
if ifconfig en0 | grep 155.144; 
then /usr/sbin/networksetup -setairportpower off
else
exit 0
fi

Al reiniciar el ordenador ya estara el Demonio activo.

Estuve siguiendo la Keynote de Apple en la que presentaron el iPad, el nuevo Tablet que esta llamado a ser la proxima referencia en dispositivos moviles para el futuro.

Su presentacion no ha estado exenta de polemica y no han sido pocas las voces que se han alzado en contra criticandolo por sus ‘carencias’ entre ellas estan:

1 – No tiene Flash.
2 – No usa Mac OS X si no una version de iPhone OS
3 – No tiene puertos USB
4 – No tiene ranuras de Tarjeta SD
5 – Parece ser que no permite la multitarea.

Los defensores del Software Libre tambien han cargado las tintas acusandolo de cerrado y todas esas cosas que suelen decir pero bueno es que esa gente nunca esta contenta con nada y esta vez no iba a ser la excepcion.

Por poner pegas seguro que se pueden poner mil y una mas pero esas son las que mas relevancia tienen en los medios.

Mi opinion personal es que es un producto que yo no necesito para nada pero eso no quiere decir que el dia de mañana no pueda necesitarlo, tambien opino que tiene su target de usuarios y que seguramente en dos años nadie podra vivir sin el (vease lo que sucedio en su dia con el iPod o iPhone por ejemplo, decian que no innovaban, que no se venderian y ahora todo el mundo se muere por uno).

Queria hacer un inciso sobre algunos comentarios que he leido y que criticaban el que no se pudieran ver pelicuas DivX o leer archivos PDF, el iPad es un dispositivo intermedio entre un PDA y un Ordenador Portatil, una de su bazas es la dependencia de la Apple Store (en donde se adquieren los productos que se visualicen o usen en el dispositivo) con lo que no es muy recomendado para los amigos de bajarse peliculas por P2P y el “todo gratis”.

La Apple Store ofrece un mercado centralizado y controlado en donde todos sus productos son 100% compatibles y garantizados para su uso en los dispositivos de Apple.

Normalmente nadie trabaja por amor al arte y generalmente los productos de Apple no son indicados para los que no tienen donde caerse muertos pero que los adquieren como distintivo social (que de esos los hay a millones).

Para los que no tienen dinero o lo tienen pero lo quieren todo gratis y sin garantias ya existe Linux y su maravilloso mundo de pinguinos de colores.

Todos los productos tienen su target como dije antes y cada consumidor debe saber que productos se adecuan mas a su gusto, poder adquisitivo y filosofia, es una cuestion de sentido comun.

El iPad es un paso adelante en su genero aunque no mucha gente lo entienda. El dia de mañana los consumidores diran si fue una buena idea o no pero ahora mismo a mi se me ocurren diferentes usos (Hospitales, Escuelas, Oficinas, Almacenes) en donde seria un artilugio fantastico.

Dawn of War II

Despues de jugar horas y horas a este estupendo RTS ahora nos llega la primera expansion llamada Chaos Rising.

Hace una pinta estupenda y ya esta a punto de llegar mi nueva tarjeta grafica, la GTX 285 para sustituir a mi ‘vieja’ Geforce 8800GT y poder poner toda la configuracion al maximo.
Es lamentable que en un ordenador de gama ‘Alta/Profesional’ como mi Mac Pro que tan solo tiene un año y poco de uso ya tenga que sustituir la tarjeta grafica si quiero jugar en condiciones a los juegos actuales.

Nunca me han gustado ni el iPhone ni el iPod Touch, de hecho no tengo ninguno de los dos pero entre que ultimamente estoy programando para estos cacharros y que ya a mi edad me da la ñoña de los juegos de antes al final acabo comprandome uno, si me conocere yo.

P.D. – La pregunta obvia que mas de uno me hara es “¿Si no tienes iPhone como puedes crear programas para el?. La respuesta es que el SDK ya trae un emulador (todos los SDK de desarrollo incorporan un emulador).

March 6th, 2010

Configurar ipfw en Mac OS X

No Comments, BSD, Mac OS X, Shell, by Falken.

El sistema operativo Mac OS X trae integrado de serie un firewall de aplicaciones accesible desde el gestor de preferencias, este firewall es bastante espartano y obedece una vez mas a proveer de simplicidad al usuario medio de Mac.

Sin embargo nunca hay que olvidar que Mac OS X es un derivado de BSD y un UNIX Certificado por lo que debajo de la capa Aqua y aplicaciones lo que nos encontramos es un robusto sistema Darwin BSD.

Como tal tiene integrado ipfw el firewall en capa de protocolo de red que trae por defecto FreeBSD con muchas mas opciones de configuracion (pero editando con la linea de comandos), aqui explico como ponerlo en marcha y pondre un archivo basico de configuracion.

Creamos con nuestro editor favorito un archivo llamado ‘StartupParameters.plist‘ al que añadimos este contenido:

1
2
3
4
5
6
7
8
9
10
11
{
Description = "Firewall";
Provides = ("Firewall");
Requires = ("Network");
OrderPreference = "None";
Messages =
   {
   start = "Starting NAT/Firewall";
   stop = "Stopping NAT/Firewall";
   };
}

Creamos un Directorio/Carpeta llamada ‘Firewall‘ e introducimos el archivo en el.
Seguidamente creamos un archivo llamado ‘Firewall‘ con el siguiente contenido:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#!/bin/sh
 
trust="192.168.0.0/24"
 
# Purge existing rules
/sbin/ipfw -f flush
 
# Allow localhost
/sbin/ipfw -f add 00100 allow ip from any to any via lo0
 
# Deny spoofed localhost /sbin/ipfw -f add 00110 deny log ip from 127.0.0.0/8 to any in
/sbin/ipfw -f add 00120 deny log ip from any to 127.0.0.0/8 in
 
# Keep state table
/sbin/ipfw -f add 25000 check-state
 
# Allow outbound tcp/udp/icmp and keep state on udp/tcp
/sbin/ipfw -f add allow tcp from any to any out setup keep-state
/sbin/ipfw -f add allow udp from any to any out keep-state
/sbin/ipfw -f add allow icmp from any to any out
 
# Allow incoming icmp traffic for ping and traceroute
/sbin/ipfw -f add allow icmp from any to any in
 
######################
###### Services ######
######################
 
# Allow SSH
/sbin/ipfw -f add allow tcp from any to any 22 keep-state setup
 
# Allow Apple Remote Desktop
/sbin/ipfw -f add allow tcp from any to any 3283 keep-state setup
/sbin/ipfw -f add allow tcp from any to any 5900 keep-state setup
/sbin/ipfw -f add allow udp from any to any 3283 keep-state      
/sbin/ipfw -f add allow udp from any to any 5900 keep-state
 
# Allow Apple File Sharing from our trusted subnet
/sbin/ipfw -f add allow tcp from $trust to any 548 keep-state setup
/sbin/ipfw -f add allow tcp from $trust to any 427 keep-state setup
 
# Allow SMB file sharing from our trusted subnet
/sbin/ipfw -f add allow tcp from $trust to any 139 keep-state setup
/sbin/ipfw -f add allow tcp from $trust to any 139 keep-state setup
/sbin/ipfw -f add allow tcp from $trust to any 139 keep-state setup
 
# Allow Rendevous fron our trusted subnet
/sbin/ipfw -f add allow udp from $trust to any 5353 keep-state
 
# Allow bacula-fd from our trusted subnet
/sbin/ipfw -f add allow tcp from $trust to any 9102 keep-state setup
 
#####################
### Default Block ###
#####################
 
# Default reject for udp
/sbin/ipfw -f add 65532 reject log udp from any to any in
# Default reject for tcp
/sbin/ipfw -f add 65533 reject log tcp from any to any in
# Default reject for ip
/sbin/ipfw -f add 65534 deny log ip from any to any in

Este es el archivo de configuracion y en este caso es una configuracion basica, cada cual habra de adaptar que servicios abre o cierra, cualquier manual de ipfw le guiara sobre como configurarlo.
Introducimos el archivo tambien en la carpeta ‘Firewall‘ a su vez movemos la carpeta a ‘/Library/StartupItems/‘ y ejecutamos esta orden en la linea de comandos:

sudo chmod ug+x /Library/StartupItems/Firewall/Firewall

ejecutando un

sudo /usr/sbin/ipfw start

Lo pondremos en marcha y un:

sudo /usr/sbin/ipfw list

Nos mostrara la configuracion activa en ese momento, para todo lo demas ‘man ipfw‘.

A partir de ahora ipfw siempre estara activo a no ser que lo quitemos nosotros, aunque reiniciemos la maquina y veamos en preferencias del sistema que el firewall esta deshabilitado ipfw seguira funcionando.

abre el Terminal y escribe:

sudo mdutil -a -i off

Si quieres quitar tambien el molesto icono de la barra superior escribe:

sudo chmod 600 /System/Library/CoreServices/Search.bundle/Contents/MacOS/Search

Por ultimo reiniciamos el servicio::

killall SystemUIServer

Y ya no funcionara mas.

March 3rd, 2010

Localizar IP (ShellScript)

No Comments, BSD, Mac OS X, Shell, by Falken.

Prerequisitos: Tener instalado ‘cURL‘, en Mac OS X ya viene de serie, para otros sistemas consultar su documentacion.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#! /bin/sh
 
if test $# = 0 || test "$1" = "-h"
then
    echo 'Usage: geoloc [[-f file] | [IP list]]'
    echo '(reads list of IP numbers from STDIN if no argument)'
    exit 0
fi
 
if test $# = 1
then
    curl http://www.geoiptool.com/en/?IP=$1 2>/dev/null | awk '
/<td.*>(Host Name|IP Address|Country|Region|City|Postal|Calling|Longitude|Latitude)/ {
record="t";gsub("[\t ]*<[^>]*>",""); printf("%-13s ",$0);next;
}
record == "t" { gsub("[\t ]*<[^>]*>[\t ]*","");print $0;record="f";next}
{next}
END{print ""}
'
else
    if test $# = 0;then flist=`cat`
    elif test "$1" = -f; then flist=`cat $2`
    else flist=$*
    fi
    for i in $flist
    do
	sh $0 $i
    done
fi
exit

Prerequisitos: Tener nociones de ‘Shell‘ (en este caso ‘bash‘) y de entornos ‘UNIX‘.

Mucha gente cuando habla de ‘Apple‘ o ‘Mac‘ habla de cacharros bonitos, faciles de usar, eficientes, etc…. sin embargo muy poca (entre la que me cuento yo) se fija en todo lo que hay por debajo, a dia de hoy un ordenador ‘Macintosh‘ no es mas que un ordenador normal y corriente como todos los demas pero con unas pequeñas diferencias, suelen estar mejor diseñados (que me lo digan a mi y a mi ‘Mac Pro‘ que solo he de soltar dos tornillos para desmontarlo pieza a pieza para poder limpiarlo) y en vez de ‘BIOS‘ tienen ‘EFI‘.

La gran baza y el motivo por el que uso casi siempre ordenadores ‘Mac‘ es por su sistema operativo ‘Mac OS X‘ que es un sistema operativo que pese a que tiene sus fallos (y no pequeños precisamente) es el sistema que mas flexibilidad, potencia y comodidad me ha ofrecido a la hora de trabajar cotidianamente, llevando mas de 16 años en este mundillo y habiendo probado a dia de hoy varias distribuciones de Linux (Gentoo, Debian, ArchLinux, openSUSE, Fedora) asi como varios BSD (FreeBSD, PC-BSD, OpenBSD) y por ultimo OpenSolaris al final siempre acabo volviendo a ‘Mac OS X‘ (a no ser que este haciendo algo muy especifico y necesite otro tipo de sistema, por ejemplo mi firewall esta construido sobre OpenBSD y no conozco nada mejor).

La base ‘UNIX‘ de ‘Mac OS X‘ le permite hacer correr todas las herramientas basadas en esta tecnologia pero por supuesto esto no viene de serie asi pues habremos de añadirle esta capacidad al sistema.

Que son los MacPorts:
Antes de saber que son los ‘MacPorts‘ debemos saber que es un ‘Sistema de Ports‘:

Extraido de la ‘Wikipedia‘:

Un port es un directorio que contiene los ficheros necesarios para compilar un nuevo paquete usando pkgmk, lo que significa que contiene por lo menos el archivo Pkgfile (que es el archivo con las reglas de compilación) y el fichero.footprint (que contiene una serie de pruebas regresivas y una lista con los archivos que se espera contendrá el paquete una vez compilado). Además, un port puede contener parches u otros ficheros necesarios para la compilación. Es importante notar que el código fuente no necesariamente se encuentra en el port, sino que el archivo Pkgfile contiene una URL apuntando a ellas, locación desde donde se pueden obtener las fuentes para luego compilarlas.

La palabra fue simplemente elegida a partir de aquél uso que se le da en FreeBSD, en la que port se entiende como una aplicación que ha sido adecuada y hasta modificada (es decir, portada) para funcionar en un sistema o arquitectura específicos.

La explicacion en lenguaje llano: ‘MacPorts‘ es un sistema de ports especifico para el sistema ‘Mac OS X‘ de ‘Apple Inc.‘ que le permite compilar e instalar herramientas que de otra forma no podrian usarse en ese ordenador.

Como se Instalan y usan los MacPorts:
Instalar los MacPorts es una tarea de lo mas trivial:

- Tener instaladas la ‘Xcode Tools‘ para dotar al sistema de la capacidad de compilar y crear archivos ejecutables, estas herramientas vienen en el mismo disco de ‘Mac OS X‘ en el apartado de instalaciones Opcionales.

- Descargar desde Aqui el archivo de sources de ‘MacPorts‘, escoger el archivo tar.gz con la numeracion mas alta nos garantiza la ultima version estable.

- descomprimimos el archivo y abrimos la linea de comandos, nos dirigimos al directorio donde estan los sources y ejecutamos:

./configure && make && sudo make install

En un momento dado nos pedira el password de administrador, se lo damos y acabara la instalacion (no tarda demasiado).

Despues añadiremos al archivo ~/.bash estas lineas:

1
2
3
4
export PATH=/opt/local/bin:/opt/local/sbin:$PATH
export MANPATH=/opt/local/share/man:$MANPATH
export DISPLAY=:0.0
export EDITOR=/usr/bin/nano

Tambien configuraremos el archivo /opt/local/etc/macports/macports.conf y nos aseguraremos de que la linea

#buildmakejobs 0

Quede asi (para que el compilador use todos los nucleos disponibles a la hora de compilar).

buildmakejobs 0

Cerramos la shell y la volvemos a abrir, la primera orden sera:

sudo port -vv fetchupdate

Con ello el sistema de ports se sincronizara con el servidor remoto y actualizara la base de datos y ya tendremos los ‘MacPorts‘ instalados y configurados.

El manual de ‘MacPorts‘ esta ‘Aqui‘ para profundizar mas sobre como usarlos y configurarlos yo ahora dare una breve reseña para buscar e instalar un programa para que ya el que haya llegado hasta aqui pueda empezar a trabajar con ello.

buscar un programa:

port search 'loquesea'

Instalar un programa:

sudo port -vv install 'loquesea'

A partir de aqui nuestro sistema dispone la posibilidad de instalar y usar todas las herramientas/programas tipicas de los sistemas ‘UNIX‘ .

March 3rd, 2010

Hello world!

No Comments, BSD, Mac OS X, Programming, by Falken.

C

1
2
3
4
5
6
7
#include <stdio.h>
 
 int main(void)
 {
    printf("Hello, world!\n");
    return 0;
 }

C++

1
2
3
4
5
6
#include <iostream>
using namespace std;
int main ()
{
   cout << "Hello, world!\n";
}

Objective C

Procedural C Version

1
2
3
4
5
6
7
#import <stdio.h>
 
int main (int argc, const char *argv[])
{
    printf ("Hello, world!\n");
    return 0;
}

Object-Oriented C Version

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#import <stdio.h>
#import <objc/Object.h> 
 
@interface Hello : Object
{
}
- hello;
@end 
 
@implementation Hello
- hello
{
   printf("Hello, world!\n");
}
@end 
 
int main(void)
{
   id obj;
   obj = [Hello new];
   [obj hello];
   [obj free];
   return 0;
}