Usar TimeMachine en un NAS

Por defecto, TimeMachine no permite usar nuestro NAS para guardar las copias de seguridad. Al principio tenía esa funcionalidad pero en el último momento, Apple decidió quitarla. Evidentemente, hay una forma de conseguirlo...

Ingredientes

  • Un NAS. Y bien configurado, es decir, que se vea desde vuestra red y con los permisos necesarios
  • El nombre de vuestro equipo
  • La MAC de vuestro Mac (valga la redundancia)
  • Un sparsebundle. Un sparsebundle es un sistema de ficheros virtual donde el TimeMachine hace todas sus cositas

Lo primero es hacer que el TimeMachine detecte las unidades de red. Para ello, tecleamos este comando en un Terminal:

defaults write com.apple.systempreferences TMShowUnsupportedNetworkVolumes 1

Ahora (igual os hace falta hacer un logout) TimeMachine verá las unidades de red pero, si intentamos usarla, dará un error. Para arreglar esto necesitamos crear un sparsebundle y copiarlo en la unidad de red que vayamos a usar con TimeMachine.

El comando para crear un sparsebundle es este:

sudo hdiutil create -size 110g -type SPARSEBUNDLE -nospotlight -volname "BackUp" -fs “Case-sensitive Journaled HFS+” -verbose ./Computername_MACaddress

110 es el tamaño en gigas. Suele ser buena idea ponerle el mismo tamaño que el disco duro de vuestro Mac (110 en mi caso). No olvidar la g que indica que son gigas...

BackUp es el nombre de la unidad que montara al hacer los backups. Se puede poner cualquier otro nombre, por supuesto.

Computername_MACaddress El nombre del sparsebundle tiene que seguir esta estructura, es decir, el nombre del equipo, guión bajo, numero MAC (todo seguido, solo los números y las letras). Algo así: RickBook_001ec4b8f9b3
El nombre del equipo supongo que lo sabréis, y la MAC se puede obtener con este comando:

ifconfig en0 | grep ether | sed s/://g | sed s/ether//

Una vez que se haya creado el sparsebundle (tarda poco), hay que copiarlo a la unidad de red que vayamos a usar con TimeMachine.

Una vez copiado, decidle a TimeMachine que haga su magia y... ¡listo!

La primera vez va a tener que copiar todo, así que es recomendable hacerlo por cable y tener paciencia. Las siguientes veces será incremental y dolerá menos...

Via: TimeMachine on NAS


Salim Ringtone

Espero que hayáis visto ya Slumdog Millionarie (y si no, corred a los cines, malditos!), posiblemente una de las mejores películas de este año (y eso que estamos en febrero...) y que tiene una OST magnifica.

Como me paso con Crank, el sonidito del móvil de Salim me gustó, así que...

Salim Ringtone

Clip de audio: Es necesario tener Adobe Flash Player (versión 9 o superior) para reproducir este clip de audio. Descargue la versión más reciente aquí. También necesita tener activado Javascript en su navegador.


Salim Ringtone (Long)

Clip de audio: Es necesario tener Adobe Flash Player (versión 9 o superior) para reproducir este clip de audio. Descargue la versión más reciente aquí. También necesita tener activado Javascript en su navegador.


El Secreto de la Felicidad

Esperar lo mejor y estar preparado para lo peor...

Lo jodido es conseguirlo...


Cita: ¿Estás herido?

- ¿Estás herido?
- La palabra es dañado...

Six a Baltar. Battlestar Galactica


Converse

Converse en flickr

Converse en flickr


Barca

Barca en flickr

Que gran quedada la de ayer!

Barca en flickr


Rio

Rio en flickr

Una de las pocas fotos decentes que saque en la quedada de este sábado :)

Aunque la verdad es que eso es lo de menos: me lo pase genial todo el día, aprendí un montón de fotografía de gente que controlaba mucho y, lo más importante, conocí a gente majísima que también tiene uno de mis múltiples (pero sanos) vicios :)

Rio en flickr


How add options to your WordPress 2.7 dashboard widgets

Well, in this article, I assume you have read the WP Engineer's excellent post Add WordPress Dashboard Widgets, because his code will be our start point.

