Resolució de sistemes d’equacions lineals d’N incògnites amb Calc (OpenOffice.org – LibreOffice)

Es tracta de l’aplicació directa dels vells apunts d’àlgebra de l’institut.

Si recordem, de càlcul matricial,  teníem que un sistema d’equacions lineals d’N incògnites es podia escriure com el producte de la matriu quadrada A de NxN de coeficients, pel vector d’incògnites X, igual al vector de termes independents B, o sigui A·X = B

I llavors, la resolució del sistema era
Inv(A)·A·X = Inv(A)·B

però Inv(A)·A = I (matriu identitat de NxN: tot zeros i  diagonal d’uns. Recordem dels apunts també: una matriu és invertible si el seu determinant és diferent de zero)

Més dels apunts: el producte de la identitat per “Alguna cosa” és “Alguna cosa”. Per tant:

I·X = Inv(A)·B,
és dir X = Inv(A)·B

Si el sistema és “compatible i determinat”  aleshores té solució i és única, i serà el vector X.

Hi han molt bones alternatives per a fer càlcul vectorial i matricial amb programari lliure: immediatament ens ve al cap el nom d’Octave, però també podriem fer servir FreeMat o SciLab (tots ells segueixen l’estil del reconegut, i de pagament, Matlab). Es tracta d’aplicacions instal·lables des del centre de Programari de l’Ubuntu.

Però aquí es proposa una alternativa amb programari més comú i que ja ve instal·lat: El càlcul es pot fer amb cel·les i fòrmules de Calc (OpenOffice.org o LibreOffice)

Obro una fulla i creo les matrius A i B

Calculo la inversa Inv(A), com que és una matriu de 3×3, la inversa també ho serà

Em posiciono a la cel·la a en la que vull que es pocioni la inversa i faig click a l’auxiliar de funcions.


Trio les funcions de Matrius. Trio la funció MINVERSA. Marco el checkbox “matriu” per indicar que l’argument és una matriu.

 
Click a següent i, a continuació, sel·lecciono la matriu que vull invertir.

Click a d’acord i ja tinc la matriu invertida.

Finalment, cal multiplicar la matriu invertida amb el vector de termes independents.

Em posiciono a la cel·la on vull que es mostrin les X, faig click a l’auxiliar de funcions. Trio les funcions de matriu. Trio la funció MULTM. Marco el checkbox “matriu” per indicar que els arguments són matrius.

A continuació sel·lecciono la matriu invertida i el vector de termes independents.

I ja ho tinc calculat.

Aquest seria el procés “manual”.

