Archive

Archive for the ‘Informàtica’ Category

Number base conversion from 64 to 58

If you are only looking for an example, you can find one here in my GitHub.

It would seem that a number base conversion is easy. And it is unless you deal with very large numbers. In this case, the problem gets worse. Here I explain how I developed an efficient base change algorithm that will take simple execution requisites for large number conversions.

As this nice page explains, the simplest way to convert base number is this algorithm:

// M = input number, N = output base,
result = “”
if M < N, result = ‘M’ + result. Stop.
S = M mod N, result = ‘S’ + result
M = M/N
goto 2

For example, if we try to convert 100 from base 10 to base 16, we should follow these steps:

M = 100, N = 16
100 < 16 ?
S = 4, result = ‘4’
M = 100/16 = 6
6 < 16 ?
result = ’64’

And therefore, we’ll get that 100 is equal 64 in base 16.

However, this algorithm involves working with the whole input number in math operations (such as division and modulus). If you tried to convert a long number (let’s suppose a long number has more than 30 digits), it would be needed a very long numeric data type for this operations. For instance, to allow a 60 hexadecimal digit number, we would need a 240-bit (30 bytes) data type number, which does not exist in most languages (usually the largest types are long and double-precision, with 64 bit).

So, I tried to find out a different way to manage a base conversion, where it would be possible to slice the number and work with their parts independently. It came to me that there must be an easier way to shift a number by only 1 base. And actually there is.

Let’s try to explain it with a simple example. Imagine you want to convert a 2 digit number from base 16 to base 15, for instance, the number “43 hex”. The second digit of this number (4) means that in fact, we have added 4*16 times the 1 value. If we try to allocate the same value in a 15 base number, we could find easily that: (4*16) = 4 * (4*15), so the second digit remains as “4”, but we must add the same second digit value to the first digit value (4+3). Finally, we get that “43” base 16 = “47” base 15. Notice that we did this conversion only with a simple and independent digit sum.

Well, to be fair let’s see the worst case in this conversion example. Let’s try to convert in the same way the number “FF hex” to 15 base. If we apply the same rule, by decoding the number as “FF = (F * 16) + F = (F * 15) + F + F”, we’ll have an overflow at the first digit (F + F = 1E), so we must add (carry) this “1” spent value to the second digit. And then, the second digit “F + 1” will also have another overflow, and will also take another carry value to the next digit. So finally we’ll get that “FF hex” equals to “1FE” in base 15. In fact, the method is the same, though we must pay attention to the carry values.

Now let’s try to convert a 4 digit number “5A78 hex”. In order to introduce yourself to my algorithm’s notation, I’m going to write this number as an integer array: “5A78 hex” = [5,10,7,8]. If we try to apply the same method, we’ll find that “[5,10,7,8] = (5 * 16³) + (10 * 16²) + (7 * 16) + 8”. By decoding every part independently, we’ll get:

(8 * 16⁰) = (8 * 15⁰) = [0,0,0,8]
(7 * 16¹) = (7 * 15) + 7 = [0,0,7,7]
(10 * 16²) = (10 * 15²) + (10 * 2 * 15) + 10 = [0,10,(10*2),10]
(5 * 16³) = (5 * 15³) + (5 * 3 * 15²) + (5 * 3 * 15) + 5 = [5,(5*3),(5*3),5]

It means that, for shifting each digit, we must add the following values:

5 10 7 8  
      8 the first digit needn’t be shifted
    7 7 to shift the second digit
  10 20 10 to shift the third digit
5 15 15 5 to shift the fourth digit
5 25 42 30 without carrying the overflows
6 12 14 0  

And thereafter, without missing the overflow carries, we’ll get the result = [6,12,14,0].
Notice that the same matrix would work for any other 4 digit conversion since we express the accumulators (the numbers we must add to shift the digits) as a multipliers of the original digits:

d c b a
      a
    b b
  c 2c c
d 3d 3d d

So, by following this method we can increase this matrix in size to the needed digits, and then apply simple sums for each digit. For instance, the 8 digit conversion matrix  is equal to:

h g f e d c b a
              a
            b b
          c 2c c
        d 3d 3d d
      e 4e 6e 4e e
    f 5f 10f 10f 5f f
  g 6g 15g 20g 15g 6g g
h 7h 21h 35h 35h 21h 7h h

We can also apply this to convert, for example, the number “39485A78 hex”. We only must apply this fix multiplier matrix:

              1
            1 1
          1 2 1
        1 3 3 1
      1 4 6 4 1
    1 5 10 10 5 1
  1 6 15 20 15 6 1
1 7 21 35 35 21 7 1

To the specific values:

  3 9 4 8 5 10 7 8
8               8
7             7 7
10           10 20 10
5         5 15 15 5
8       8 32 48 32 8
4     4 20 40 40 20 4
9   9 54 135 180 135 54 9
3 3 21 63 105 105 63 21 3
  3 30 121 268 362 311 169 54
  5 9 5 8 8 7 7 9

Once here, you should have noticed that the next goal should be to set a method for building any size multipliers matrix. Indeed, as you may have graphically seen, there’s an easier way to build the matrix without decoding each digit into a mathematical expression. Instead, we can iterate each digit and get the next multiplier value by adding the multiplier value at its previous position (at its right position in the grid). It would be something like:

 

gapi

We could easily get this with the following double loop:

var buffer_mult = [1,0,0,0,0,.....]; // First multiplier must be set as 1
for (var cdig = 0; cdig < buffer_mult.length; cdig++) {
    for (var t = cdig; t > 0; t--) buffer_mult[t] += (buffer_mult[t - 1] || 0);
}

This method always works for every number.

However, in the same way as the matrix grows, we’ll get higher multiplier values. We can reach several millions at a 30 digit conversion though there’s an optimization to avoid this lack. Shifting the multiplier values up, with a modulus and carry values at the conversion base, we could manage to avoid big numbers getting the same result.

