TYPO3 Actualizacion de distintas instalaciones con distintas ramas

Actualmente en TYPO3 se estan mateniendo la rama 4.5 LTS, 4.6 y 4.7 de este CMS. Si teneis mas de una web y encima teneis que acordaros de que rama usa cada instalacion se os puede poner la neurona un poco al rojo vivo o almenos es lo que me pasa a mi :P

Por ello he escrito un bash script que me soluciona este tema

#!/bin/bash
update_site() {
    local site=$1
    USER=`ls -las /var/www/$site/web/index.php| cut -d " " -f 4`
    GROUP=`ls -las /var/www/$site/web/index.php| cut -d " " -f 5`

    rm -rf /var/www/$site/web/typo3.old
    rm -rf /var/www/$site/web/t3lib.old
    rm -rf /var/www/$site/web/index.php.old
    cp -Rp /var/www/$site/web/typo3 /var/www/$site/web/typo3.old
    cp -Rp /var/www/$site/web/t3lib /var/www/$site/web/t3lib.old
    cp -Rp /var/www/$site/web/index.php /var/www/$site/web/index.php.old
    cp -R /tmp/typo3_src-$VER/* /var/www/$site/web
    chown -R $USER:$GROUP /var/www/$site/web/index.php \
/var/www/$site/web/typo3 /var/www/$site/web/t3lib
}

declare -a T345
declare -a T346
declare -a T347

# Typo3 sites with 4.5 branch
T345[0]="misite45.net"
T345[1]="miotrasiteLTS.com"

# Typo3 sites with 4.6 branch
T346[0]="mi46.com"

# Typo3 sites with 4.7 branch
T347[0]="una47.com"

SRCDIR="/usr/local/src/typo3/"
rm -rf /tmp/typo3*

VER="4.5.22"
tar zxvf $SRCDIR/typo3_src-$VER.tar.gz -C /tmp/

for i in "${T345[@]}"
do
        update_site $i
done

VER="4.6.15"
tar zxvf $SRCDIR/typo3_src-$VER.tar.gz -C /tmp/

for i in "${T346[@]}"
do
        update_site $i
done

VER="4.7.7"
tar zxvf $SRCDIR/typo3_src-$VER.tar.gz -C /tmp/

for i in "${T347[@]}"
do
        update_site $i
done

Ahora “solo” os teneis que preocupar de ir manteniendo los fuentes en /usr/local/src/typo3/

Bon profit!

Reset RouterBoard SXT Series

This button has three functions. Hold the button, then apply power. Depending on when you release the button, it will do these things:

  • release immediately (0-5 seconds) after starting the device to load backup bootloader
  • release when user LED starts to flash to reset RouterOS (5-10 seconds)
  • release after user LED stops flashing to start Etherboot (Netinstall) mode (10+ seconds)

Y no te vuelvas loco :P

Haciendo un cronometro con arduino

Hace bastante tiempo que ando pensando en hacer un cronometro con arduino ya que es parte de un proyecto un poco mas grande, un lap timer, como este http://ucexperiment.wordpress.com/2012/02/18/arduino-ir-lap-timer/

Lo he hecho con :

  • Arduino Mega ( no tengo otra :P )
  • LCD 8×2
  • Un potenciometro para regular la luz del LCD
  • Unos cuantos cables de prototipado
  • Protoboard

Aqui va la foto del montaje :

Y aqui el codigo :

#include 
LiquidCrystal lcd(22, 24, 26, 9, 10,11, 12);

void setup() {
  Serial.begin(9600);
  lcd.begin(8,2);
  lcd.clear();
  lcd.setCursor(0,1);
  lcd.print("00:00:00");
}

unsigned long segundos_totales = 0;
unsigned long minutos = 0;
String segundos_str = "";
String minutos_str = "";

void loop() {
  segundos_totales = millis()/1000;

  String sDbg = String(millis());
  lcd.home();
  lcd.print(sDbg);

  lcd.setCursor(6,1);
  lcd.print(sDbg.substring(sDbg.length()-3,sDbg.length()-1));

  minutos = segundos_totales / 60;
  segundos_str = String(segundos_totales - (minutos * 60) );
  lcd.setCursor(3,1);
  if (segundos_str.length()==1){ lcd.print("0"); }
  lcd.print(segundos_str);

  minutos = segundos_totales / 60;
  minutos_str = String(minutos);
  lcd.setCursor(1,1);

  if (minutos_str.length()>1){lcd.setCursor(0,1);}
  lcd.print(minutos_str);
}

Espero ir evolucionando el proyecto e ir comentando los avances por aquí.

Arduino + Keypad for dummies

El problema de este montaje es minimo a nivel de codigo pero como me ha hecho perder demasiado tiempo para hacer cuadrar los pines aqui dejo la relacion entre el arduino mega y el keypad en cuestion.

Keypad Arduino
8 22
7 23
6 24
5 25
4 26
3 27
2 28
1 29

A continuacion el codigo que hace coger sentido a la tabla anterior:

#include <Keypad.h>

const byte ROWS = 4;
const byte COLS = 4;
char keys[ROWS][COLS] = {
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'*','0','#','D'}
};

byte rowPins[ROWS] = {22, 23, 24, 25};
byte colPins[COLS] = {26, 27, 28, 29}; 

Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

void setup(){
  Serial.begin(9600);
}

void loop(){
  char key = keypad.getKey();

  if (key){
    Serial.println(key);
  }
}

Facil ¿no? ;-)

Chuleta basica para usar git

  • clone : clona un repositorio en un nuevo directorio
  • checkout : cambiar a una rama diferente
  • pull : actualizar la copia de trabajo con el repositorio remoto
  • add : añade un archivo nuevo o cambios en los archivos existentes a tu repositorio local
  • commit : se aplican cambios en el repositorio local
  • diff : muestra las diferencias entre el repositorio local y el repositorio remoto
  • log : muestra la información de registro de Git
  • status : muestra el estado del árbol de trabajo
  • push : impulsar commits locales al repositorio remoto, requiere acceso de escritura

Envio de correo a traves de gmail con redmine

Redmine es un gestor de proyectos el cual te avisa mediante correo electrónico  de las nuevas tareas o cambios en las mismas. Aquí es donde entra GMail en acción ;-)

Dejo la configuración que me ha funcionado por si le puede servir a alguien o por si la puedo reusar yo mismo.

production:
  delivery_method: :smtp
  smtp_settings:
    enable_starttls_auto: true
    tls: true
    address: "smtp.googlemail.com"
    port: 587
    domain: "smtp.googlemail.com" # 'your.domain.com' for GoogleApps
    authentication: :plain
    user_name: "micorreo@gmail.com"
    password: "mipass!"

Mas info en : redmineblog.com

Publicando tus post de wordpress en linkedin

Si normalmente ya no hay tiempo para generar contenido para tu blog menos hay para mantener actualizadas tus redes sociales.

Con el siguiente enlace ya te puedes “despreocupar” de ir actualizando tus articulos en linkedin

http://thesocialmediaguide.com/social_media/sync-your-wordpress-blog-posts-with-your-linkedin-profile

Espero que os sea util, ahora solo me falta encontrar algo para google+ ;)

Chuleta CouchDB y Curl para desmemoriados (like me)

A CouchDB podemos acceder:

  • Desde el navegador http://localhost:5984/_utils/
  • Con curl desde la linea de comandos:
    • curl -X PUT http://localhost:5984/test/ # Creando BBDD
    • curl -X DELETE http://localhost:5984/test/ # Borrando BBDD
    • curl -X GET http://localhost:5984/test/_all_docs # Recibiendo todos los documentos
    • curl -X PUT -d “1″ http://localhost:5984/test/_revs_limit # Limitando el numero de revisiones a 1
    • curl -X POST -H “Content-Type: application/json” http://a:5984/_replicate -d ‘{“source”:”test”,”target”:”http://b:5984/test”,”continuous”:true}’ # Replicando test en la maquina b
    • curl -s -i -X POST -H ‘Content-Type: application/json’ -d ‘{ “reemplazar este texto por el codigo json de las vistas y/o filtros” }’ ‘http://localhost:5984/test/’ # Esta queda claro ¿no? ;)

Para las vistas consultar HTTP_view_API