So, we have this code:

  1.  
  2.  
  3. // Load up the localization file if we're using WordPress in a different language
  4. // Place it in this plugin's folder and name it "MainFunction-[value in wp-config].mo"
  5. load_plugin_textdomain( 'MainFunction', '/wp-content/plugins/MainFunction' );
  6.  
  7. /**
  8.  * Content of Dashboard-Widget
  9.  */
  10. function MainFunction() {
  11. echo 'Test Add Dashboard-Widget';
  12. }
  13.  
  14. /**
  15.  * add Dashboard Widget via function wp_add_dashboard_widget()
  16.  */
  17. function MainFunction_Init() {
  18. wp_add_dashboard_widget( 'MainFunction', __( 'MainFunction Widget Title' ), 'MainFunction' );
  19. }
  20.  
  21. /**
  22.  * use hook, to integrate new widget
  23.  */
  24. add_action('wp_dashboard_setup', 'MainFunction_Init');
  25.  

OK, now, remenber the wp_add_dashboard_widget function?

  1. function wp_add_dashboard_widget( $widget_id, $widget_name, $callback, $control_callback = null )

The $control_callback parameter (obviously optional) is our main target. It gives the 'Configure' option to our spiffy widget.
So, we need to add a 4th parameter to wp_add_dashboard_widget:

  1. wp_add_dashboard_widget( 'MainFunction', __( 'MainFunction Widget Title' ), 'MainFunction', 'MainFunction_Setup');

The MainFunction_Setup function handles two things: the options (set the default options, recolect new values, etc) and the option's presentation (i.e. the HTML part)

So, here goes the code:

  1.  
  2.  
  3. function MainFunction_Options() {
  4. $defaults = array( 'items' => 5, 'boolean' => 1);
  5. if ( ( !$options = get_option( 'MainFunction' ) ) || !is_array($options) )
  6. $options = array();
  7. return array_merge( $defaults, $options );
  8. }
  9.  
  10. function MainFunction_Setup() {
  11.  
  12. $options = MainFunction_Options();
  13.  
  14.  
  15. if ( 'post' == strtolower($_SERVER['REQUEST_METHOD']) && isset( $_POST['widget_id'] ) && 'MainFunction' == $_POST['widget_id'] ) {
  16. foreach ( array( 'items', 'boolean' ) as $key )
  17. $options[$key] = $_POST[$key];
  18. update_option( 'MainFunction', $options );
  19. }
  20.  
  21. ?>
  22. <p>
  23. <label for="items"><PHP _e('How many items?', 'MainFunction' ); ?>
  24. <select id="items" name="items">
  25. <PHP
  26. for ( $i = 5; $i <= 20; $i = $i + 1 )
  27. echo "<option value='$i'" . ( $options['items'] == $i ? " selected='selected'" : '' ) . ">$i</option>";
  28. ?>
  29. </select>
  30. </label>
  31. </p>
  32.  
  33. <p>
  34. <label for="boolean">
  35. <input id="boolean" name="boolean" type="checkbox" value="1"<PHP if ( 1 == $options['boolean'] ) echo ' checked="checked"'; ?> />
  36. <PHP _e('Activate boolean?', 'MainFunction' ); ?>
  37. </label>
  38. </p>
  39. <PHP
  40. }
  41.  

As you can see, MainFunction_Options puts the default values (if necessary, of course) and MainFunction_Setup show the current values and let change them. You can merge this two, of course...

Now, we have to get the options and use them in our MainFunction function. Change MainFunction like that:

  1.  
  2. /**
  3.  * Content of Dashboard-Widget
  4.  */
  5. function MainFunction() {
  6.  
  7. $widget_options = MainFunction_Options();
  8.  
  9. echo 'Test Add Dashboard-Widget<br />';
  10. echo "You have selected $widget_options['items'] items<br />";
  11. echo "boolean is $widget_options['boolean']<br />";
  12.  
  13. }
  14.  