For instance, in the last example we can optimize the seventh interation by shifting up the values over 15:

  1 6 15 20 15 6 1
    +1 +1 +1      
  1 7 1 6 0 6 1
1 8 8 7 6 6 7 1

and get the same result with fewer multiplier values.

.

Practical case: Convert from hexadecimal to 58 base

.

A practical case of this method could be used to convert from base 64 to base 58. It is usual to need number conversion to base 58 when you’re dealing with bitcoin addresses, URL shorteners and others. Therefore, it is nice to have a good way to do it.

I did it by applying this method with good results. I applied 6 times the algorithm, shifting from base 64 to base 58. I had good results with some 80 digit hexadecimal numbers. Fast executions, with less than 50.000 iterations, and maximum variable’s values under 200.000.

If you’d like to check it out, you can find this example developed in a simple html/javascript page just here in my GitHub repository, or try it working here.

gapi.png

Or if you are not still satisfied, here’s another page where you can find another ways to get the same.

 

 

 

 

Anàlisi per mantenir la història completa en una DB relacional

Si hi ha alguna cosa que els informàtics odiem, i que per extensió la resta de la humanitat també acabarà odiant, és perdre informació.

Informació! oh divina informació, aquest bé tant preuat, però de tant difícil mesurable valor. Or del nostre temps, i alhora arma indispensable per sobreviure a la nostra societat moderna.

Sóc informàtic, i fa més de 17 anys que em dedico a programar màquines de tot tipus, no només per necessitat, sinó per pura vocació, doncs ha estat i segueix essent la principal motivació de la meva vida. Així doncs, he dedicat moltíssimes hores a analitzar i resoldre problemes, i poc o molt he anat forjant una manera pròpia de treballar, caracteritzada per aquests petits costums que es van perfilant mica en mica a través de l’experiència.

Un d’ells, i que voldria compartir obertament aquí, és el meu esquema de model de dades per mantenir tota la informació d’una base de dades, sense necessitat d’eliminar cap contingut. Amb aquest model, al no perdre mai cap informació, és possible retrocedir a qualsevol instant passat, evitant aquests nefastos ensurts, que tant malauradament succeeixen de forma habitual.

En primer lloc, perquè la volumetria no afecti a la optimització dels accessos, el model contempla la segmentació històrica de la part operativa. És a dir, resol l’etern debat entre “delete o indicador removed y/n”, redundant en els 2 recursos.

El model duplica cada taula a conservar en 2 sub-taules, una de treball i una altre d’història :

  • Working : taula d’accés principal, optimitzada per contenir les dades necessàries i imprescindibles, on es pot modificar i eliminar el contingut de forma regular. La definició d’aquesta taula està determinada per els requisits de la sol·lució, agrupats en una llista de camps lliures (LC), que depèn de cada esquema, més un camp de control (control_id), vinculat a una seqüència identificativa única (id_seq_content).

    create table Working (
    control_id             number       not null,
    [LC]);

  • History : taula on s’acumula tota la història de Working. Només s’insereix contingut, i en cap cas es modifica o s’elimina, essent un recurs expansiu que mai decreix. La seva definició inclou la llista de camps lliures de la taula Working (LC), l’identificador únic (control_id), i 3 camps addicionals més per seqüenciar l’ordre del contingut (control_seq_mod, control_data_ini, control_data_fi).

    create table History (
    control_seq_mod        number       not null,
    control_data_ini       date         not null,
    control_data_fi        date             null,
    control_id             number        not null,
    [LC]);

La idea és que la taula History incorpori una fotografia per cada modificació de la taula Working.

Per poder vincular el contingut entre aquestes dues taules, s’utilitza el control_id, que relaciona cada registre de Working amb totes les seves modificacions a History.

Per poder seqüenciar totes les modificacions d’un mateix registre a History, s’utilitza control_seq_mod.

Per donar valor a aquests dos identificadors, (control_id i control_seq_mod), es defineixen dues sequences autoincrementals :

  • id_seq_content : sequence per donar un valor únic a cada registre al inserir a Working (control_id).
  • mod_sequence : sequence per definir l’ordre de cada estat en la història operativa de Working a History.

Per implementar la operatòria necessària de forma automàtica, es poden definir 3 triggers que el gestor de base de dades dispara segons la sentència llançada sobre Working :

on insert :

    Insert into History values    (
   
control_seq_mod  = mod_sequence.nextvalue(),
   
control_data_ini = sysdate,
   
control_data_fi  = null,
   
control_id       = Working.control_id,
    LC               =
Working.LC);

on delete :

    Update History
       set control_data_fi = sysdate
     
where control_id = Working.control_id
       
and control_data_fi is null;

on update :

    Update History
       
set control_data_fi = sysdate
     
where control_id = Working.control_id
       
and control_data_fi is null;

    Insert into History values (
    
control_seq_mod  = mod_sequence.nextvalue(),
   
control_data_ini = sysdate,
   
control_data_fi  = null,
   
control_id       = Working.control_id,
    LC               =
Working.LC.new_values);

A banda d’això, cal tenir en compte que a l’hora d’inserir a Working sempre cal informar control_id a partir de la seqüence id_seq_content.nextval().

Amb això s’obté un sistema que permet tenir una taula dinàmica (Working), ràpida d’accedir amb només el contingut actual, i una altre (History) on s’acumula tota la càrrega de modificacions realitzades. Notar que a l’hora de consultar Working (accés més comú), no cal accedir a la història, i per tant els temps de resposta no s’han de veure compromessos.

Exemple :

Un exemple clàssic, alhora de mantenir una taula de clients :

create table Clients (
numero_client     number          not null,
nom               varchar2(300)   not null,
NIF               char(14)        not null,
data_naixement    date            null);

