Apunts de Bases de Dades

Introducció

Els tres mons

Món   Disseny… (BD) Enginyeria del Software Dependència tecnològica
Món real objectes del món real conceptual especificació independent
Món conceptual coneixements / informació
Món de les representacions dades lògic i físic disseny dependent
Món conceptual

Classes d'objectes: quelcom real, identificable i distingible.

… [FIXME: imatge diagrama UML] …

Món de les representacions

El més obvi seria utilitzar fitxers (i directoris), però aquests no es permeten representar associacions tal com nosaltres volem. Per aquest motiu, neix el concepte de base de dades: un conjunt estructurat de dades que permet representar classes d'objectes i les seves associacions amb integració (sense repeticions) i compartició (molts usuari alhora) de dades.

Evolució:
  • Model jeràrquic: arbres (IBM). Tenen el problema que un fill pot tenir només un sol pare.
  • Model en xarxa: xarxes.
  • Model relacional (1969, Codd): taules.

SGBD (DBMS)

Un sistema gestor de bases de dades (database management system) és un programa complex que facilita la representació de classes d'objectes i les seves associacions i diverses tasques de gestió de dades als programes d'aplicació. Nosaltres utilitzarem el PostgreSQL.

Continue reading →

Trigonometria: Sinus, cosinus i tangent dels angles 30º, 45º i 60º

Com trobar els valors?
[latex]
\begin{array}{ll}
\sin45º & =\frac{1}{\sqrt{2}}=\frac{\sqrt{2}}{2} \\
\cos45º & =\frac{1}{\sqrt{2}}=\frac{\sqrt{2}}{2} \\
\tan45º & =1 \\
\end{array}[/latex]
[latex]
\begin{array}{ll}
\sin30º & =\frac{1}{2} \\
\cos30º & =\frac{\sqrt{3}}{2} \\
\tan30º & =\frac{1}{\sqrt{3}} \\
\end{array}[/latex]
[latex]
\begin{array}{ll}
\sin60º & =\frac{\sqrt{3}}{2} \\
\cos60º & =\frac{1}{2} \\
\tan60º & =\sqrt{3} \\
\end{array}[/latex]
Taula resum
  30º 45º 60º
sin [latex]1/2[/latex] [latex]\sqrt{2}/2[/latex] [latex]\sqrt{3}/2[/latex]
cos [latex]\sqrt{3}/2[/latex] [latex]\sqrt{2}/2[/latex] [latex]1/2[/latex]
tg [latex]\sqrt{3}/3[/latex] [latex]1[/latex] [latex]\sqrt{3}[/latex]

Apunts de Càlcul: Funcions d’una variable

Introducció

Considerem una funció real de variable real [latex]f: A \in \mathbb{R} \rightarrow \mathbb{R}[/latex] tal que [latex]\forall x \in A[/latex] existeix com a màxim un [latex]y \in \mathbb{R} : y=f(x)[/latex]. Definim:

Definim el domini d’una funció:
[latex]\operatorname{Dom} f = \left\{x \in \mathbb{R} / \exists f(x) \in \mathbb{R}\right\} = \left\{x \in \mathbb{R} / \exists y \in \mathbb{R} / y=f(x)\right\}[/latex]

I el recorregut d’una funció:
[latex]\operatorname{Im} f = \left\{f(x) / x \in \operatorname{Dom} f\right\} = \left\{y \in \mathbb{R} / \exists x \in \operatorname{Dom} f / y=f(x)\right\}[/latex]

També: [latex]\operatorname{Graf}(f) = \left\{(x,y) / x \in \operatorname{Dom} f\right\}[/latex] 

Exemple

[latex]\begin{array}{ll}f: & \mathbb{R} \rightarrow \mathbb{R} \\ & x \mapsto f(x)=|x|\end{array}[/latex] [latex]\operatorname{Dom f} = \mathbb{R}[/latex]
[latex]\operatorname{Im f} = \mathbb{R^+} \cup \{0\} = [0, +\infty)[/latex]
[latex]\operatorname{Graf(f)} = \left\{(x,x) / x \ge 0\right\} \cup \left\{(x,-x) / x < 0\right\}[/latex]
Tipus de funcions

Una funció [latex]\begin{array}{ll}f: & \mathbb{R} \rightarrow \mathbb{R} \\ & x \mapsto f(x)\end{array}[/latex]:

Continue reading →