Amb OOoBAsic el càlcul és directe (idea extreta de http://user.services.openoffice.org/en/forum/viewtopic.php?f=20&t=32048). En les zones de color buides és on posaré la invertida i les X. )

Faig servir aquest codi:


sub ResolSistema
   Dim oFuncio as Object
   Dim oFull as Object
   Dim oRangA as Object
   Dim oRangB as Object
   Dim oRangInvA as Object
   Dim oRangX as Object
   Dim matInversa as Object
   Dim matX as Object
   Dim oFila as Object
   Dim i,j as Integer
             
   oFull = ThisComponent.Sheets.getByName(“Full1”)
   oRangA = oFull.getCellRangeByName(“A1:C3”)
   oRangInvA  = oFull.getCellRangeByName(“E6:G8”)
   oRangB = oFull.getCellRangeByName(“E1:E3”)
   oRangX = oFull.getCellRangeByName(“E11:E13”)
   oFuncio = createUnoService(“com.sun.star.sheet.FunctionAccess”)

   matInversa =  oFuncio.callFunction(“MINVERSE”, Array(oRangA.DataArray))
  
   for i = 0 to 2
      oFila = matInversa(i)
      for j = 0 to 2
         oRangInvA.getCellByPosition(j, i).setValue(oFila(j))
      next j
   next i
  
   matX =  oFuncio.callFunction(“MMULT”, Array(matInversa, oRangB.DataArray))

   for i = 0 to 2
      oFila = matX(i)
      oRangX.getCellByPosition(0,i).setValue(oFila(0))
   next i
  
End Sub

L’executo i obtinc:

És dir, el mateix resultat, com era d’esperar. Algunes remarques al codi:

– La utilització dels rangs per a fer un posicionament “relatiu” dels resultats, en comptes de fer un posicionament absolut sobre el full.
– En OOoBasic cal posar els noms de les funcions en anglès. MINVERSE en comptes de MINVERSA, i MMULT en comptes de MULTM.
– Les funcions de matriu retornen un vector de vectors, en comptes d’un Array bidimensional, per això cal fer servir oFila per a extreure els resultats.

Un iframe que es redimensiona amb el contingut

Un truc amb javascript: un iframe que es dimensiona per adaptar-se al seu contingut. L’iframe “resizable”.

Important: aquest truc només funciona si el contingut de l’iframe pertany al mateix domini que la pàgina contenidora, l’explicació és que el javascript de la pàgina contenidora ha d’accedir al document de l’iframe, i això només és possible entre pàgines del mateix domini.

per a veure com funciona, en un servidor web de proves crearé dues pàgines:

1. Una página amb un text llarg, d’unes quantes línies (el lorem ipsum és un gran candidat…) que serà la que posaré dins de l’iframe.

2. Una pàgina contenidora com aquesta:

<html>
    <head>
    <meta
        content=”text/html; charset=ISO-8859-1″     
        http-equiv=”content-type”>
    <title>prova1.html</title>
    <script language=”javascript”>
    function MostraMissatge() {
        var v_ifr = document.getElementById(“IDIframe”);
        v_ifr.style.height = (v_ifr.contentWindow.document.body.scrollHeight + 25) + “px”;
        return false;
    }
    </script>
    </head>
    <body>
    <iframe 
        src=”pagina.html” 
        id=”IDIframe” 
        height=”300″ width=”300″ 
        onload=”MostraMissatge()”>

    </iframe>
</body>
</html>

I, com podreu comprovar, funciona. 😉

James com servidor de correu de desenvolupament en localhost

És molt habitual haver de desenvolupar aplicacions que involucrin enviaments de correu. Una circumstància que també és habitual és que no sempre es disposa d’un entorn de desenvolupament que incorpori servidors “controlats” de correu.

En aquest post presento el James. El James és un conjunt de mòduls i llibreries open source i desenvolupades en java que estan rel·lacionades amb l’enviament i recepció de correu electrònic.

El James es pot configurar molt fàcilment com a servidor de correu de desenvolupament en el localhost. Podrem fer aplicacions de correu que enviin per SMTP al “localhost” i podrem configurar el thunderbird per a llegir aquest compte amb els emails que ens autoenviarem, sense necessitat de servidors exteriors ni haver de sortir a Internet.

Evidentment,  això només és útil per a tasques de desenvolupament. NO estic explicant com configurar James com a servidor de correu corporatiu. Tot i que és possible fer-ho de forma senzilla.

El post està basat en la James Quick Start Guide

El primer pas és descarregar-se el James. La versió estable a dia d’avui és la 2.3.2.

Descomprimim el tar i obtenim:

Per a executar james n’hi ha prou amb fer des de la carpeta anterior on l’he desplegat,
sudo bin/run.sh
el sudo és perquè cal engegar com a root.

Pot ser que calgui
1. donar permisos (chmod +x *sh) als scripts d’arrencada
2. establir el valor de la variable  JAVA_HOME. En el meu cas, he modificat phoenix.sh per afegir-li JAVA_HOME=/opt/jdk1.6.0_22

Obtinc la pantalla de inici del James 


albert@atenea:~/james-2.3.2/bin$ sudo ./run.sh
[sudo] password for albert:
Using PHOENIX_HOME:   /home/albert/james-2.3.2
Using PHOENIX_TMPDIR: /home/albert/james-2.3.2/temp
Using JAVA_HOME:      /opt/jdk1.6.0_22
Running Phoenix:

Phoenix 4.2

James Mail Server 2.3.2
Remote Manager Service started plain:4555
POP3 Service started plain:110
SMTP Service started plain:25
NNTP Service started plain:119
FetchMail Disabled

Amb aquesta primera engegada, s’ha generat l’estructura de directoris necessària per al funcionament. Matem el procés amb Control-C.

Edito to apps/james/SAR-INF/config.xml
Busco l’etiqueta <servernames> i hi verifico que el domini és localhost. Puc posar altres dominis, però aleshores calen configuracions addicionals

<servernames>
  <servername> localhost </servername>
</servernames>

Rearranco James amb sudo bin/run.sh

Ara entro a la consola d’administració de James, el Remote Manager Service started plain:4555 fent servir telnet localhost 4555 i creo un parell d’usuaris. Entro amb login root i password root. Reviso les opcions disponibles amb Help. Amb adduser [usuari] [password]. Creo els comptes albert i stsoftlliure


albert@atenea:~$ telnet localhost 4555
Trying ::1…
Connected to localhost.
Escape character is ‘^]’.
JAMES Remote Administration Tool 2.3.2
Please enter your login and password
Login id:
root
Password:
root
Welcome root. HELP for a list of commands
help
Currently implemented commands:
help display this help
listusers display existing accounts
countusers display the number of existing accounts
adduser [username] [password] add a new user
verify [username] verify if specified user exist
deluser [username] delete existing user
setpassword [username] [password] sets a user’s password
setalias [user] [alias] locally forwards all email for ‘user’ to ‘alias’
showalias [username] shows a user’s current email alias
unsetalias [user] unsets an alias for ‘user’
setforwarding [username] [emailaddress] forwards a user’s email to another email address
showforwarding [username] shows a user’s current email forwarding
unsetforwarding [username] removes a forward
user [repositoryname] change to another user repository
shutdown kills the current JVM (convenient when James is run as a daemon)
quit close connection
adduser
Usage: adduser [username] [password]
adduser albert albert
User albert added
adduser stsoftlliure stsoftlliure
User stsoftlliure added
 