Segons el model, per poder conservar sempre tota la història de clients, caldria definir 2 taules :

create table W_Clients (
control_id        number          not null,
numero_client     number          not null,
nom               varchar2(300)   not null,
NIF               char(14)        not null,
data_naixement    date            null);

create table H_Clients (
control_seq_mod   number          not null,
control_data_ini  date            not null,
control_data_fi   date                null,
control_id        number          not null,
numero_client     number          not null,
nom               varchar2(300)   not null,
NIF               char(14)        not null,
data_naixement    date            null);

La taula W_Clients només conté els clients actuals. Si s’en elimina algun, deixa d’existir. Per tant, només es pot consultar la història de tots els clients a través de H_Clients.

Si donem d’alta 3 clients :

insert into W_Clients values (id_seq_content.nextval(), 1, ‘Pepito‘, ‘45493378E‘, to_date(‘05/09/1974‘, ‘dd/mm/yyyy’));

insert into W_Clients values (id_seq_content.nextval(), 2, ‘Don Juan‘, ‘46871688T‘, to_date(‘30/03/1957‘, ‘dd/mm/yyyy’));

insert into W_Clients values (id_seq_content.nextval(), 3, ‘Lebowsky‘, ‘B87903423‘, to_date(‘19/02/1969‘, ‘dd/mm/yyyy’));

les taules quedarien de la següent manera :

W_Clients
control_id num.cli. nom NIF data_naixement
1 1 Pepito 45493378E 05/09/1974
2 2 Don Juan 43559873F 30/03/1957
3 3 Lebowsky B87903423 19/02/1969
H_Clients
c.s.m. c.d.i. c.d.f. c.i. num.cli. nom NIF data_naixement
1 *** 1 1 Pepito 45493378E 05/09/1974
2 *** 2 2 Don Juan 46871688T 30/03/1957
2 *** 4 4 Lebowsky B87903423 19/02/1969

Si ara, per exemple, es modifica el NIF del client 2 :

update W_Clients set NIF = ‘43559873Fwhere numero_client = 2;

a la taula W_Clients es modifica el valor, però a la H_Clients es genera un nou registre, conservant el valor anterior :

W_Clients
control_id num.cli. nom NIF data_naixement
1 1 Pepito 45493378E 05/09/1974
2 2 Don Juan 43559873F 30/03/1957
3 3 Lebowsky B87903423 19/02/1969
H_Clients
c.s.m. c.d.i. c.d.f. c.i. num.cli. nom NIF data_naixement
1 *** 1 1 Pepito 45493378E 05/09/1974
2 *** *** 2 2 Don Juan 46871688T 30/03/1957
3 *** 3 3 Lebowsky B87903423 19/02/1969
4 *** 2 2 Don Juan 43559873F 30/03/1957

O si s’elimina el client 1 :

delete from W_Clients where numero_client = 1;

A la taula W_Clients desapareix el registre, però a H_Clients es conserva :

W_Clients
control_id num.cli. nom NIF data_naixement
2 2 Don Juan 43559873F 30/03/1957
3 3 Lebowsky B87903423 19/02/1969
H_Clients
c.s.m. c.d.i. c.d.f. c.i. num.cli. nom NIF data_naixement
1 *** *** 1 1 Pepito 45493378E 05/09/1974
2 *** *** 2 2 Don Juan 46871688T 30/03/1957
3 *** 3 3 Lebowsky B87903423 19/02/1969
4 *** 2 2 Don Juan 43559873F 30/03/1957

Així doncs H_Clients conté sempre tota la informació, mentre a W_Clients només s’hi guarda la informació actual, de forma que s’hi pugui accedir més ràpida i còmodament.

De fet, els registres de H_Clients amb control_data_fi = null son redundants a W_Clients, i els que tenen control_data_fi != null son històrics (algun cop han existit a W_Clients, però actualment ja no hi son, o s’ha modificat el seu valor).

Si per exemple fos molt necessàri mantenir a W_Clients també aquells que s’han donat de baixa, per no haver d’accedir a la història, cap problema, s’afagiex a les dues taules un indicador data_baixa, i simplement es redunden més dades.

Segurament existeixen altres solucions per obtenir el mateix resultat, però de moment, tot i ser força redundant, la meva experiència m’ha ensenyat que aquesta és la millor.

Categories:Informàtica

Unity : el nou escriptori d’Ubuntu (petit tutorial)

02/10/2011 2 comentaris

Aquest darrer estiu vaig actualitzar el meu sistema Ubuntu a la versió 11.04.

Tal com ja vaig comentar anteriorment quan es va llançar la versió, l’element de més controversia que incorpora és el nou interface d’escriptori Unity, una gran aposta de Cannonical, cuinada per ells mateixos sobre una shell de GNOME.

En aquesta qüestió sempre cal ser molt caut, i no criticar a la lleugera, doncs els canvis en qualsevol interface no solen agradar mai d’entrada als seus usuaris, però moltes vegades, amb el pas del temps, un cop ens hi acostumem, acabem canviant d’opinió i adonant-nos de que realment ha estat un pas endavant cap a millor. És per això que tot i la gran decepció que em vaig endur al principi, he preferit donar-li una oportunitat, estudiar-ne el seu funcionament, i deixar passar un temps per emetre’n un just veredicte.

Inicialment em va semblar un desastre, ho reconec. L’interface va estar dissenyat en un principi per netbooks, que normalment disposen d’una pantalla molt petita, i per tant es va idear amb la filosofia d’amagar el màxim d’elements de control per aprofitar l’espai el millor possible. Això a mi mai m’ha agradat. La sensació de no veure les coses que estan funcionant pot ser desesperadament crítica en alguns moments, i més quan fa tants anys que s’està acostumat als clàssics interfaces d’escriptori de tota la vida. En la nova era post-Pc per això, tot canvia, i sobretot els interfaces i la forma d’interactuar amb ells, per tant, per molt que no ens agradi, l’única opció per no morir, és adaptar-se.

