Organització

Assistatut: afegida la funcionalitat perquè les famílies consultin dades

zfTal i como anunciava en el darrer article, ja he acabat de desenvolupar un complement per tal que les famílies puguin consultar les dades d’assistència i les incidències dels seus alumnes. Si en un centre tots els professors utilitzen el Quadern Virtual del professor i té també implementat l’Assistatut, amb les instruccions següents es podrà crear un web per tal que les famílies puguin consultar les dades del seu alumnes, d’una forma senzilla. (més…)

Per què utilitzo un quadern de seguiment d’alumnes fet amb Google Drive?

qvJa fa uns anys que he anat desenvolupant el meu propi Quadern virtual del professor, per fer el seguiment dels alumnes. Actualment el tinc fet amb Google Drive i són vàries les persones que m’han preguntat perquè no utilitzo aplicacions que es poden trobar per a tauletes (tipus Idoceo). En aquest article exposo els 4 motius que tinc.

(més…)

Assistatut: control d’assistència d’alumnes amb Google Drive

faltesFa un mes presentava la nova versió del Quadern virtual del professor, una plantilla per fer el seguiment dels alumnes (assistència, notes, competències…). Avui presento una nova plantilla, Assistatut, en versió BETA, que juntament amb l’altra permet al tutor fer el seguiment de les absències i retards dels alumnes del seu grup.

(més…)

Creant un Google apps script

Primer de tot cal tenir en compte que els Google apps script es basen en Javascript. No cal ser-ne un expert programador, ans al contrari, però si que s’ha de dominar una mica la sintaxi del llenguatge. Per tant, si no coneixeu la sintaxi del Javascript, jo us recomano que aneu al següent enllaç i realitzeu les activitats que us proposen. Són 16 mòduls que es poden fer en unes 10 hores, però tampoc cal que els feu tots. Amb els 5 o 6 primers ja fareu. http://www.codecademy.com/tracks/javascript

Un cop coneguda la sintaxi del Javscript, centrem-nos en un exemple d’script. En aquest cas, farem un script per aconseguir que un formulari arribi per correu electrònic a la persona que el contesta.

Al web del meu centre tenim un formulari per si algú de la comunitat educativa vol fer arribar a la direcció alguna queixa o suggeriment. És un formulari fet amb Google que només té 4 camps: Nom i Cognoms / Adreça de correu / Curs (només si és alumne o família) / Descripció de la queixa o suggeriment.

El que ha de fer l’script que us vull presentar és enviar una còpia de les respostes a la persona contesti el formulari. Si teniu un GAFE això es pot fer obligant a l’usuari a iniciar sessió, però en aquest cas volem que contestin el formulari persones que no estan al nostre GAFE (famílies, empreses…).

Primer de tot, lògicament, cal crear el formulari de Google i accedir al full de càlcul on aniran a parar les respostes del formulari.

Dins d’aquest full de càlcul, accedirem a Eines / Editor d’script

script1

Crearem un script en blanc i escriurem el següent codi:

script2

/**
* Envia les respostes d'un formulari 
* per mail 
*/ 

function onChange() { 
//Preparem els destinataris i el cos del missatge 
var cap="Heu enviat correctament una queixa o suggeriment a l'INS L'Estatut. A continuació podeu veure les dades que heu indicat:"; 
var titol= "Confirmació queixa o suggeriment"; 

var cosmissatge=cap; 
var dest = ""; 
var camp = ""; 
var llibreActual = SpreadsheetApp.getActiveSpreadsheet(); 
var fullrespostes = llibreActual.getSheets()[0]; 
var rangresp = fullrespostes.getDataRange(); 
var ul_fila= rangresp.getNumRows(); 
var trobat=0; 
//Recollim la darrera fila del full de respostes
for (j=1; j<rangresp.getNumColumns()+1;j++){ 
camp = rangresp.getCell(ul_fila,j).getValue(); 
for (i=0;i<camp.length;i++){ if (camp.charAt(i)==='@'){ 
trobat=1; 
} 
}
if (trobat===1){ 
dest=camp; 
trobat=0; 
} else { 
cosmissatge= cosmissatge+rangresp.getCell(1,j).getValue()+": "+camp+" "; 
}
}
//Enviem els missatges 
GmailApp.sendEmail(dest, titol, '',{ htmlBody: cosmissatge}); 
};