You are reading: Apunts de Càlcul 

Apunts de Càlcul: Nombres reals i nombres complexos

1. Nombres reals

Naturals [latex]\mathbb{N}=\left\{1,2,3,4,…\right\}[/latex]

[latex]
\begin{array}{ll}+: & \mathbb{N}\times\mathbb{N} \rightarrow \mathbb{N} \\ & (n, m) \mapsto n+m\end{array}
[/latex]

Propietats: [latex]\begin{cases}
associativa: & a+(b+c) = (a+b)+c \\
commutativa: & a+b=b+a \;\;\;\;\;\; \forall a,b \in \mathbb{N}
\end{cases}[/latex]

[latex]
\begin{array}{ll}\cdot: & \mathbb{N}\times\mathbb{N} \rightarrow \mathbb{N} \\ & (n, m) \mapsto n\cdot m\end{array}
[/latex]

Propietats: [latex]\begin{cases}
associativa \\
commutativa \\
element\;neutre\;(1) \\
distributiva\;respecte\;a\;la\;suma: & a(b+c)=ab+ac
\end{cases}[/latex]

Enters [latex]\mathbb{Z}=\left\{…,-1,0,1,…\right\}[/latex]

La suma també és una operació interna i té element neutre (0) i element oposat. El producte no canvia (és igual que amb els nombres naturals).

Racionals [latex]\mathbb{Q}=\left\{\frac{a}{b} | a,b \in \mathbb{Z}, b \ne 0\right\}[/latex]

La suma segueix igual que en el cas anterior (associativa, commutativa, element neutre, element oposat).

El producte guanya l’element invers: [latex]\forall x \in \mathbb{Q}, x \ne 0, \exists \frac{1}{x} \in \mathbb{Q} \text{ tal que } x\cdot\frac{1}{x}=\frac{1}{x}\cdot{}x=1[/latex]

Podem resumir-ho com a: [latex](\mathbb{Q}, +, \cdot)[/latex] cos commutatiu.

A més, [latex]\mathbb{Q}[/latex] té les propietats:

  1. donats 2 nombres racionals, existeixen infinits nombres entre ells ([latex]\mathbb{Q}[/latex] és dens en [latex]\mathbb{R}[/latex]).
    [latex]\forall p,q \in \mathbb{Q}, p \ne q \Rightarrow \exists[/latex] infinits nombres racionals diferents entre [latex]p[/latex] i [latex]q[/latex].
    Demostració: Suposem [latex]p < q \Rightarrow p < \frac{p+q}{2} < q[/latex].
  2. [latex]q \in \mathbb{Q} \Rightarrow q[/latex] admet una expressió decimal exacta o peròdica. Exemples:
    [latex]\frac{1}{4}=0.25[/latex], [latex]\frac{1}{3}=0.\overline{3}[/latex], [latex]\frac{23}{90}=mixte[/latex].

Continue reading →

You are reading: Apunts de Càlcul 

Breu introducció al sistema de control de versions Bazaar

Introducció

A l'hora de desenvolupar aplicacions informàtiques en grup és molt important disposar d'un sistema de control de versions (VCSversion control system). Explicat molt breument, els VCS són eines de desenvolupament que permeten desar captures del codi font (revisions) creant tot un historial de canvis a mida que avança el desenvolupament del programa; a més, permeten compartir aquestes captures amb els companys de treball i normalment tenen capacitats per resoldre conflictes entre revisions creades en para?lel per diferents persones.

Un VCS potent utilitzat correctament pot incrementar la productivitat de forma dràstica, al reduir problemes de coordinació facilitant que diferents desenvolupadors puguin compartir fàcilment les últimes versions de la seva feina i que més d'una persona pugui fer canvis simultanis a un mateix conjunt de fitxers minimitzant els possibles conflictes resultants.