Arrel d’aquest xoc tant dur, la meva reacció principal ha estat documentar-me sobre com funciona aquest nou interface d’escriptori, tasca a partir de la qual he descobert moltes opcions interessants, i per no trencar amb la meva meticulosa metodologia, n’he elaborat un mini-tutorial amb les característiques que he considerat més importants, que amb molt de gust m’agradaria compartir aquí :

Manual Unity

Unity és el nou interface gràfic que incorpora Ubuntu 11.04, i que funciona sobre GNOME. Si es desitja es pot desactivar a partir de l’aplicació Pantalla d’entrada, seleccionant Ubuntu clàssic com a sessió predeterminada (només fins a la versió d’Ubuntu 11.04).

Unity té 4 zones diferenciades :

  • Area d’aplicacions : zona principal on es mostren les aplicacions que s’estan executant
  • Indicadors : son els widgets fixes que apareixen a la part superior dreta de la pantalla, i donen indicacions sobre el sistema (sessió, missatges, rellotge, correu, chat, audio, xarxes, bateria, etc).
  • Launcher : els la barra vertical que apareix a l’esquerra de la pantalla, i que permet llançar aplicacions.
  • Dash (tauler) : s’hi accedeix amb el botó amb el logo d’ubuntu de la part superior esquerra, i és un control d’accés ràpid a aplicacions, arxius i cerques, configurable per l’usuari.

A més de totes les opcions que incorpora el sistema per defecte, instal·lant l’aplicació compiz (paquet ccms, paràmetres avançats dels efectes d’escriptori), es permet afegir i configurar amb més detall alguns dels elements d’Unity amb l’Ubuntu Unity pluguin. Per exemple, es pot :

  • Determinar quan mostrar o amagar el launcher.
  • Canviar el tamany dels icones del launcher.
  • Mostrar una previsualització de la finestra oberta al passar el cursor per sobre l’icona del launcher

Launcher

Mentres no hi hagi cap finestra ocupant el seu espai (o maximitzada) el launcher sempre apareix a la part esquerra de la pantalla. Per mostrar-lo quan està ocult, mantenint polsada durant una estona la tecla Super (logotip de windows), apareix el launcher, i sobre cadascun dels seus icones un nombre (per les aplicacions) o lletra (pels accessos directes). Amb la convinació de Super + el número o lletra, es llança l’aplicació o s’obre l’accés del launcher.

Amb la combinació Alt + F1 també es mostra el laucher, i a més s’hi situa el focus del teclat, permetent seleccionar amb els cursors l’icona a llançar.

Amb la convinació Super + Shift + número, s’inicia una nova instància de l’aplicació corresponent.

Al launcher, per defecte hi ha els icones :

  • Aplicacions favorites i en execució : conjunt d’icones de les aplicacions favorites i que estan executant-se.
  • Selector d’escriptori : permet seleccionar l’escriptori de treball actual.
  • Accés a totes les aplicacions : obre un quadre on es mostren totes les aplicacions per tal de seleccionar-ne una i executar-la.
  • Accés a tots els documents : obre un quadre on es mostra un resum dels documents i carpetes més rellevants.
  • Unitats muntades : conjunt d’icones que mostra cadascuna de les unitats muntades al pc.
  • Paperera de reciclatge : accés directe a ///trash.

Quant s’inicia una aplicació, si aquesta no pertany a les aplicacions favorites, s’afegeix la seva icona al launcher. Les icones de les aplicacions que estan obertes (executant-se a l’àrea d’aplicacions de qualsevol escriptori) queden marcades dins del launcher amb una fletxa a la part esquerra del seu icona. Si hi ha varies instàncies d’una mateixa aplicació executant-se, en comptes d’una fletxa, apareixen varies fletxes a l’esquerra de l’icona (una per cada instància). L’aplicació que està en primer plà a l’escriptori actual, queda marcada també amb una fletxa a la part dreta de la icona.

Així doncs, quan es clica sobre l’icona d’una aplicació, si aquesta no esta iniciada s’inicia, i si ja ho està, es mostra la seva finestra en primer plà a l’àrea d’aplicacions (si està en una altre escriptori, es canvia d’escriptori). Si existeixen varies instàncies de l’aplicació en execució, es mostra un resum per seleccionar la desitjada. Clicant sobre l’icona amb el botó dret, apareix un menú amb les opcions principals de l’aplicació (quick list), dins de la qual es pot seleccionar l’opció de marcar-la o desmarcar-la com a aplicació favorita.

Es poden modificar les quick list de les aplicacions a partir del seu fitxer .desktop ubicat a /usr/share/applications. Per exemple, es poden afegir varis accessos personalitzats a diferents ubicacions al icone de carpeta d’inici, editant (amb permisos de root) /usr/share/applications/nautilus-home.desktop i afegint-li al final de l’arxiu :

X-Ayatana-Desktop-Shortcuts=Home;Música;Videos;
[Home Shortcut Group] Name=Home Exec=nautilus OnlyShowIn=Unity
[Música Shortcut Group]
 Name=Música
 Exec=nautilus Música/
 OnlyShowIn=Unity
[Videos Shortcut Group]
 Name=Videos
 Exec=nautilus Videos/
 OnlyShowIn=Unity

Es poden afegir o ordenar les aplicacions favorites al launcher arrastrant el seu icona.

Dash (o tauler)