Ara puc provar d’enviar un correu a aquest usuari que he creat. Faré servir el Thunderbird per a enviar el correu. Primer de tot configuro els dos comptes. Indicant que el servidor és localhost.

A la imatge podeu comprovar que el thunderbird troba les adreces “sospitoses”, però les deixa crear. Faig Fitxer-> Nou -> Compte de correu i empleno el formulari

Click a continuar. Thunderbird reconeix els servidors POP i SMTP de James…

Els semàfors en taronja indiquen que el servidor no és segur i que les contrasenyes viatgen en pla. Però això no em preocupa perquè, de fet, els  correus no viatjaran enlloc. Recordem que estem configurant un servidor de correu per a desenvolupament en localhost. Faig click a Crea el compte.

Ens salta aquest avís final. Marco el checkbox de “Comprenc els riscs” i creo el compte.

Repeteixo per al compte albert. En aquest moment tinc dues comptes de correu al servidor localhost: albert@localhost i stsoftlliure@localhost.

I ara ja puc  enviar correus entre els dos comptes fent servir el Thunderbird:

Ara ja disposem de servidors de POP3 i SMTP a localhost i d’un parell de comptes per a fer proves, sense necessitat de sortida a Internet.

Una eina útil per a desenvolupadors.

Intranet per a un associació amb Open Atrium (II)

En aquesta primera fase la  tasca que fem és la parametrització de l’aplicació per a adequar-la als requeriments del client.

La pàgina visible cap a l’exterior ha de presentar el bloc i la wiki (mòduls Blog i Notebook).  Per a poder fer això hem creat un grup de treball en el que afegirem als usuaris que seran editors del bloc i a l wiki pública.

La creació d’un grup públic es trivial. El grup només tindrà, de moment, aquests dos mòduls: Blog i NoteBook. N’hi ha prou amb personalitzar el grup a la pestanya de paràmetres, com es veu a la imatge:

En aquesta mateixa pantalla també podem configurar la vista predeterminada: blog, notebook… el logo i el color del tema:

Tot plegat només configuracions simples. Però, de moment, i amb un cost mínim, ja tenim la infraestructura de la part pública de la web de l’associació.

Aquest model pot semblar un pel espartà, però és el similar a la que podem trobar a la web de documentació de la Comunitat d’Usuaris d’Open Atrium. https://community.openatrium.com/documentation-en/.

Continuarà.

Intranet per a un associació amb Open Atrium (I)

Amb uns companys estem involucrats en la creació d’una intranet amb part pública per a una associació sense ànim de lucre.

En aquest post i en posteriors aniré explicant com avança aquest projecte. 

Antecedents

Cal tenir en compte les característiques del client. El pressupost de l’associació per a aquest projecte és “més aviat baix”. No volen haver de pagar per llicències d’ús. Disposen d’un hosting compartit tipus LAMP (Linux, Apache, MySQL, PHP) on, per ara, tenen la seva web actual que està desactualitzada.

El client vol impulsar la seva web pública i, a la vegada, degut a la dispersió física dels seus membres, vol adoptar eines de treball en grup que facilitin, per exemple, la redacció, aprovació i publicació de comunicats i newsletter.

Les característiques de l’associació fan que tinguem uns interlocutors principals, però podem parlar amb qualsevol membre d’aquesta associació. Les converses amb aquests interlocutors principals ens permeten comprendre les necessitats de l’associació.

Ens han explicat el funcionament intern de l’associació i ens han proporcionat el seu reglament. En base a això, hem fet el model de l’associació i de les tasques que aquesta associació realitza.

Model organitzatiu del client