The complete code here:

  1.  
  2. <PHP
  3.  
  4. // Load up the localization file if we're using WordPress in a different language
  5. // Place it in this plugin's folder and name it "MainFunction-[value in wp-config].mo"
  6. load_plugin_textdomain( 'MainFunction', '/wp-content/plugins/MainFunction' );
  7.  
  8.  
  9. /**
  10.  * Content of Dashboard-Widget
  11.  */
  12. function MainFunction() {
  13. $widget_options = MainFunction_Options();
  14.  
  15. echo 'Test Add Dashboard-Widget<br />';
  16. echo "You have selected $widget_options['items'] items<br />";
  17. echo "boolean is $widget_options['boolean']<br />";
  18. }
  19.  
  20. /**
  21.  * add Dashboard Widget via function wp_add_dashboard_widget()
  22.  */
  23. function MainFunction_Init() {
  24. wp_add_dashboard_widget( 'MainFunction', __( 'MainFunction Widget Title' ), 'MainFunction' , 'MainFunction_Setup' );
  25. }
  26.  
  27. function MainFunction_Options() {
  28. $defaults = array( 'items' => 5, 'boolean' => 1);
  29. if ( ( !$options = get_option( 'MainFunction' ) ) || !is_array($options) )
  30. $options = array();
  31. return array_merge( $defaults, $options );
  32. }
  33.  
  34. function MainFunction_Setup() {
  35.  
  36.  
  37. $options = MainFunction_Options();
  38.  
  39.  
  40. if ( 'post' == strtolower($_SERVER['REQUEST_METHOD']) && isset( $_POST['widget_id'] ) && 'MainFunction' == $_POST['widget_id'] ) {
  41. foreach ( array( 'items', 'boolean' ) as $key )
  42. $options[$key] = $_POST[$key];
  43. update_option( 'MainFunction', $options );
  44. }
  45.  
  46. ?>
  47. <p>
  48. <label for="items"><PHP _e('How many items?', 'MainFunction' ); ?>
  49. <select id="items" name="items">
  50. <PHP
  51. for ( $i = 5; $i <= 20; $i = $i + 1 )
  52. echo "<option value='$i'" . ( $options['items'] == $i ? " selected='selected'" : '' ) . ">$i</option>";
  53. ?>
  54. </select>
  55. </label>
  56. </p>
  57.  
  58. <p>
  59. <label for="boolean">
  60. <input id="boolean" name="boolean" type="checkbox" value="1"<PHP if ( 1 == $options['boolean'] ) echo ' checked="checked"'; ?> />
  61. <PHP _e('Activate boolean?', 'MainFunction' ); ?>
  62. </label>
  63. </p>
  64. <PHP
  65. }
  66.  
  67. /**
  68.  * use hook, to integrate new widget
  69.  */
  70. add_action('wp_dashboard_setup', 'MainFunction_Init');
  71.  
  72. ?>
  73.  

You can view a PHPS version (without PHP crippled tags) here.


Fotografía Digital para Dummies

Hace tiempo que me compré una DSLR (una Canon EOS400D para ser exactos) pero, por unas cosas y otras y entre pitos y flautas, no he podido dedicarle apenas tiempo y apenas la he usado. Pero uno de mis propósitos de año nuevo es cogerla más y aprender a usarla como $DEITY manda.

Como cursos online (en castellano), los más completos para mi son el Curso de Fotografía de XatakaFoto y TheWebfoto, sin olvidarnos de dZoom, con todos sus tutoriales explicados de forma muy didáctca.

También tenemos videocursos, como por ejemplo el de Tripode

En formato podcast (tanto video como audio) tenemos el excelente podcast de Guillermo Flores (Gracias a Appleando por recordármelo)

Por último tenemos los libros. Hay multitud de ellos, enfocados a igual multitud de temas, cámaras, etc..
Aquí os dejo un par de ellos que he encontrado por ahí (en ingles, eso si):

Digital SLR Cameras and Photography for Dummies
Rapidshare / Megaupload
Canon EOS Digital Rebel XTi (400D) for Dummies
Rapidshare / Megaupload

Con todo este material y (lo más importante) tiempo y paciencia, malo será...

Bonus: El manual de la 400D


Nuevo Wallpaper: Great Wave

Como soy culo de mal asiento, de vez en cuando me da por cambiar de fondo de pantalla. Y como ahora tengo un iPhone, pues se me ha pegado la pijería y tengo que tener el mismo en todos los ordenadores/cacharros...

En este caso es un wallpaper basado en la obra mas conocida de Hokusai, La Gran Ola de Kanagawa

Bonus: Mi selección de wallpapers para el iPhone


Pages: « 1 2 3 4 5 6 7 8 ... 44 45 46 »

Oportunidades

Al iniciarse en la fotografía a un nivel más profesional es recomendable comprar equipo de segunda mano, hasta que uno está seguro de elegir la cámara que más le conviene. Son muchas las páginas donde se puede comprar cámaras de segunda mano, por ejemplo Mundoanuncio.com...

Archivos

Últimos Comentarios

  1. G

    Aw, this was an extremely good post. Spending some time and actual effort to generate a top notch article… but what can I say… I hesitate a whole lot and never seem to get

    screenshot @ How add options to your WordPress 2.7…
  2. G

    Please visit this site ikstore.net. This Site is world popular site

    Ikstore @ Londres: buscar trabajo
  3. G

    95 Jonathan Babineaux Jersey.80 Levine Toilolo Jersey-Welcome to buy cheap wholesale nhl discount jerseys with free shipping and best service in our jerseys online shop.

    95 Jonathan Babineaux Jersey @ Twitter (y ahora Buzz): El basurero di…
  4. G

    Great plugin! Thank's a lot!

    Vasil Bekyarov @ RSS Stream
  5. G