Analitzem una mica aquest codi i veiem enllaços interessants per seguir aprofundint. L’inici només serveix per definir variables (Títol del correu que s’enviarà / Capçalera del correu) i altres variables de programació. Cal fer esment a tres concretes:

var llibreActual = SpreadsheetApp.getActiveSpreadsheet(); 
var fullrespostes = llibreActual.getSheets()[0]; 
var rangresp = fullrespostes.getDataRange();

Per entendre aquestes, ens anirà molt bé l’ajuda de Google. La trobareu a https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet-app Aquí se’ns mostren tots els objectes propis de les aplicacions de Google i les seves propietats. En les variables que he definit a l’script, la variable llibreActual és un llibre de càlcul sencer. Concretament el llibre actiu. La variable fullrespostes, és el primer full de càlcul del llibre. La variable rangresp és un conjunt de cel·les, totes les que tenen dades. Haguéssim pogut obtenir directament la darrera variable, rangresp, fent

var rangresp = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0].getDataRange()

però així d’entrada potser hagués estat més difícil d’entendre. Tots els scripts es basen en això, objectes i propietats. Amb l’ajuda de Google, podem trobar qualsevol cosa de les aplicacions de Google (valors cel·les, destinataris de correus, nombre de files, text d¡un document…). Seguint amb l’exemple,

var ul_fila= rangresp.getNumRows(); 
var trobat=0; 
//Recollim la darrera fila del full de respostes
for (j=1; j<rangresp.getNumColumns()+1;j++){ 
camp = rangresp.getCell(ul_fila,j).getValue(); 
for (i=0;i<camp.length;i++){ if (camp.charAt(i)==='@'){ 
trobat=1; 
} 
}
if (trobat===1){ 
dest=camp; 
trobat=0; 
} else { 
cosmissatge= cosmissatge+rangresp.getCell(1,j).getValue()+": "+camp+""; 
}
}

mirem cel·la per cel·la de la darrera fila. Per això definim una variable ul_fila que és el nombre de files del rang amb dades. Justament l’última té la resposta que volem enviar. Fixeu-vos que podem mirar el valor de cada cel·la fent un bucle for, així les mirarem totes. Per accedir al valor, utilitzem les propietats getCell (per fixar la cel·la) i getValue (per obtenir-ne el valor). Com que no sabem en quin camp l’usuari posarà el mail, el que fem és mirar lletra per lletra si aquella cel·la té el símbol @. Per fer-ho, utilitzem un segon for, que va comparant cada lletra amb l’@.

Ja només resta crear el cos del missatge, on hi posarem el nom del camp (que està a la primera fila) i a continuació la resposta.

L’script acaba enviant el correu

//Enviem els missatges 
GmailApp.sendEmail(dest, titol, '',{ htmlBody: cosmissatge});

Per fer-ho utilitzem un altre objecte de Google. No és de fulls de càlcul, sinó de correu. En un altre apartat de la pàgina d’ajuda de Google podem trobar els objectes del Gmail: https://developers.google.com/apps-script/reference/gmail/

Un cop fet l’script i entès el seu funcionament, només ens falta programar que s’executi cada cop que algú respongui el formulari. Això ho farem amb els disparadors.

script4

Configurarem que l’script que acabem de crear, s’executi cada cop que algú respongui el formulari.

script5

Aquí és important quin usuari està activant el disparador, ja que aquest serà l’usuari que enviarà el mail. Si estem creant l’script amb usuari de professor, però volem que el mail l’enviï un usuari de centre, caldrà compartir el full amb l’usuari de centre en mode edició i que aquest activi el disparador.

Si voleu veure com funciona aquest script a la pràctica, a continuació teniu el formulari. Si el contesteu, rebreu un correu meu amb la confirmació.

