Arxiu de l'autor: joanillo

El punt volat per fer la ela geminada en català: pràctica de SQL al WordPress

En l’escriptura en català s’utilitza freqüentment la ela geminada amb la grafia l.l (per exemple, Brussel.les), en comptes d’utilitzar el punt volat: Brussel·les.

Anem a actualitzar un bloc de WordPress (www.joanillo.org) substituïnt a la base de dades, amb SQL, totes les eles geminades amb la grafia del punt volat. Procés:

1. els posts que estan publicats

select ID,post_title,post_status from ins_posts where post_status=’publish’;

2. els posts que estan publicats, mostrem també el contingut

select ID,post_title,post_status, post_content from ins_posts where post_status=’publish’;

3. I ara mostrem els posts que tenen ela geminada:

select ID,post_title,post_status, post_content from ins_posts where post_status=’publish’ and post_content like ‘%l.l%’;

4. I ara que ja veiem quins són els posts afectats, podem modificar el seu contingut substituint les eles geminades mal formatades per un punt volat:

Primer de tot fem una prova de com quedaria la substitució:

select ID,post_title,post_status, replace(post_content,’l.l’,’l·l’) from ins_posts where post_status=’publish’ and post_content like ‘%l.l%’;

5. I ara ja podem fer la substitució (update):

update ins_posts set post_content=replace(post_content,’l.l’,’l·l’) where post_status=’publish’ and post_content like ‘%l.l%’;
Query OK, 49 rows affected (0,07 sec)
Rows matched: 49 Changed: 49 Warnings: 0

NOTA: També funciona, i potser és millor:

update ins_posts set post_content=replace(post_content,’l.l’,’& middledot ;’) where post_status=’publish’ and post_content like ‘%l.l%’;

Aquest és un petit exemple de com podem fer canvis directament en la base de dades, si coneixem les taules i la relació que hi ha entre elles.

Enllaços:

Pistons pneumàtics i vàlvules per al whack-a-mole

He fet les primeres proves per la part pneumàtica del whack-a-mole. A vegades comprar a Aliexpress és realment complicat. Volia uns pistons pneumàtics d’una sola acció amb retorn de molla, i he rebut uns pistons de doble acció. El títol del producte i les fotos del producte no concordaven. Crec que al final aquests pistons de doble acció m’aniran bé, tot i que al final necessitaré el doble de solenoides (2 solenoides per pistó, tal com es veu en el video).

El compressor que utilitzo és el més senzill que he trobat. M’ha costat 10e de segona mà, i és bastant sorollós, però faré un bon amortiment del so. Un compressor de més potència i amb calderí seria ideal, però el preu s’incrementaria molt.

Així doncs, el material que es necessita per fer aquesta prova és: compressor, pistó pneumàtic, dos solenoides (vàlvules pneumàtiques), 2 ràcors per als pistons, 4 ràcors per als solenoides, una T, i tubo de 6mm. El següent pas serà la part electrònica: un arduino i els relés per controlar tots els solenoides.

Enllaços:

Recreativa whack-a-mole: introducció

La nova recreativa que farem és un whack-a-mole (tot i que encara tinc d’altres projectes per acabar…). És un projecte de pneumàtica, i tenia ganes de fer-ne un, tot i que treballar amb aire comprimit, pistons i solenoides és sensiblement més car que treballar només amb electrònica.

I què és un whack-a-mole? És un joc arcade, que ve dels Estats Units però aquí també es pot veure a les fires, en què uns talps surten dels forats de la taula, i s’han de colpejar amb una massa per tal de què es tornin a amagar. Com més talps, més punts. El joc es complica perquè surten varis talps alhora i la velocitat es va incrementant.

D’aquí ve l’expressió anglesa This is like playing whack-a-mole. Precisament to whack vol dir colpejar, i mole és un talp. I l’expressió descriu la situació on et sorgeixen de cop i volta moltes coses a les quals has de fer cas, i a mida que les vas fent et sorgeixen més coses, i no dones abast. Igual que en el joc, que has d’anar donant cops de massa intentant donar cops de massa als talps. A Espanya es va traduir per guacamole, que sona igual però que no té res a veure amb el sentit original del mot. Per exemple el joc de guacamole de la marca MB (veure video de la publicitat).