L’organització té 21 membres de ple dret.
A més, hi han sis consellers externs sense vot.
L’organització té una junta directiva formada per un president, un vice-president, dos secretaris i un tresorer, cadascun amb tasques específiques.
El treball de l’organització es distribueix en 5 comissions.
Cada membre, o conseller, pot pertànyer a una o vàries comissions.
Cada comissió s’organitza internament seguint el seu propi criteri.
Cada comissió té un portaveu a l’assemblea.
El màxim orgue de decisió de l’organització és l’assemblea.
a l’assemblea tots els membres de ple dret de l’organització tenen veu i vot.
No hi han vots de qualitat.
Els consellers externs tenen veu, però no vot.
La junta directiva prepara l’ordre del dia de les assemblees a partir de les  propostes que pot enviar qualsevol membre o comissió.
La junta modera l’assemblea i en fa l’acta.
Tothom pot presentar esmenes a les actes.
A les assemblees, els portaveus de cada comissió presenten la tasca realitzada per la seva comissió des de l’última assemblea.
A les assemblees, es proposen tasques, s’aproven o es rebutgen,  i s’assignen a comissions.
L’assemblea pot crear comissions temporals per a tasques específiques.

Els punts anteriors donen una idea aproximada de com funciona aquesta associació.

Tasques

Les tasca que realitza l’associació en completa la caracterització:

La tasca de l’associació és de caràcter social. La materialització d’aquesta tasca es concreta en la recopilació i sol·licitud de certa informació; en  l’organització d’events; en la intervenció personal d’un o diversos membres de l’associació en la mediació o denuncia de conflictes; o bé, en la majoria dels casos, en la generació de documentació escrita: documents oficials per a l’administració pública, o comunicats públics, newsletter… que es publiquen a la web, o s’envien per correu a una llista de subscriptors.

La redacció i aprovació dels documents, comunicats o newsletter és un gran problema per a l’associació perquè no tenen una forma àgil de debatre, consensuar-ne i aprovar-ne els continguts. La maquetació i enviament dels comunicats recau en un parell de membres que no sempre es troben disponibles.

Els subscriptors

La tasca de l’associació s’adreça a un públic precís de prop de 1000 usuaris.

Aquest públic és el receptor dels comunicats, newsletter…  Actualment es disposa d’una llista de correu amb Mailman que conté les adreces de correu de contacte i és l’eina preferida per a l’enviament de comunicats. Aquest és el públic que accedeix a la web de l’associació majoritàriament, tot i que les estadístiques d’us demostren una minsa participació.

L’associació vol incrementar la participació del públic en la web i que aquest pugui participar amb les seves opinions, o fins i tot, poder participar en debats.

Tenint en compte tot l’anterior, es va proposar a l’associació la utilització d’una eina col·laborativa basada en codi obert i que s’adaptés als recursos disponibles.

Els requeriments

Se’ns demana, doncs, que implementem una eina que permeti:
– la creació de grups, un per cada comissió, un grup per a la junta, i la possibilitat de crar grups per a les comissions tesmporals
– permisos específics per als portaveus, junta directiva, membres de l’associació, consellers externs, subscriptors i públic anònim.
– un bloc extern per a la informació pública de l’associació on s’admetrien comentaris anònims moderats.
– un sistema d’enquestes públiques 
– un fòrum moderat per als subscriptors – un calendari públic amb esdeveniments
– una àrea privada per als membres de l’associació en el que disposarien de
– un fòrum on debatre i votar
– l’automatització de la redacció dels newsletter i comunicats, i el seu enviament als subscriptors.
– actualització senzilla de la part pública de la web de l’associació.
– cal migrar la documentació actualment disponible a la web a la nova web
– és molt important conservar la capacitat d’enviar comunicats i newsletter.

La solució proposada

Els requeriments de l’usuari es poden assolir combinant diferents eines: un blog per a la part pública; un espai de debat que pot ser implementat o bé amb un fòrum tradicional, o amb un microblogging, o amb missatgeria interna;
Existeixen aplicacions de codi obert que agrupen aquestes eines en un únic paquet. D’entre les diverses opcions, el programari triat per a implementar aquest entorn col·laboratiu, una intranet, en definitiva, ha estat Open Atrium.
Open Atrium és un programari que es situa sobre el CMS lliure Drupal per a crear un ambient i eines de treball en grup.

Podeu veure la presentació que en fan a la TV colombiana

Open Atrium

