vendredi, août 31, 2007

Difficultés en Erlang

J’ai travaillé pas mal avec Erlang durant la dernière semaine. La familiarisation avec le paradigme fonctionnel n’a pas été trop difficile. Concevoir des fonctions tail-recursive demande un peu de planification mais ce n’est pas très difficile non plus.
La grande difficulté que j’ai eu réside dans la conversion de fonction qui bâtissent des listes « linéairement » en fonction qui les bâtissent en parallèle pour le cas où l’ordre des éléments de la liste ne compte pas vraiment.
Par exemple, la fonction :

calculateitems ([H | T], N) ->
[onestock(H, N) | calculateitems(T, N)];
calculateitems([], N) ->
[].

Retourne un message d’erreur “badarith” lorsqu’exprimé comme ça :

calculateitems(L, N) –>
S = self,
Pids = lists:map( fun(X) -> spawn(portfolio, onestock/2, [X, N]) end, L),
gather(Pids).
gather([H | T]) ->
Receive
{H, Ret} -> [Ret | gather(T)]
end;
gather([]) ->
[].

Pourtant la fonction onestock ne comporte aucun changement d’une forme à l’autre. Remplaçant spawn par proc_lib:spawn nous donne plus d’information mais le mystère demeure :
** exited: {badarith,[{portfolio,'-calculateitemsp/2-fun-0-',2},
{portfolio,calculateitemsp,2},
{portfolio,calculate,2},
{lists,map,2},
{portfolio,simulate,3},
{erl_eval,do_apply,5},
{shell,exprs,6},
{shell,eval_loop,3}]} **

=ERROR REPORT==== 30-Aug-2007::12:49:52 ===
Error in process <0.57.0> with exit value: {badarith,[{portfolio,'-calculateitemsp/2-fun-0-',2},{portfolio,calculateitemsp,2},{portfolio,calculate,2},{lists,map,2},{portfolio,simulate,3},{erl_eval,do_apply,5},{shell,exprs,6},{shell,eval_loop,3}]}

La documentation disponible sur le ‘net est au mieux faible. Est-ce que quelqu’un aurait une solution à mon problème?

L'ordi s'en vient!

L’ordi sera prêt mardi! Seul changement/pépin : le fan choisi pour le CPU ne fitte pas avec cette carte mère. Ils ont du installer le stock fan. Pour booter, j’ai fait ajouter un disque de 320GB.

jeudi, août 23, 2007

Suggestion de cadeau de Noël

Ça y est Nikon a enfin annoncé le D3 et le D300. Le D3 est finalement full-frame et le D300 sera un superbe upgrade au D200. Un D300 serait bien apprécié comme upgrade de mon D70. ;-)

mercredi, août 22, 2007

Question...

L'histoire de la philologie est-elle récursive?

mercredi, août 01, 2007

Bug in kernel 2.6.20

I transfered an Adaptec 29160 SCSI card (and 4 disks and one tape drive) from my dual MP1800+ to my disks box based on an Asus A8V yesterday night. I recompiled its kernel (upgraded from 2.6.18 to 2.6.20) to include support for SCSI tape. I rebooted and it didn't detect my SATA drives. Googling the problem I found that there is a bug with the VIA SATA drivers in 2.6.20. The workaround is to include "pci=nomsi" as a kernel argument. Also discussed here.