https://docs.google.com/a/insestatut.cat/forms/d/1k_0VSP6qP0S5f66MWe0vwztw-EzJi4sXVcFRhS14zx8/viewform

Crec que els Google apps scripts són una gran eina, ja que ens pot servir per infinitat d’operacions (copiar dades entre fulls, combinar informació de documets i fulls de càlcul i enviar-ho per mail…).. Si sabeu una mica de programació no us serà gens difícil entrar en la seva forma de funcionar i podreu fer el que vulgueu. Són ideals per automatitzar processos que d’altre manera s’han de fer de forma manual.

Coses a vigilar si compartim estructures de carpetes en Google Drive

Ja aviso així d’entrada que el que explicaré no serà senzill d’entendre. Si no esteu avesats a compartir estructures de carpetes entre usuaris i als permisos que Google permet, no  serà senzill que pugueu seguir l’explicació. Si hi esteu avesats, no prometo res, però intentaré ser clar.

Compartir una estructura de carpetes només pot tenir un inconvenient: que en algunes carpetes donem permís d’edició a molts usuaris (normalment a tot el claustre de professors).
Si l’estructura s’utilitza en un sol sentit, és a dir, uns pocs usuaris pengen informació (normalment l’equip directiu) i un grup nombrós d’usuaris només visualitzen aquesta informació (normalment el professorat), no hi ha cap problema. Com que els professors només poden veure les carpetes i fitxers, si l’equip directiu té clar el funcionament del Drive, tot funciona correctament. Els professors poden arrossegar-se l’estructura de carpetes a la seva unitat o destacar-la per trobar-la amb facilitat.

El problema està quan, en algunes carpetes, el professorat té permís d’escriptura, perquè hi haurà de penjar fitxers (programacions, llistes d’alumnes, actes de reunions…). Llavors es més perillós, ja que sense tenir-ne cap intenció, els professors poden fer que algunes carpetes desapareguin del Drive de tothom. I que només les pugui trobar el propietari, a través del cercador.

Anem a pams i explico un cas concret de carpetes compartides amb edició que ens poden desaparèixer. Suposem que l’equip directiu crea la següent estructura de carpetes per compartir amb tots els professors del centre. Suposem també que tenim quatre grups creats: profes,  profes_eso, profes_batx i profes_cicles.

Entre parèntesis indico el permís que hi tenen els professors (entenc que l’equip directiu té permís d’edició a tot arreu):

  • Organització general curs XX (profes visualització)
    • Avaluacions (profes visualització)
      • ESO (profes_eso visualització)
      • BATX (profes_batx visualitació)
      • Cicles (profes_cicles visualització)
    • Disciplina (profes visualització)
      • ESO (profes eso edició / profes visualització)
        • 1r ESO (profes eso edició / profes visualització)
        • 2n ESO (profes eso edició / profes visualització)
        • 3r ESO (profes eso edició / profes visualització)
        • 4t ESO (profes eso edició / profes visualització)
      • BATX (profes batx edició / profes visualització)
        • 1r Batx (profes batx edició / profes visualització)
        • 2n Batx (profes batx edició / profes visualització)
      • Cicles (profes cicles edició / profes visualització)
    • Guàrdies (profes visualització)
    • Horaris (profes visualització)
      • ESO (profes visualització)
      • BATX (profes visualització)
      • Cicles (profes visualització)
    • Pojectes de centre (profes visualització)

Fixeu-vos que hi ha unes carpetes (Disciplina) on els professors poden editar, així poden posar documents explicant les incidències que tenen a l’aula o similar.

Si els professors entren a l’apartat Compartits amb mi del seu Google Drive veuran les carpetes compartides. I, compte, que no només veuran la carpeta Organització general curs XX, sinó que també veuran les carpetes on tenen permís d’edició.

gd2

Què ha de fer el professor?

  • Primera opció: arrossegar tota la carpeta Organització general curs XX a la seva unitat del Drive. Cap problema, en aquesta carpeta només té permís de visualització. Un cop allà, podrà desplegar les carpetes i arrossegar fitxers que ja tingui en altres carpetes de la seva unitat dins l’estructura de carpetes (allà on té edició).