Hi ha un gran ventall de sistemes de control de versions disponibles, dels quals el més conegut és segurament el Subversion. Aquest, però, permet únicament un model centralitzat i en general és bastant limitat. Personalment prefereixo sistemes com ara el Bazaar (bzr). (El Git és encara més potent, però és molt més difícil d'aprendre a utilitzar, pel qual en aquest apunt em centraré en el Bazaar; també hi ha altres alternatives, com ara el Mercurial, però no estic familiaritzat amb aquestes).

Instal·lació

En sistemes com ara l'Ubuntu o Debian està disponible en un paquet anomenat «bzr» i segurament el mateix sigui cert per a altres distribucions de GNU/Linux. Si feu servir un altre sistema operatiu podeu baixar-lo de bazaar.canonical.com.

Com a nota al marge, el Bazaar també disposa d'una interfície gràfica (Bazaar Explorer), però ja que aquest apunt l'escric orientat a desenvolupadors només explicaré el seu ús des de la línia d'ordres.

Configuració

Abans de poder fer operacions d'escriptura cal que digueu al Bazaar com us voleu identificar. Podeu fer-ho de la següent forma:

bzr whoami "Nom Cognom <email@domini.tld>"

En cas que feu servir el portal Launchpad, també podeu habilitat la integració amb aquest (si no coneixeu el Launchpad, podeu ignorar això):

bzr launchpad-login nom_usuari

Primers passos

Imaginem que estem dins un directori «el-meu-projecte» on hi tenim un seguit de fitxers de codi («main.c» i «utils.c»). Per començar a utilitzar el Bazaar amb aquest codi el primer que hem de fer és crear una branca:

bzr init

Ara podem afegir-hi els fitxers que volem que controli:

bzr add main.c utils.c

i tot seguit podem crear una primera revisió (una captura del contingut actual dels fitxers):

bzr commit -m "Primera revisió del meu nou projecte..."

Un cop fet això, imaginem que acabem de fer uns canvis al fitxer main.c. Un cop comprovat que aquests funcionen correctament, procedirem a crear una segona revisió:

bzr commit -m "Aquí aniria una descripció dels últims canvis."

I ja tenim dues revisions en la nostra branca. Ara podem recuperar el llistat de canvis que hem fet amb:

bzr log

I veuriem alguna cosa com la següents

------------------------------------------------------------
revno: 2
committer: Nom Cognom <email@domini.tld>
branch nick: foo
timestamp: Tue 2011-05-17 18:19:48 +0200
message:
  Alguns altres canvis que he fet...
------------------------------------------------------------
revno: 1
committer: Nom Cognom <email@domini.tld>
branch nick: projecte1
timestamp: Tue 2011-05-17 18:19:29 +0200
message:

  Primera revisió del meu nou projecte...

Si voleu analitzar en més detall una revisió, podeu comparar dues (o més) revisions amb l'ordre:

bzr diff -r1..2

A més, quan arribeu a una versió estable del vostre programa podeu marcar la revisió actual amb una etiqueta, fent:

bzr tag nom-etiqueta

Llavors podreu utilitzar "tag:nom-etiqueta" per referir-vos a aquella versió en lloc d'haver de consultar el número de revisió (revno).

Compartint la branca amb altres

Fins ara només hem estat treballant en local (això és possible ja que el Bazaar -al contrari de l'SVN- és un sistema distribuït). Imaginem que ara voleu compartir el codi amb un company perquè pugui ajudar amb el desenvolupament. Per això us caldrà disposar d'un servidor (qualsevol ordinador accessible, en realitat) on els dos hi tingueu accés SFTP. Enviar-hi la vostra branca completa (amb totes les revisions) és tan fàcil com:

bzr push sftp://el-meu-servidor.tld/directori/destí/projecte1

(Si més enllà de l'SFTP també teniu accés via SSH, i el servidor té el bzr insta?lat, podeu utilitzar el mode de servidor inte?ligent amb «bzr+ssh://». D'altra banda, si el company/a no té accés al servidor, sempre es pot posar la branca en un lloc accessible des de la web i llavors hi tindrà accés només de lectura, via «http://»).

Per obtenir una còpia de la branca, l'altre persona pot fer:

bzr branch sftp://nom-d'usuari@el-meu-servidor.tld/directori/destí/projecte1

A partir d'aquí, els dos podeu fer «bzr push» per enviar els vostres canvis després d'un commit i «bzr pull» per recuperar canvis nous. En cas de produir-se un conflicte (el qual es produeix si es fa un commit sense tenir les últimes revisions de la branca del servidor) es pot arreglar amb «bzr merge».

A més d'aquests constants intercanvis, en qualsevol moment un dels dos pot decidir fer un push a una nova branca (per exemple, per desenvolupar alguna nova característica experimental) i quan la feina en aquesta estigui acabada, tornar-la a integrar (amb un merge) dins la branca principal (que, per cert, normalment s'anomena trunk).

 
Skip to toolbar