Open Atrium és una plataforma de codi obert dissenyada específicament per a fer que equips grans puguin comunicar-se millor. Una intranet empaquetada amb: un blog, una wiki, un calendari, una llista de tasques, un microbloc (twitter) privat, i un panell de control per gestionar-ho tot. Sense oblidar que tot és personalitzable. I se li poden afegir noves característiques (features). El suport ve garantit per una important comunitat d’usuaris i desenvolupadors.

La creació de grups, usuaris, rols… és molt senzilla, com il·lustra el vídeo d’introducció a les tasques d’administració

Introduction for Site Administrators from Development Seed on Vimeo.

El següent video, ens mostra com treballen els usuaris amb Open Atrium:

Introduction for Site Users from Development Seed on Vimeo.

Al Vimeo podem trobar altres videos sobre Open Atrium per Development Seed, l’organització que ha desenvolupat d’Open Atrium.

Implementació
A l’associació li caldria que el lapse de temps fins a la nova web fos curt. A més, és necessari mantenir la capacitat actual d’enviament de correus.
El que s’ha fet és proposar a l’associació una migració per fases:

En primera fase, l’objectiu és implementar l’Open Atrium, es crearan usuaris per als membres i consellers, creant els grups i assignant a cada grup els integrants. S’impartirà un curs de formació per explicar als membres de l’associació com funcionen les eines de blog, micro blogging, calendari i llista de tasques.Simultàniament, s’habilitarà l’accés anònim amb permís per deixar comentaris al bloc públic. Es canviarà la imatge que ve per defecte de l’Open Atrium per la pròpia de l’associació. A l’espai públic s’habilitarà una carpeta amb els documents públics descarregables pels usuaris anònims.

La primera fase de la intranet, blog públic, grups, usuaris… es pot obtenir ràpidament perquè només requereix la personalització del paquet estàndar.

En primera fase, doncs, encara es manté la creació i enviament manual de comunicats i newsletters.

En la següent fase, es pretén la creació del fòrum per als subscriptors, i l’automatització de la creació i enviament de newsletters. S’està investigant la disponibilitat de mòduls estàndar d’Open Atrium que permetin fer-ho. Potser caldrà desenvolupar una “feature” que permeti aquesta automatització.

El calendari de la implementació, i dels cursos de formació, la resolució de les incidències i el suport a l’explotació de la intranet es pactaran i quedaran reflexats formalment en una planificació i un contracte per a l’execució del projecte i el seu manteniment posterior.    

Preparació de l’entorn de Desenvolupament
En primera fase no hi ha desenvolupament. El que hi ha és una tasca de migració, d’instal·lació de l’OpenAtrium i de parametrització per a crear-ne els usuaris, grups, adopció de la imatge de l’associació…

Per a dur a terme aquesta tasca, el primer de tot és obtenir i instal·lar OpenAtrium. El programari s’obté de la web http://openatrium.com/download

Per a provar les parametritzacions el que he fet és instal·lar localment el paquet. L’entorn de desenvolupament local és Ubuntu 10.10, Apache, MySQL 5.1 i PHP 5.2. La instal·lació de l’OpenAtrium consisteix en desempaquetar el paquet ZIP i executar la pàgina php d’inic, en el meu cas, he desplegat el atrium-1-0-beta10.zip a /var/www/atrium. Això vo, dir que he apuntat el navegador a http://localhost/atrium i s’ha engegat el procés d’autoinstal·lació.

El procés d’auto-instal·lació primer verifica les versions del programari instal·lat, permisos, espai al disc i requeriments de màquina. En cas que falli res, rebrem un avís. A mi, per exemple, m’ha calgut instal·lar la llibreria GD per al PHP. He pogut fer-ho sense cap problema des del Centre de Programari de l’Ubuntu.

També ha calgut donar permisos de lectura, escriptura i execució a la carpeta d’instal·lació. A més, ha estat necessari crear una base de dades per al’OpenAtrium. Et permet crear-la en MySQL o en PostgreSQL. Per tal de replicar fidelment l’entorn de “producció”, he triat crear la base de dades en MySQL.

La instal·lació en fa permet dir que volem, aquest és un dels punts millorables d’Open Atrium, que els títols, missatges de l’aplicació estiguin en català. La realitat és que la traducció no està completa i en l’experiència d’usuari trobarem títols i missatges en català i en anglès.

En tot cas, al tractar-se de programari de codi obert, sempre podrem traduir nosaltres mateixos els textos.

Amb preguntes sobre quina base de dades ha de fer servir, password de l’usuari administrador de la intranet, zona horària.. la configuració qued completa.

En aquest moment, ja tenim una versió inicial -“out of the box”- d’OpenAtrium que podem parametritzar.

Continuarà.