Així doncs, he començat a reunir el material: pistons, vàlvules pneumàtiques, compressor barato, ràcors, tubs, arduino, i una tira de NeoPixels per fer el display, que potser això serà allò més interessant doncs vull dos displays de tres dígits ben grossos i ben xul·los.

Aquest ha de ser un projecte diferent i divertit.lo. El que és una incògnita és si el pressupost final compensarà tot plegat.

Enllaços:

Llibre d’equacions diferencials. Capítol “Equació de la corda pesant: la catenària”

Recordo en els meus dies de la facultat que vam resoldre a la pissarra l’equació de la corda pesant. És un cas típic d’anàlisi infinitessimal, amb solució analítica: la corba catenària. L’equació va ser obtinguda per primera vegada per Leibniz, Huygens i Johann Bernoulli el 1691.

M’ho he passat molt bé escribint aquest article. M’ha servit per aprofundir en LaTeX, i en la llibreria Matplotlib per fer les gràfiques amb Python.

Com es comenta a l’article, un cas pràctic molt divertit podria ser la construcció d’una bicicleta de rodes quadrades que circulés sobre una superfície feta a base de corbes catenàries. La idea seria pròpia del Cirque du Soleil, segur que triomfaria!

Pots descarregar aquest capítol en el següent enllaç:

Pinball B2S, distribució dels components

Estic avançant en el projecte del Pinball B2S, tot i que se m’ha girat feina amb un parell de màquines que estic fent. Estic a punt de pintar de blanc el moble, i abans de pintar he d’acabar de fer algun forat. Però per fer els forats que em falten, he de disposar ja tots els components en la seva posició final.

Així que he agafat l’ordinador sobre el que he estat fent les proves, i l’he desmuntat del tot. És llàstima perquè és un ordinador que vaig aconseguir fa un parell de mesos per un bon preu i que té una caixa molt insonoritzada i una font d’alimentació molt bona. Com es veu en la foto, a part del ventilador de la font d’alimentació, té tres ventiladors més i un dissipador de la CPU molt gran. És una bona màquina amb una placa ASUS P5Q-E i un Intel Core 2 Quad Q9550 a 2.83GHz. Té 4GB de RAM, en alguna taula que he jugat crec que seria millor tenir 8GB de RAM, però de moment ho deixaré així. Vaig agafar aquest ordinador perquè portava la gràfica NVidia GeForce 240, que encara que no és molt potent ja l’havia provat en una altra màquina amb molt bon resultat.

Així doncs he desmuntat la placa, la font, la gràfica, el disc dur, un connector USB, tots els cables, … i ho he disposat tot sobre la base del pinball. Al principi volia fer un calaix per la part de darrere de manera que es pugués accedir a tots els components de l’ordinador sense haver de desmuntar la pantalla. Però com es veu, al darrera disposaré de la font d’alimentació i tres ventiladors. Espero no haver d’accedir mai a l’ordinador, però si fos el cas, el que s’haurà de fer és treure el vidre i la pantalla del playfield, tampoc serà tanta feina.

En la foto no estan tots els components. Falta un IPAC, tots els botons i cables, i tota l’electrònica de la TV. Però no és problema, veig que tinc lloc suficient, i a més algun component no cal que estigui en la base, sinó que es pot fixar en el lateral.

Tenia ganes de fer el plunger analògic, però de moment prefereixo acabar la màquina i més endavant ja miraré de ficar-lo. Ara veig que hagués pogut fer l’altura del moble 2 o 3 cm menys alt, però tant se val, el que importa és que les proporcions entre la pantalla del backglass, el moble principal, i les potes, sigui la correcta. De fet, em quedarà un pinball petitó: és un mini virtual pinball. Tenia ganes de fer-ne un de petitó abans de ficar-me en un pinball de dimensions reals. Com que no es podrà jugar dret, suposo que el millor serà jugar-lo assegut des d’una cadira. Ja veurem.

El projecte a la wiki:

Curs d’Intel.ligència Artificial CSMM.101x finalitzat

Finalment ja he acabat el curs d’Intel·ligència Artificial. Aquestes últimes hores he fet l’examen final, tipus test. Quant tingui una mica de temps m’agradaria repassar algun concepte i tornar-me a mirar el projecte del Sudoku i els algorismes que allà hem utilitzat. I de cara aquest estiu rellegir el llibre Computational Beauty of Nature, on hi havia algun capítol sobre xarxes neuronals.

M’ha interessat sobretot la part del Machine Learning, i de cara el curs vinent m’agradaria fer algun curs en aquest àmbit. Temps al temps.

Construïnt el moble del Virtual Pinball

Mans a l’obra! Ja tinc les 200 taules configurades, tinc les dues pantalles, l’ordinador, botons, IPAC. He de pensar quin moneder fico, i m’agradaria ficar un plunger analògic. Però el cas és que ja puc començar a construir el moble.

De fet, aquest és un mini virtual pinball. És mini perquè les pantalles que utilitzo són de 24inch per al playfield, i de 17 inch per al backglass. Com que és la primera màquina que construeixo d’aquest tipus, la penso com una prova. La idea és ficar-li unes potes, però no tinc clar encara com fer-ho. Es poden comprar potes per Internet, però vull contenir al màxim el pressupost d’aquest projecte. Una altra possibilitat seria no ficar potes, i que reposi sobre una taula.

La primera vegada que construeixes una màquina és un aprenentatge sobre la marxa de les coses amb què ens podem trobar. S’ha de prendre moltes decisions: mides, posicionament dels components, materials,… És un procés de presa de decisions. Per tant, ens ho hem de prendre com un prototipus, i en el trajecte adquirim un know-how que ens servirà per a futures màquines (esperem que n’hi hagi més).

Per als vinils d’aquesta màquina encara no he pres cap decisió, segurament es basarà amb la taula Jacs to Open. Segurament no serà vinils, sinó que la pintaré amb plantilles, una tècnica que no he probat. Altres possibilitats de disseny que m’han agradat mentre probava les taules: Free Fall, Fast Draw, Harlem Globetrotters, Jumping Jack, King Rock, Star Trek.

200 taules de pinball B2S configurades i testejades

He aparcat un temps el projecte de la màquina de dards per dos motius. El primer que estic fent un curs de edx.org d’Intel·ligència Artificial. I després perquè tinc ganes d’acabar un virtual pinball de dues pantalles.

Ja tinc configurades 200 taules de pinball en mode B2S (Backglass to Screen). Això significa que tenim dues pantalles: el playfield (la pantalla principal); i la pantalla que fa de backglass, on hi ha el score i altres efectes visuals. He hagut de transformar totes les taules FS (FullScreen) que tenia a B2S, sempre que hagi estat possible. I he buscat d’altres taules xul·les per arribar a les 200.

La foto que he escollit per il·lustrar el post és la taula Centigrade 37, una taula Gottlieb de 1980 molt xul·la que he descobert.

D’altra banda ja estic construint el moble (ho ensenyaré en els propers posts), i em queda decidir quina taula escolliré per a les arts. També he de resoldre altres aspectes tècnics com el plunger analògic.

Curs d’Intel.ligència Artificial a edx.org

Estic fent el curs ColumbiaX: CSMM.101x d’Intel·ligència Artificial de edx.org. De fet. ja l’estic acabant. Ja estem a la última setmana, i per sort meva, l’últim projecte ja el tinc entregat i m’ha portat menys feina del que em pensava, sense especials contratemps. Ara només em falta fer l’examen final que serà el 23 d’abril, Sant Jordi.

