Javascript: convertir una cadena CSV en un array.

Vamos con un tip rápido de Javascript ¿cómo convertimos en un array una cadena de valores separados por comas? (en una entrada antigua hicimos el proceso contrario) Es bastante sencillo lograrlo:

var sabbath = 'ozzy,iommi,bill,geezer';
var sabbath_array = sabbath.split(",")

Basta con usar la función split() pasándole la coma como parámetro para que cree un array con tantas posiciones como valores separados por coma haya en la cadena.

Anuncios

Crear un RAID 0 en Linux mediante mdadm

El otro día hablamos sobre la existencia de mdadm y cómo instalarlo en nuestra distribución Linux. Hoy vamos a ver cómo usarlo para crear un RAID 0.

En fin, os vais a las instrucciones del otro día para instalar mdadm, y cuando lo tengáis instalado comprobáis en /proc/mdstat que no haya ningún array creado (no debería). Para este ejemplo vamos a suponer que tenemos cuatro discos duros: sda1,sdb1,sdc1,sdd1.

El primer paso es editar el archivo /etc/mdadm.conf y añadir los parámetros DEVICE y ARRAY correspondientes:

DEVICE /dev/sd[abcd]1
ARRAY /dev/md0 devices=/dev/sda1,/dev/sdb1,/dev/sdc1,/dev/sdd1

Una vez configurado el archivo nos toca ejecutar el comando mdadm para crear el array de discos y que se inicie:

mdadm -C /dev/md0 --level=raid0 --raid-devices=4 /dev/sda1 /dev/sdb1 /dev/sdc1 /dev/sdd1

Tras eso nos pedirá permiso para continuar creando el array, así que basta con contestar yes para terminar.

Una vez creado el array de discos podemos consultarlo con el comando mdadm –detail /dev/md0 desde el que podremos ver todos los datos del nuestro RAID.

Producto cartesiano de dos arrays en Ruby

Bueno, sigo con el curso de SAAS de Berkeley, y me ha dado por poner otro ejercicio (bueno, realmente es que llevo días sin escribir, estoy sin ideas y como acabo de hacerlo…). En este caso el último del “homework 1”, que ha sido todo un alivio porque me esperaba algo jodidérrimo pero… no, para nada, es una chorrada tan gorda como hacer una clase con un método each que muestre el producto cartesiano de dos arrays:

class CartesianProduct
  include Enumerable
  def initialize(col1, col2)
    @col1 = col1
    @col2 = col2
  end

  def each
    return to_enum unless block_given?
    @col1.each do |x| 
      @col2.each { |y| yield [x, y] }
    end
  end
end

Como ya ves el constructor de la clase recibe dos arrays (col1 y col2) para inicializar el objeto, y por otra parte el método each recorre el primero cruzando cada elemento con todos los elementos del segundo (de ahí que haya un each dentro de otro each).

Fácil, rápido y barato… por decir algo.

Ordenando un array multidimensional por un campo en PHP

Aunque había pensado publicar “como hacer una encuesta en la que no pueda votar ni dios para así poder inventarte el resultado tranquilo” no lo haré porque se me han adelantado los del diario ABC. En lugar de eso he pensado que a alguien podría interesarle una función que ordene un array multidimensional por un campo en concreto.

La función en si recibirá tres parámetros: el array, el nombre del campo y un valor booleano que indique si se querrá en orden inverso o no. Podéis ver este ejemplo de código:

function orderMultiDimensionalArray ($array, $campo, $invertir) {
    $posicion = array();
    $newRow = array();
    foreach ($array as $key => $row) {
            $posicion[$key]  = $row[$campo];
            $newRow[$key] = $row;
    }
    if ($invertir) {
        arsort($posicion);
    }
    else {
        asort($posicion);
    }
    $arrayRetorno = array();
    foreach ($posicion as $key => $pos) {
        $arrayRetorno[] = $newRow[$key];
    }
    return $arrayRetorno;
}

La función asort ordena un array por los valores que contiene en orden de menor a mayor (si hay valores numéricos los pondrá antes que los alfabéticos). El caso de arsort es el mismo sólo que inverso, ordena de mayor a menor.

Ya véis que es sencillo y no tiene mucha ciencia. Existe también la función ksort (con su versión “reverse”, la función krsort) que también ordena, pero en lugar de ordenenar por el valor lo hace por el índice.