gd1Inconvenient: si el professor té instal·lada l’aplicació Google Drive en el seu ordinador, de cop se li comencen a baixar un munt de documents al seu disc dur. Segons com sigui el centre, aquests documents poden tenir una mida important.

  • Segona opció: destacar la carpeta Organització general curs XX (per trobar-la amb facilitat) i arrossegar a la seva carpeta només aquelles carpetes on hagi de posar-hi documents. Així evitem que se li copiïn un munt de documents al disc dur.
    En el cas d’un profe d’ESO (posem de 1r) seria la carpeta Disciplina/ESO/1r d’ESO.
    I aquí tenim el problema. Com que en la carpeta superior (Disciplina/ESO) hi té permís d’edició, si mou aquesta carpeta, l’està movent per tothom. O sigui que està traient la carpeta de l’estructura de carpetes. Ell la tindrà a la seva unitat, però la resta de professors deixaran de veure-la. Fins i tot el propietari la deixarà de veure (tot i que utilitzant el cercador la podrà trobar i col·locar altre cop a lloc). Com que Google ja veu que això és perillós, a l’usuari li mostra un missatge, però habitualment els professors diuen Mou i llestos.

gd3

Fixeu-vos que és difícil formar als professors. Si el professor arrossega a la seva unitat una carpeta de l’estructura que està dins d’una carpeta on només té permís de visualització tot funciona bé.
El problema està en arrossegar a la seva unitat una carpeta de l’estructura que està dins d’una carpeta on té permís d’edició.

I, normalment, el professor no té ni idea si té permís d’edició o de visualització.

Solucions

  • Hi ha centres que opten per demanar al seu professorat que no arrossegui cap carpeta compartida a la seva unitat (a no ser que explícitament els ho indiquin). Però aquesta solució, des del punt de vista de la seguretat, no és acceptable. Sempre hi haurà algun professor que per ignorància arrossegui la carpeta que no toca i la faci desaparèixer.
  • Una altra solució és no compartir carpetes amb permís d’edició per als professors. Però així perdem un dels grans avantatges del Google Drive: poder compartir informació entre tots els membres del centre en totes direccions. I que tothom la pugui localitzar fàcilment.
  • La tercera solució és que les carpetes on els professors tinguin permís d’edició no tinguin subcarpetes. És a dir, només poden ser d’edició les darrers carpetes de l’estructura. D’aquesta manera no hi ha perill de fer desaparèixer carpetes.
    Algú em dirà que llavors el que es pot fer desaparèixer són els documents que hi hagi dins aquestes darreres carpetes. I tindrà raó. Però arrossegar documents solts ja és més difícil que es faci.
  • La darrera, la més complicada però més segura, és que primer es comparteixin amb permís d’edició les carpetes on els profes (o subgrups de profes) han de tenir-hi drets. Es comparteixen les carpetes, sense posar dins de l’estructura.
    Aquells amb qui hem compartit la carpeta, l’arrosseguen a la seva unitat.
    Un cop això ja ha estat fet, llavors el propietari ja pot arrossegar la carpeta dins l’estructura i donar permís de visualització a la resta.
    Com que els que la necessiten ja se l’han arrossegat, ja no ho tornen a fer i per tant no treuen la carpeta de l’estructura.
    I els altres, els que només l’han de visionar, la podran trobar dins l’estructura.
    Evidentment tampoc és una solució perfecte, ja que si durant el curs els permisos han de canviar, les coses se’ns compliquen.

No hi ha cap solució perfecte, almenys de moment. L’ideal seria que Google permetés compartir una carpeta amb permís d’edició, però sense permís de moure el seu contingut. Però, de moment, això no existeix.

Espero no haver avorrit massa i que s’hagi entès (cosa que no tinc gaire clara). Si el vostre centre utilitza alguna altra solució, estaré encantat de conèixer-la a través dels comentaris.