Els projectes que s’han realitzat, tots ells amb Python, són:

  • Projecte 1: Search Algorythms. BFS, DFS,… Es va resoldre el 8-puzzle
  • Projecte 2: Adversarial Search and Games. S’ha resolt el joc del 2048, que de fet jo hi havia jugat bastant. Aquest projecte em va costar bastant, i efectivament vaig arribar a 2048 en una ocasió, combinant diferents heurístiques.
  • Projecte 3: Machine Learning. Hi havia tres problemes diferents: I. Perceptron Learning Algorithm; II. Linear Regression; III. Classification
  • Projecte 4: Constraint Satisfaction Problems. Aquí vam resoldre el joc del sudoku amb els algorismes del AC-3 i del backtracking.
  • Projecte 5: NLP, Natural Language Processing. Un projecte molt interessant. Hi havia un train data de 25000 comentaris de pel·lícules, valorades del 0 al 10. I després també hi havia un test data de 25000 comentaris que s’havien de valorar després d’entrenar el sistema.

El resum de les setmanes ha sigut el següent:

  • Week 1: Introduction to AI
  • Week 2: Intelligent Agents and Uniformed Search
  • Week 3: Heuristic Search
  • Week 4: Adversarial Search and Games
  • Week 5: Machine Learning I
  • Week 6: Machine Learning II
  • Week 7: Machine Learning III
  • Week 8: CSP
  • Week 9: Reinforcement Learning
  • Week 10: Logical Agents
  • Week 11: AI Applications: NLP

Per sort ja s’està acabant perquè m’ha agafat més temps del que tenia i del que volia dedicar-li. Però realment ha sigut interessant i exigent, i m’he hagut de posar les piles amb el Python. Realment el tema de les estructures de dades, i les diferents llibreries que s’han utilitzat amb Python, són molt potents.

Intentaré seguir llegint coses sobre Intel·ligència Artificial (IA) i Machine Learning (ML).

NOTA: encara no tinc acabat el projecte de la màquina de dards, i de fet me n’adono que el problema d’esbrinar on ha tocat el dard i quina puntuació té, a part d’un problema de CV (Computer Vision), també és un problema de ML (Machine Learning).

Llibre d’equacions diferencials. Capítol “La ciència de l’enamorament”

Vaig amb la idea d’escriure alguns articles sobre equacions diferencials, que podrien desembocar en un llibre. M’agradaria donar un to amè, centrant-me en aspectes pràctics, per demostrar que les equacions diferencials es poden aplicar a molts àmbits diferents. El títol podria ser alguna cosa com ara: Equacions diferencials per tot arreu: de com el càlcul infinitesimal resol problemes en tots els camps del coneixement

De fet he pensat un guió per al llibre, seria alguna cosa com ara:

Fı́sica

  • Problemes clàssics: la molla i el pèndol
  • Dinàmica de coets. Equació de Tsiolkovski
  • Isòtops radioactius

Biologıia

  • Ecologia de poblacions
  • Teorıia de l’evolució
  • Hàbits d’alimentació en poblacions animals

Sociologia

  • La ciència de l’amor
  • Sistemes de votació, dinàmica de partits polı́tics

Economia

  • Evolució dels preus
  • Crisi financera

Matemàtiques

  • Equació de la corda pesant: la catenària
  • La braquistòcrona i la tautòcrona

Medicina

  • Dinàmica dels tumors
  • Modelitzar el càncer: competència i selecció natural

Electrònica

  • Càrrega del condensador. Oscil·ladors LC, RLC
  • Unió PN, difusió de portadors

Quı́mica

  • Dinàmica de les reaccions quı́miques
  • Intercanvi de calor

Fluids

  • Llei de Torricelli
  • Mecànica de fluids. Coeficient de resistència

Sistemes complexos

  • Caos
  • Fractals

He estat treballant en varis capítol. Per exemple, en La ciència de l’enamorament s’analitza un cas de com una parella tenen un comportament diferent davant de l’enamorament, que es pot modelitzar amb una equació diferencial. I com a resultat de resoldre el problema, el resultat podria ser (en funció de les condicions inicials i del valor dels paràmetres), un estira-i-arronsa cíclic en la manera com senten l’atracció mútua.

En qualsevol cas el problema no és original (com els altres que es presenten en el guió que són, de fet, problemes bastant clàssics), però sí que se li vol donar un to personal, i a més es vol donar tot el codi python i la generació de les gràfiques que es presentaran en els articles.

Pots descarregar aquest capítol en el següent enllaç: