dimecres, 20 de juliol del 2011

"ContainerFromItem returns null" (or Nothing)

"ContainerFromItem returns null" (or Nothing) v.s. "Puedo quedarme embarazada con la regla":

Molts amics quan em troben pel carrer m'aturen i em dieun:

Quan treballo amb un treeView (o un listView) de silverlight i vull obtenir el container d'un node m'apareix l'error: "ContainerFromItem returns null"

Potser penseu que estic fent broma, però fixeu-vos que realment és un error molt habitual:


60Mil resultats que podem comparar-los amb altres cerques:



Anem a solucionar-ho, jo només m'hi he passat 3 hores per trobar quin és el motiu.
I no és un motiu, són dos:

1) En primer lloc, quan des d'un objecte X invoquem el mètode ContainerFromItem només busca els Items fills de l'objecte X.

Solució: Doncs cal invocar ContainerFromItem a l'objecte contenidor pare de l'objecte de negoci del qual volem el contenidor (ContenidorPare.ItemContainerGenerator) . Però, com obting el contenidor del pare? Doncs invocant el mètode ContainerFromItem al seu contenidor pare .... i així fins al node arrel on coneixem el contenidor pare que és conegut: TreeViewX.ItemContainerGenerator. LLavors cal usar recursió:

Public Function ContainerFromItem(ByVal item As objecteDeNegoci) As TreeViewItem
        Dim containerThatMightContainItem As TreeViewItem
        If IsNothing( item.parent ) Then
            containerThatMightContainItem = DirectCast(TreeViewX.ItemContainerGenerator.ContainerFromItem(item), TreeViewItem)
        Else
            Dim containerItemPare = ContainerFromItem(item.parent)
            containerThatMightContainItem = DirectCast(containerItemPare.ItemContainerGenerator.ContainerFromItem(item), TreeViewItem)
        End If
        Return containerThatMightContainItem
    End Function
2) Tot i que ja sabem baixar pels contenidors fins al nostre objecte de negoci, pot ser que encara el seu contenidor sigui Null, a que és degut? Doncs a que FINS QUE NO ES PINTA UN NODE NO SE LI CREA CONTENIDOR. Aleshores cal que estiguis segur que el node s'ha pintat:

Solució:
Primer: Expandir el pare:

Dim ccP = ContainerFromItem(objecteDeNegoci.parent)
ccP.IsExpanded = True
ccP.Visibility = Windows.Visibility.Visible

Segon: Forçar que es repinti. (Hi ha solucions alternatives amb events i tal)
ccP.UpdateLayout()

Ara ja estem en condicions de demanar el contenidor del fill:

Dim ccO = ContainerFromItem(objecteDeNegoci)
ccO.IsSelected = True

Si teniu dubtes de que als nodes pares no tinguin contenidor llavors heu de modificar el nostre mètode ContainerFromItem per tal que vagi expandir i fent UpdateLayout dels nodes intermitjos:


Public Function ContainerFromItem(ByVal item As objecteDeNegoci) As TreeViewItem
        Dim containerThatMightContainItem As TreeViewItem
        If IsNothing( item.parent ) Then
            containerThatMightContainItem = DirectCast(TreeViewX.ItemContainerGenerator.ContainerFromItem(item), TreeViewItem)
containerThatMightContainItem.IsExpanded = True
containerThatMightContainItem.UpdateLayout() Else Dim containerItemPare = ContainerFromItem(item.parent) containerThatMightContainItem = DirectCast(containerItemPare.ItemContainerGenerator.ContainerFromItem(item), TreeViewItem) End If Return containerThatMightContainItem End Function


Bé, espero que ja no us trobeu més amb aquest problema (ni amb l'altre). Si és així, please, deixa un comentari.

dimecres, 23 de març del 2011

LOE i LOGSE a la FP: anar lent per complir amb l'horari.

Fa uns dies llegir a la Vanguardia una carta al director, un usuari es queixava que el bus anava molt lent. Un cap de mobilitat argumentava el motiu: el bus va lent perquè ha de complir amb l'horari. Això és el que m'està passant amb la LOE. Vaig lent perquè estic compromès a un calendari, com que al cicle el temps és constant, haig de rebaixar l'espai. No deixa de ser una paradoxa.

Un Cicle Formatiu és una inversió: 2 anys d'estudis a canvi de capacitacions per a realitzar una feina.

Penso que amb el currículum LOE els alumnes no obtindran tant de rendiment a la seva inversió. Per què? Per la compartició de coneixements en Unitats Formatives (UF).

Les UF són com minicursets. Una unitat formativa pot durar entre 30 i 100 hores. La mitjana serien unes 40 hores. Un cop superada la UF el reconeixement és de per vida, no cal superar tot el MP (MP és un mòdul professional que seria una assignatura).

Com aprenen base de dades els alumnes de ASIX (Administració de Sistemes Informàtics i Xarxes)? Doncs el temari de BDD éstà dividit en dos MP (Mòduls Professionals) i cada MP està dividit en varies UF (Disseny, DML, DCL, ... són UF).

Origen del problema: cal que el professor determini a l'inici de curs quin dia i hora comença i acaba cada UF. Això provoca 'fragmentació interna' de coneixements.

Aquest curs ha estat el primer que he impartit formació segons la LOE. Tot això que he explicat ho veia avenir, però no m'ho volia creure, m'he estavellat amb la realitat. Em resisteixo a baixar el nivell, tant pels alumnes que ja tenen el títol (que seran comparats amb els nous) com pels que no el tenen (que s'hauran perdut matèria que potser un dia hauran de menester). Naturalment estic pensant les formules per compensar la retallada (en profunditat) del temari: tenir material que em permeti que els alumnes entenguin el mateix en menys temps, preparar material d'auto-aprenentatge, fomentar el treball en equip a través de forums i pensar cada dia com fer per a què anant més lents aprenguin el mateix o més.

Per últim comentar que el disseny d'aquest aprenentatge no és gratuït. S'ha fet així per tal que els estudiants tinguin més facilitat per entrar i sortir del sistema educatiu. Caldrà valorar si els avantatges superen els inconvenients.


Us deixo amb la carta del bus lent:

Mataró a cámara lenta


"Hay que ver el empeño con el que el servicio de autobuses de Mataró trabaja para que cada mañana el usuario redescubra rincones, revise las palmeras en un trayecto de diez a veinte minutos hacia la Renfe. Agradezco ese amor urbano por mostrar calzadas y demás, pero uno se halla inserto en la película El sol de membrillo, y no por la belleza, sino por la lentitud. El renqueante carromato en forma de autobús que demora el viaje hasta el infarto, ¿no se puede acelerar? Autoridades municipales, suban al autobús, compruébenlo. La cámara lenta en el transporte matutino es demasiado. ¿Será verdad que lo importante es el camino y no la meta?"
MARC BAYÉS, MATARÓ


LA RESPUESTA
Garantir seguretat i horaris

"L´empresa Mataró Bus té establerts uns horaris de pas per garantir la puntualitat. Els conductors tenen definits uns procediments entre els quals hi ha la forma de conducció, que ha de ser el més suau possible, alhora que han de mantenir una velocitat comercial constant per assegurar que arribin puntuals a totes les parades. En aquest sentit, els conductors compleixen tant les normes de circulació com les establertes per l´empresa, amb la finalitat de garantir la seguretat dels usuaris i el compliment dels horaris. Altrament, a l´enquesta sobre la qualitat del servei realitzada al novembre de 2010 els usuaris van valorar molt positivament aquest servei i li van atorgar una puntuació de 7,74 sobre 10."

NÚRIA AGUILAR
Regidora de Mobilitat Ajunt. Mataró

dimecres, 16 de març del 2011

Comptabilitat Analítica per a universitat.

Aquest és el meu projecte actual: Comptabilitat analítica per a una universitat catalana.

Ara està en fase maqueta. Deixo captura de imputació de costos. Més endavant vindran els indicadors.

La tecnologia que hi ha per sota és SSAS i per sobre Tableau.

dimarts, 1 de març del 2011

Dades meteorològiques

Preparant el curs de TableauSoftware.
Comparteixo alguns VIZs.



Les dades són reals, extretes de l'idescat.

Curs tableauSoftware

La setmana vinent imparteixo un curs de Tableau.
Aquí deixo el VIZ del que estic més satisfet ;)

dilluns, 28 de febrer del 2011

Venda de vehicles a Catalunya

Amb les dades d'idescat he preparat aquest VIZ.

Les dades són reals, extretes de l'idescat. Naturalment l'autor del viz no es fa responsable de les conseqüències en l'ús d'aquests anàlisi.

dijous, 17 de febrer del 2011

Evolució de la qualitat de la docència del meu crèdit SGBD.

El que em preocupa:
  • Saber qui pensa que el conèixer BDD no li servirà a la professió d'informàtic.
  • Detecto que els alumnes no s'estan sentint prou recolçats pel professor
  • Haver baixat un 6,9%

dimecres, 19 de gener del 2011

Preparant la travessa

Això et pot ajudar a decidir-te on posar la creueta:

diumenge, 9 de gener del 2011

video a l'ipod touch



Com ho he fet per transferir video a l'ipod touch:

1.- Baixar-te el video i convertir-lo. Aquí l'script que faig servir (l'he baixat no recordo de on). Nota: si l'ffmpeg o mencoder no té els codecs que necessites cal agegir el repositori medibuntu.

#!/bin/bash

quiet=""
passes="2"
codec="lavc"
bitrate="448"
bitratemax="960"
width="320"
height="240"

usage () {
echo "
Usage: `basename "$0"` [-q] [-1|-2] [-L|-H] [-b BITRATE ] [-m MAX_BITRATE] [-w WIDTH] [-h HEIGHT] MOVIE_FILE
-q Quieter output.
-1 Use 1 pass encoding.
-2 Use 2 passes (default).
-L Use lavc (default). Much quicker, but not as high quality.
-H Use h264. Slow, but high quality.
-b BITRATE Defaults to 448, 192 for low quality, 768 for high
-m MAX_BITRATE Defaults to 960, 768 for low quality, 1500 for high
-w WIDTH Defaults to 320, ipod screen width. Use 640 for tv out.
-h HEIGHT Defaults to 240, ipod screen height. Use 480 for tv out.
"
}

[ "$#" -lt 1 ] && usage && exit -1

while getopts "q12LHb:m:w:h:" Option; do
case "$Option" in
q) quiet="-quiet" ;;
1) passes="1" ;;
2) passes="2" ;;
b) bitrate="$OPTARG" ;;
m) bitratemax="$OPTARG" ;;
w) width="$OPTARG" ;;
h) height="$OPTARG" ;;
L) codec="lavc" ;;
H) codec="h264" ;;
*) usage; exit -1 ;;
esac
done
shift $(( $OPTIND - 1 ))

while [ "$1" ]; do
infile="$1"
! [ -f "$infile" ] && echo Error, file not found \"$infile\" && usage && exit -1

outfileP="${1%.*}.m4v"
outfile=`basename $outfileP`

num=1
while [ -f "$outfile" ]; do
echo "output file exists, adding number"
outfileP="${1%.*}-$num.m4v"
outfile=`basename $outfileP`
let "num += 1"
done

pass=0
if [ "$codec" = "lavc" ]; then
while [ "$pass" -lt "$passes" ]; do
let "pass += 1"
echo --- Pass $pass of $passes Pass LAVC Encoding ---
echo $outfile
echo $width x $height, $bitrate-$bitratemax
sleep 1
encopts="aglobal=1:vglobal=1:vcodec=mpeg4:vbitrate=$bitrate:acodec=libfaac:abitrate=128"
[ "$passes" -gt "1" ] && encopts="$encopts:vpass=$pass"
echo $encopts
sleep 1
mencoder "$infile" $quiet -ofps 30 -sws 9 -of lavf -lavfopts format=ipod \
-vf scale=-10:$height,dsize=$width:$height:0,harddup \
-ovc lavc \
-lavcopts $encopts \
-oac lavc \
-alang en \
-srate 22050 \
-o "$outfile"
EXIT_CODE="$?"
[[ "$?" != "0" ]] && exit "$EXIT_CODE"
done

elif [ "$codec" = "h264" ]; then
while [ "$pass" -lt "$passes" ]; do
let "pass += 1"
echo --- Pass $pass of $passes Pass H264 Encoding ---
echo $outfile
echo $width x $height, $bitrate-$bitratemax
sleep 1
encopts="bitrate=$bitrate:vbv_maxrate=$bitratemax:vbv_bufsize=2000:nocabac:me=hex:subq=4:frameref=2:trellis=1:level_idc=30:global_header:threads=auto"
[ "$passes" -gt "1" ] && encopts="$encopts:pass=$pass"
echo $encopts
sleep 1
mencoder "$infile" $quiet -ofps 30 -sws 9 -of lavf -lavfopts format=ipod \
-vf scale=-10:$height,dsize=$width:$height:0,harddup \
-ovc x264 \
-x264encopts $encopts \
-oac faac \
-alang en \
-faacopts mpeg=4:object=2:br=160:raw -channels 2 \
-srate 48000 \
-o "$outfile"
EXIT_CODE="$?"
if [[ "$?" != "0" ]]; then exit "$EXIT_CODE"; fi
done
fi

shift
done


2.- transferir el video amb gtkpod. El gtkpod l'engego amb aquest script:


#!/bin/bash
ifuse /media/ipod
gtkpod
fusermount -u /media/ipod/



abans cal haver creat /media/ipod a mà.




3.- Per que funcioni l'script: Medibuntu

sudo wget http://www.medibuntu.org/sources.list.d/`lsb_release -cs`.list --output-document=/etc/apt/sources.list.d/medibuntu.list && sudo apt-get -q update && sudo apt-get --yes -q --allow-unauthenticated install medibuntu-keyring && sudo apt-get -q update

sudo apt-get install ffmpeg libavcodec-extra-52

sudo apt-get install ffmpeg

diumenge, 26 de desembre del 2010

Dofus i adobe air

El Dofus utilitza aodobe air i no es deixava instal·lar a ubuntu 10.04.

La solució ha estat executar aquesta comanda quan demana reiniciar-se:

rm -fr /etc/opt/Adobe/certificates/crypt/

la solució l'he trobat en aquest foro:

http://ubuntuforums.org/archive/index.php/t-1138825.html

==============================

Unable to install Dofus on ubuntu 10.04:

Execute this command before dofus restart:

rm -fr /etc/opt/Adobe/certificates/crypt/

==============================

L'error:

/usr/lib/gio/modules/libgvfsdbus.so: wrong ELF class: ELFCLASS64
Failed to load module: /usr/lib/gio/modules/libgvfsdbus.so