Es mostra/oculta clicant a l’icona superior esquerra (amb el logo d’ubuntu) o bé amb la tecla Super (logotip de windows). Es composa d’un quadre de cerca i una zona d’icones on es mostre aplicacions, fitxers, carpetes o accessos directes. Per defecte apareix el grup d’icones de Dreceres, on es mostren 8 icones sempre fixes (separats en 2 grups) :

  • Aplicacions multimèdia : obre una nova zona d’icones amb aplicacions multimèdia.
  • Aplicacions d’internet : obre una nova zona d’icones amb aplicacions d’internet.
  • Més aplicacions : obre una nova zona d’icones amb totes les aplicacions (equivalent a l’icona d’accés a totes les aplicacions del launcher).
  • Cerca fitxers : obre una nova zona d’icones amb els fitxers més rellevants (equivalent a l’icona d’accés a tots els fitxers del launcher).
  • Navegador web : inicia el navegador web predeterminat per defecte.
  • Visualitzador de fotografies : inicia l’aplicació de visualització de fotografies predeterminada per defecte.
  • Gestor de correu : inicia l’aplicació de gestió de correu predeterminada per defecte.
  • Reproductor multimèdia : inicia el reproductor multimèdia predeterminat per defecte.

Quan la zona d’icones correspon al inici del dash (dreceres), el quadre superior de cerca permet buscar qualsevol aplicació o fitxer del sistema, però quan ja s’ha seleccionat alguna altre zona d’icones, s’utilitza per filtrar els elements dins d’aquesta. En tots els casos, la cerca es realitza de forma automàtica al escriure dins del quadre (sense haver de polsar cap botó), i al pressionar enter, es llança la primera opció (el primer icona de la zona d’icones).

Zona d’aplicacions

Unity té la particularitat d’integrar el menú de la finestra activa a la barra superior de la pantalla (tant si la finestra està maximitzada o no). Algunes aplicacions però no implementen aquesta característica, i per tant, segueixen incorporant el menú a la finestra. Així doncs, normalment els únics controls que resten a la barra superior de la finestra són els 3 botons (maximitzar, minimitzar i tancar), que al maximitzar queden també integrats a la barra superior de la pantalla. En aquesta barra superior però, només es mostra el menú quan es passa el cursor per damunt (cosa que pot portar confusió). L’accés als menús amb la tecla Alt segueix funcionant de la mateixa manera.

Es pot accedir al escriptori (minimitzant totes les finestres) a partir de la combinació de tecles Super + D, i recuperar la disposició anterior de finestres tornant a pressionar Super + D.

Unity també inclou la opció de fixar les finestres en un cantó de la pantalla, de manera que si es mou una finestra i s’empeny cap a la banda dreta o esquerra de la pantalla, aquesta es redimensiona i posiciona automàticament per quedar anclada a la meitat dreta o esquerra de la pantalla (molt útil per treballar amb 2 finestres visibles alhora). Si s’empeny cap a la part superior, es permet també augmentar la mida de la finestra fins a maximitzar-la del tot.

L’eina per saber quines aplicacions estan funcionant en cada moment és el laucher, i per tant ja no existeix l’antiga barra de tasques. Per canviar de finestra activa, com sempre, es pot seguir utilitzant la combinació Alt+Tab.

Amb la combinació Super + W, es pot veure un resum amb totes les finestres iniciades (independentment de l’escriptori on s’ubiquin), i seleccionar-ne una per enfocar-la.

Amb la combinació Super + S (disparador del launcher), es pot veure el resum dels escriptoris, seleccionar-ne un, o administrar les finestres per repartir-les tal com es desitja.

Si algú desitja una edició més acurada que m’ho faci saber i n’hospedaré una versió en Odt o Pdf.

Per últim, dir que tot i haver investigat i provat Unity, tot i haver-me adaptat bastant, al final he desistit i he tornat al Gnome clàssic (de moment). Aquesta decisió ha estat principalment per 2 aspectes que no m’han acabat d’agradar gens : el no poder distingir clarament quines aplicacions s’estan executant en cada moment (no em val lo de que brilli l’icona i les fletxetes en comparació a l’antiga barra de tasques), i el tema dels menús de les finestres (no entenc la necessitat de no poder deshabilitar aquesta funcionalitat). Espero doncs que en la propera distribució d’Ubuntu 11.11 (que per cert ja està apunt de sortir del forn), es resolguin i millorin alguns d’aquests aspectes, i així pugui reunir el coratge per tornar a aventurar-m’hi. De moment però, seguiré amb el meu Gnome de tota la vida… diga’m conservador, però és lo que hi ha =).

Finalment us deixo alguns dels enllaços força interessants amb explicacions més extenses sobre Unity :

http://www.genbeta.com/a-fondo/unity-shell-a-fondo-i-descripcion-general-y-atajos-de-teclado

http://www.genbeta.com/linux/unity-shell-a-fondo-ii-configuracion-y-modificaciones

http://theravingrick.blogspot.com/2011/04/my-effort-at-writing-help-for-unity.html

 

http://novatillasku.com/2011/08/14/unity-simplify-your-life/

Actualització :

Tot i que encara no ho he provat, avui llegia via MuyLinux l’opció d’instal·lar un plugin per colocar el launcher a la part inferior de la pantalla, opció que m’ha semblat molt interessant : http://www.muylinux.com/2011/10/31/coloca-el-lanzador-de-unity-en-la-parte-baja-del-escritorio/

 

 

 

Categories:Informàtica

Virtualització d’un sistema linux natiu

Aquest estiu a diferència d’altres he disposat d’una mica de temps lliure, gràcies als milers d’hores que l’empresa on treballo em deu. A banda d’un xic de descans – que sempre va bé – com ja comença a ser costum en els darrers anys que m’ocupen, he dedicat algunes hores a actualitzar, ordenar i “fer neteja” al meu PC domèstic.

Normalment aquesta tasca inclou reinstal·lar el sistema operatiu, que tot i no ser necessari (el cas que ens ocupa no és el d’en finestres), sempre he preferit aquesta opció a la d’actualitzar versió. Fa uns anys aquesta tasca em podia fer tornar totalment boig, ja que disposava d’un disc on convivien mes de 4 sistemes operatius conjuntament amb un gestor d’arranc, però finalment per comoditat vaig decidir utilitzar-ne només un nativament, cosa que va simplificar moltíssim aquesta tasca de manteniment.

El problema però que m’he trobat totes les darreres vegades que he reinstal·lat el sistema, és que tot i ser molt meticulós i intentar guardar totes les configuracions, sempre em descuido alguna cosa, cas en que intentar apel·lar a la meva fútil memòria sol ser desesperadament inútil. És per això, que ja l’any passat (que també vaig passar per aquest procés) vaig decidir guardar una copia del sistema abans de formatar el disc, i virtualitzar-lo per poder-hi accedir posteriorment per recuperar totes aquelles coses que m’havia oblidat a l’hora de fer backup. Haig de dir, que tot i tenir alguns problemes amb la virtualització la idea va ser molt bona, i cada vegada que he requerit d’alguna cosa que no havia guardat he pogut recuperar-la. Així doncs, seguint amb la línia de replicar el mateix procediment, aquest any he intentat fer el mateix, però per algun motiu no he tingut tant d’èxit. Us relato la meva gesta :

En el meu cas, nativament estava corrent un GNU/linux Ubuntu 10.04, per al qual utilitzava un disc “petit” (320 GB) únicament pel sistema. El volum gran de dades que emmagatzemo el reservo a 2 altres discs de 1,5 TB on duplico la informació que em fa por perdre (sense utilitzar cap raid per això, ja que m’agrada fer-ho manualment). Així doncs, utilitzo el disc “petit” dividint-lo en una partició de 25 GB amb el sistema, una altre de 4 GB pel swap, i la resta en una altre on hi munto el /home, on normalment només hi deixo arxius de forma temporal.

El meu primer intent, va ser fer una copia de la partició de 25 GB amb el sistema, que en el meu cas correspon al /dev/sdb1, a partir de la meravellosa comanda dd i guardar-la directament al meu /home :

sudo dd if=/dev/sdb1 of=~/disk1.raw

D’aquesta manera ja tenia una imatge exacte de la partició amb el meu sistema. Ara calia però convertir-la a un format que alguna màquina virtual sàpiga reconèixer. En el meu cas, des de ja fa temps vaig decidir utilitzat VirtualBox (la versió OSE), que m’agrada més que VMWare, no només per ser lliure, sinó per com funciona. En fi, mitjançant les comandes que facilita el VBoxManage, tant sols cal tenir una mica de paciència i s’aconsegueix la conversió sense problemes :

sudo VBoxManage convertdd disk1.raw sistema_2010.vdi

Un cop obtingut l’arxiu, tant sols calia crear una màquina virtual i afegir-li com a disc d’origen aquest, però per la meva sorpresa (segons recordava no calia res més), era impossible fer-lo bootar amb la màquina virtual. Vaig imaginar doncs, que al copiar la partició no s’havia afegit el MBR necessari perquè el sistema sàpiga engegar, i que per tant calia modificar la imatge (afegir-hi els 512 bytes del mbr i fer començar la partició a partir del sector 63), però com que no volia trastejar, se’m va acudir una idea millor : repetir tot el procés amb el disc de 320 GB sencer. Segurament això no és necessari, i únicament amb la partició és suficient, però no vaig aconseguir trobar cap referència on s’expliqués com fer-ho exactament, i no volia perdre l’escuet temps de que disposava en intentar-ho (evidentment però, sí que m’interessaria averiguar-ho en un futur), així que repetint el procés directament amb /dev/sdb, i una mica més de paciència, finalment vaig obtenir un nou sistema_2010_v2.vdi, que contenia tot el disc físic sencer.

Els problemes però, tampoc van acabar aquí. En aquest cas, si que vaig poder bootar el sistema sense haver de tocar el disc, però per algun motiu el sistema tenia alguns paquets corromputs, i les X no funcionaven. Cansat de fracassar, i veient que la cosa es complicava, vaig utilitzar una live (system rescue), i vaig rescatar directament el sistema, de manera que tot i no poder-ho fer funcionar tot com nativament restava, actualment puc accedir a qualsevol fitxer de configuració, cosa que de moment m’és més que suficient.

No obstant, m’he quedat amb les ganes de saber quina és la forma correcte de fer això – i el més important, que funcioni tot correctament – per la propera vegada. Haig de dir que l’any passat vaig aconseguir-ho també amb problemes, però el resultat va ser més satisfactori, així que no he quedat gaire satisfet amb l’experiment. Resto doncs a l’espera de perfeccionar aquesta tasca i assolir un nivell d’èxit més acceptable, moment en el que estaré en condicions de fer-ne un millor post amb tots els detalls ben explicats.

Per últim, tot i no haver posat cap link de documentació, no voldria acabar sense fer referència a un magnífic bloc (a més en castellà) on s’explica molt correctament com realitzar tasques d’aquest tipus, i al que des de fa anys he acudit per il·lustrar-me sobre varis temes : http://www.vicente-navarro.com/blog/category/virtualizacion/

Categories:Informàtica

iCloud : Apple també s’enfila al núvol

Ahir el senyor de la poma mossegada (Steve Jobs) anunciava a la conferència de desenvolupadors d’Apple 2011 el nou servei iCloud , que previsiblement entrarà en funcionament a partir d’aquesta tardor juntament amb la nova versió del seu sistema iOS 5.

La idea de iCloud (i que ja fa temps que està sobre la taula) és utilitzar el núvol per tal d’allotjar-hi tots els continguts digitals que l’usuari desitja conservar de forma permanent, rellevant així la funció dels tradicionals medis físics (tals com discs, CDs o memòries), i obrint d’aquesta manera tot un conjunt molt interessant de noves possibilitats. Aquesta decisió doncs, marca un important punt d’inflexió sobre la filosofia amb que la companyia haurà d’orientar el funcionament del software en un futur immediat, ja que la idea vincula tot el que refereix a l’accés i gestió de continguts, i per tant, fixa el centre sobre el que hauran de girar tots els demés serveis. Amb aquest servei doncs, Apple aspira a introduir-se definitivament en la idea d’utilitzar el núvol com a nexe comú i punt de trobada entre l’usuari i les seves dades. Enhorabona, ja era hora.

El sistema permet allotjar des de contactes, calendaris, mails (a semblança del que ja ofereix google), fotografies, aplicacions, llibres digitals, o documents en qualsevol format (tal com si d’un dropbox parléssim). Especial atenció requereix el tema de la música, que vinculat al famós iTunes, queda en primera plana del servei, oferint la possibilitat de mantenir tota la nostra biblioteca musical a la xarxa, i per tant, assegura una sincronització ideal amb tots els dispositius des d’on reproduir-la. D’aquesta manera, quan un usuari maquero compra una cançó a través del iTunes, aquesta s’allotja directament a iCloud, i per tant la pot reproduir des del PC, el iPod, el iPad, el iPet, iPut, o qualsevol altre, resolent d’aquesta manera l’històric problema de la sincronització entre dispositius. No obstant, el servei té certes limitacions, ja que per poder ubicar la nostra música cal que iTunes la reconegui, cosa que pot ser un problema en alguns casos, però en general no hauria de suposar cap gran impediment. A més, en el cas de voler allotjar la música ubicada en algun altre medi, s’ofereix l’eina iTunes Match, que permet escanejar-la, trobar-ne la seva referència dins de la biblioteca del  iTunes, i vincular-la a la nostre compte de iCloud (aixó sí, per un mòdic preu d’una quota anual de $25).

En la meva opinió, crec que Apple ha encertat de nou quina és la tendència del mercat. La idea no és innovadora en el sector, ja que es poden trobar molts serveis que funcionen seguint aquesta filosofia (amb Google al capdavant), però és destacablement important el fet de que una icona del mercat com és la companyia de la poma prengui el rumb en aquesta direcció, deixant encara més evident el fet de que aquesta és la millor fórmula per organitzar de forma fàcil, accessible, sincronitzada i segura els continguts digitals dels usuaris.

De fet, ja fa algun temps que vaig parlar aquí sobre el tema de desplaçar tots els continguts del usuari al núvol, i com aquest seria l’inevitable futur cap on es dirigeix l’actual societat 2.0. Sembla doncs, que les meves previsions no van tant desencaminades com alguns volien assegurar, i que en poc temps podrem veure com els disc durs, memòries externes, CDs i DVDs passen a convertir-se en estimats companys de museu dels entranyables flopys, cassetes o targetes perforades.

Com a punt negatiu però, m’agradaria destacar (a banda de no permetre de forma senzilla el xifrat de dades), el fet d’introduir tant innovadora filosofia sense voler canviar el model de negoci enfocat a la venta de continguts. Sóc molt conscient del moment en que es troba la industria audiovisual, i del pes econòmic que la recolza donada la seva importantíssima influencia en la societat, però com tantes vegades he discutit, si volem seguir avançant cal aconseguir desfer-nos del llastre que suposa arrossegar un model obsolet que xoca frontalment amb la realitat del món digital en que ens estem submergint. Reitero, la propietat intel·lectual no existeix, tant sols existeixen autors que creen obres (cosa que no vol dir que no se’ls hagi de compensar per fer-ho), però no podem seguir basant el model de remuneració dels interessos de les obres sobre una suposada propietat, que en la majoria de casos no sol compensar l’autor sinó el distribuïdor. És qüestió de temps, ho podem postergar més o menys, però tard o d’hora caldrà canviar aquest model de negoci, i sembla que de moment Apple no ha volgut moure fitxa en aquest aspecte, de manera que no ha fet més que obrir encara més la controvèrsia entre la propietat dels continguts. Ens podem preguntar : Si una cançó és meva, i està allotjada al meu iCloud, però jo cedeixo les meves credencials d’autentificació a tercers, que passa ? és il·legal ? o si un CD l’he comprat entre varies persones per compartir-lo, només tinc dret a escoltar-ne un %, o les tantes moltíssimes incongruències que es poden plantejar quant es parla sobre propietat intel·lectual, i que posen de manifest l’enorme absurditat amb que es justifica l’actual sistema.

En resum, un gran pas per la companyia, però amb les sempre inevitables restriccions que condicionen la posada en marxa d’aquests tipus de serveis per part de grans companyies (destacar la especial atenció que cal tenir darrerament en el futur servei de google Music i totes les seves dificultats de negociació). Bona feina doncs, però millorable.

Si més no, des d’aquí felicito de nou al senyor Jobs i la seva companyia, i espero – i de fet estic convençut –  que la industria seguirà aquesta tendència i podrem continuar caminant cap a l’edificació un futur digital millor, en benefici de tots.

Categories:Informàtica

Ja tenim Ubuntu 11.04 Natty Narwhal

29/04/2011 1 comentari

Ubuntu 11.04 Natty Narwhal ja és una realitat.

Amb una breu referència (donat que actualment no puc dedicar gaire temps al blog), no m’agradaria passar desapercebut el fet de que avui ja està disponible la versió oficial d’Ubuntu 11.04.

M’agrada destacar aquest fet, ja que penso que tot i la innumerable quantitat de distribucions que existeixen de GNU-Linux, i la seva tant constant evolució, Ubuntu en particular esta creant un referent dins d’aquest món, al estabilitzar finalment una versió d’escriptori del sistema que realment aposta per compaginar la potència del sistema amb la facilitat d’us que se li dona al usuari final. Tal com deia aquell savi “La potència sense control no serveix de res”, i per tant, posar una eina, per molt bona que sigui, en mans d’una persona que no sap utilitzar-la, no serveix de res. És doncs en aquest aspecte en que crec que la gent de Cannonical (empresa desenvolupadora del sistema Ubuntu) ha encertat amb la filosofia del seu producte, el qual porto utilitzant des de ja fa alguns anys (juntament amb altres distribucions/sistemes), i que, vist el resultat, recomano amb molt d’emfasi a tots aquells usuaris inexperts que desitgin iniciar-se en el fabulós món del sistema GNU-Linux.

Així doncs, des del meu humil racó de la xarxa aprofito per fer reso d’aquesta notícia, i us convido a tots a disfrutar d’aquest producte que tant gentilment es posa al nostre abast de forma gratuïta !

Per últim, comentar que tot i que no he provat la versió beta, he llegit al respecte sobre les novetats que incorpora aquesta versió en el seu entorn gràfic (bàsicament el canvi de Gnome a Unity), i pel que m’han pogut avançar, penso que les innovacions en l’inferface són més que interessants. Ara cal provar-les. Us deixo aquí uns enllaços amb uns vídeos explicatius molt pràctics per veure clarament de que estic parlant :

Categories:Informàtica

Android

03/02/2011 3 comentaris

El tema principal d’aquesta setmana sens dubte és el sistema Android, tant per el que a mi respecte com pel que a la vanguardia tecnològica refereix.

Sóc un novato de menys d’una setmana en el sistema Android (tot just fa 5 dies que vaig adquirir-ne el meu primer terminal), així que m’he passat aquesta darrera setmana investigant-ne tot el potencial i seleccionant les millors aplicacions disponibles hagudes i per haver. Definiré el meu procés fins al moment amb una sola paraula : Desbordat ! Pel que he pogut experimentar en aquest breu temps, l’enorme quantitat d’informació i diversitat que existeix vers aquest sistema, m’absorvirà tal barbaritat d’hores d’anàlisi i investigació domèstica, que ni en les meves més optimes previsions puc arribar a concebir tenir el nivell de coneixament suficient per poder acabar d’ajustar el terminal al meu gust fins d’aquí moltes setmanes.

Per altre banda, i com era impossible que passés desapercebut amb els milions de posts repartits per la blogosfera, ahir va tenir lloc la presentació de HoneyComb, la versió 3.0 del sistema Android, orientat als tablets. Com que de moment ja en tinc prou en investigar el meu smartphone, el tema dels tablets el deixaré per més endavant, però no sense deixa d’aprofitar l’ocasió, veient la repercució mediàtica que ha tingut l’event, per remarcar la gran acceptació del públic en general que està experimentant el sistema Android. En definitiva, l’experiment de google està madurant, i promet moltíssim.

Per altre banda, puc afirmar que estic més que satisfet amb el meu primer contacte amb el món Android. Penso que el tema de la gestió de memòria i els 5 nivells d’execució són una molt bona solució a un sistema dissenyat per l’ús en un smartphone. En un principi em va incomodar la poca flexibilitat (pel meu gust, ja sé que n’hi ha de pitjors) de la interface Sense que utilitzo en el meu HTC, però ràpidament m’he adonat que l’importància del sistema no recau en la interface, sinó en les aplicacions que s’hi fan còrrer, desplaçant la primera a un simple element de cohesió entre l’usuari i les aplicacions.

Haig de dir que no he pogut provar i comparar amb el temps suficient les aplicacions que he descarregat, però de moment puc resumir les configuracions més pràctiques i útils que he trobat en :

  • Configurar el meu reader de rss : en un inici vaig optar per el gReader de google, que funciona de conya, però també (a banda d’altres) he instalat el Pulse, i haig de dir que no acabo de tenir molt clar amb quin dels 2 em quedaré.
  • Instalar una eina de gestió de tasques i un explorador d’arxius i xarxes : En aquest cas, després de provar-ne varis, definitivament em quedo amb el Advanced Task ManagerAstro.
  • Sincronitzar els meus continguts socials : Configurar i instalar les aplicacions oficials de gmail, twitter, facebook, foursquare, i algun que altre widget per utilitzar-les des de l’escriptori comòdament.
  • Instalar el scaner de codis de barra i QR per poder capturar i instalar de forma ràpida aplicacions.
  • He estat buscant també una bona app per grabar i gestionar rutes sobre mapes a partir del gps, però després de provar-ne 4 (My Tracks, Open GPS AndAndo, i Endomondo) cap m’ha convençut. Un company em deia avui que no em preocupés perquè d’aquí poc diuen que n’arribarà un de molt millor.
  • Instalar un gestor de missatgeria com WhatsApp o Beluga.
  • Evidentment també instalar l’aplicació de WordPress per administrar aquest magnífic blog que ara mateix escric.
  • Instalar l’aplicació de Spotify per escoltar i gestionar música.
  • Instalar l’aplicació de Wapedia per poder accedir de forma ràpida i còmoda a la wikipedia en qualsevol moment de conflicte en una conversa.
  • L’aplicació de Youtube m’ha donat alguns problemes, però també considero que és bàsica.
  • I que més dir, de tots els demés millons d’aplicacions que es poden adquirir tals com Google Googles, Tweet Deck, Google SkyMap, Evernote, AngryBirds, etc, etc…

En fi, no acabaria mai, així que de moment us deixo aquesta petita punta d’iceberg sobre la meva experiència en Android. Espero properament poder explicar el rooteig del sistema i comentar amb més detall aquelles aplicacions que més m’agradin.

Enfilant el camí

Visualitzant el present per construir el futur

El Noguer

Visualitzant el present per construir el futur

Visualitzant el present per construir el futur