Kebmans blogg

Hvordan gjøre ordsøk i MySQL

Posted in Programmering, Programvare, Scripting, Teknologi by kebman on 25/02/2012

Så du trenger å søke etter ord i databasen din? Her er noen kjappe eksempler på hvordan du kan gjøre det.

Fulltext-søking er kanskje den greieste måten å søke etter ord i SQL-databaser. Det er veldig kjapt og fungerer bra så lenge ordet er lenger enn tre bokstaver. Grunnen til dette er at det krever ekstra kapasitet å indeksere kortere ord, spesielt om de opptrer ofte. Slik bruker du fulltext-søk:

SELECT * FROM tabell
WHERE MATCH(felt)
AGAINST('søkeord' IN BOOLEAN MODE);

Men hva om du ønsker å søke etter ord med færre enn fire bokstaver? Vel, her er noen alternativer.

Ved å bruke LIKE kan du søke etter felter som inneholder ditt søkeord, enten det er del av større ord eller ikke. Du får som regel ganske mange treff med denne, og det er ikke like kjapt som Fulltext-søk.

SELECT * FROM tabell
WHERE felt
LIKE '%søkeord%';

Eksperimenter med å fjerne prosenttegn foran eller bak. Prosenttegnet fungerer som et «wildcard» eller en joker, og betyr «hvilken som helst tegn».

Men kanskje du bare vil ha hele ord som står alene? Prøv i så fall regular expressions.

SELECT * FROM tabell
WHERE felt
REGEXP '[[:<:]]søkeord[[:>:]]';

Merk at denne vil også gi treff på ord som har bindestrek foran eller bak. En annen hake er at regular expressions kan være litt tregt fordi det krever en del ekstra prosesseringskraft. Det er ikke alltid det er så viktig, men skal du lage noe som er stort og blir hyppig brukt av svært mange brukere, risikerer du fort at forsinkelsene blir merkbare.

Vil du kun ha helt enslige ord, må du søke etter ord som har mellomrom foran og bak. Prøv i så fall denne:

SELECT * FROM tabell
WHERE Locate('søkeord ', felt) > 0
AND Locate(' søkeord', felt) > 0;

Legende:

  • tabell: Databasetabellen du ønsker å søke i
  • felt: Feltet i tabellen som du ønsker å søke i
  • søkeord: Søkeordet du ønsker å bruke

PHP kobler ikke til MySQL via localhost

Posted in Internett, Programmering, Scripting, Teknologi, Webdesign by kebman on 24/02/2012

Fikk plutselig feil da jeg prøvde å koble til MySQL-databasen via PHP i dag. Vips så ble det en aldri så liten detektivhistorie.

Koden jeg bruker for å koble til MySQL med PHP er veldig enkel, godt testet, og har fungert mange ganger før. Ikke det mest avanserte og ikke objektorientert, men den egner seg godt for testing. Her er den:

$host = 'localhost';
$user = 'root';
$pass = 'password';
$link = mysql_connect($host, $user, $pass);
if (!$link) {
   die('MySQL error '. mysql_errno() . ': ' . mysql_error());
}

Kort forklart, hvis $link klarer å koble opp til databasen går alt som det skal, mens om variablen inneholder feil, blir koblingen brutt og det blir istedenfor sendt tilbake noen feilmeldinger. Og her er den jeg fikk:

MySQL error 2002: No such file or directory

Så jeg prøvde å bytte ute passord, bruker, og byttet fra localhost og til 127.0.0.1, og heureka! Da funket det. Men likevel var jeg jo like langt i forhold til localhost. Jeg blunket litt med de våte øynene mine, og et slags mørke la seg over hjernen min. Feilmeldingen sa meg ikke en dritt, og jeg skjønte ikke hvorfor det bare funket med den lokale IP-adressen. Her var det bare å sette i gang og google.

En av tingene jeg testet var om MySQL i det hele tatt reagerte, men det visste jeg jo at den gjorde, fordi jeg kunne koble til via terminalen og via Sequel Pro. Likevel prøvde jeg å pinge den over telnet i terminale, slik:

telnet localhost 3306

Her tittet MySQL frem og sa hei som normalt, så dette var i orden, og fortsatt var jeg like lite klok.

Heldigvis kom jeg ganske snart over denne fine siden: C.5.2.2. Can’t connect to [local] MySQL server

Der sto det utrolig mye unødvendig og irrelevant, men jeg bet meg i alle fall merke i de tingene som faktisk stemte – blant annet en serie tester man kan gjøre i terminalen, disse her:

  1. mysqladmin version
  2. mysqladmin variables
  3. mysqladmin -h `hostname` version variables
  4. mysqladmin -h `hostname` --port=3306 version
  5. mysqladmin -h host_ip version
  6. mysqladmin --protocol=SOCKET --socket=/tmp/mysql.sock version

Da jeg kom til nummer tre på listen, skjønte jeg at noe var galt. Det gikk helt fint om jeg byttet ut `hostname` med localhost, men da jeg brukte den riktige koden, `hostname`, fikk jeg en feilmelding:

mysqladmin: connect to server at 'kebman.local' failed
error: 'Host '10.0.0.7' is not allowed to connect to this MySQL server'

Dette skjønte jeg ikke noe særlig mer utav heller, men det ante meg at det kunne være at en eller annen trodde at kebman.local var localhost, men det er jo slett ikke tilfelle. Dessuten er jo ikke 10.0.0.7 adressen til localhost heller (127.0.0.1 er adressen til localhost).

Lenger nede i dokumentet sto det noe om å finne navnet på socket-filen som brukes for å koble via localhost:

netstat -ln | grep mysql

Svaret jeg fikk, var dette:

/tmp/mysql.sock

«Hm», tenkte jeg nå. «Kan dette ha noe med denne kebman.local-greia å gjøre, tro? Feilen må jo ligge i php.ini et sted (filen man bruker til å konfigrere PHP med), men hvor?» Hadde også lest noe om det på erværdige stackoverflow.com. Jeg søkte igjennom alt som hadde med MySQL i php.ini, og endelig fant jeg det. I php.ini var det en annen adresse til mysql.sock. Jeg endret det til adressen jeg fikk opp med netstat-koden, og voila, endelig funket det å koble til MySQL via localhost med PHP igjen.

For å redigere php.ini på Mac må du først ha rot-passordet til maskinen din. Deretter er det letteste å bruke TextWrangler (gratis) til å åpne opp /etc/php.ini for redigering. Du kan også åpne filen med pico eller et annet UNIX-program for tekstredigering gjennom sudo-kommandoen (sudo gir ordre som rot-bruker).

De viktigste verktøyene i Photoshop, Illustrator og InDesign

Posted in Design, Programvare, Webdesign by kebman on 06/02/2012

Penneverktøyet (Pen Tool) og «den hvite pekeren» (Direct Selection Tool) er to av de viktigste verktøyene i Adobe Creative Suite. Disse fungerer nesten likt i både Illustrator, Photoshop og InDesign. Her er en liten guide til hvordan du bruker dem.

PenneverktøyPen Tool

Penneverktøyet.

Denne oppretter vektor-noder som igjen danner vektor-baner (paths). Det er disse banene som etter hvert blir til tegninger i Illustrator, men den kan også brukes i både Photoshop og Indesign, f.eks til å lage masker for å avsløre ting som er under det øverste billedlaget.

En slik bane er ikke en tegning i seg selv, men bare en slags guide som du kan legge forskjellige egenskaper og effekter til. For å få en tegning ut av banen, må du legge til egenskaper slik som strektykkelse og fyllfarge.

Hurtigtast: P

Gi ett museklikk for å sette en node (et punkt eller et håndtak). Flere noder sammen danner en «path» eller en bane (sti/vei).

Etter at du har tegnet opp en bane, kan du holde nede Alt-knappen og redigere en node slik at banene rundt får buer eller kurver. Dette kalles å lage Bezier-kurver.

Den hvite pekerenDirect Selection Tool

Også kalt «Den hvite pekeren»

Med denne kan du flytte en node, eller deler av en banen om du velger den med musen.

Hurtigtast: A

NB! Om du får sort peker når du trykker A, så trykk Shift+A en gang, og du bytter til den hvite. Den sorte brukes til å velge hele bane-objekter.

Flytting og forstørrelse

Om du jobber veldig «nært» og har zoomet mye inn, er det enkelt å flytte på arket ved å trykke på Mellomrom (Space eller «den lange») og så trykke og dra litt i bildet med musen. Da får du opp håndteringsverktøyet (Hand Tool) uten å måtte gå i verktøykassen.

Trykker du Mellomrom+Cmd får du forstørrelsesglass for å zoome inn. Alt+Cmd+Mellomrom for å zoome ut. Du kan også merke et område du har lyst å zoome direkte inn på, ved å trykke, dra og slippe, istedenfor å trykke en og en gang på musen for å oppnå det samme.

Hurtigtaster til verktøylinjen

Generelt er det lurt å lære seg hurtigtastene, i alle fall til de verktøyene du bruker mest. Heldigvis er det veldig enkelt å finne ut av det. Om du vil vite hvilken hurtigtast et verktøy har, er det bare å la pekeren flyte over verktøyet. Etter en stund kommer det en lapp opp med navnet på verktøyet og hurtigtasten i parentes.

Visse verktøy på verktøylinjen har flere verktøy i ett. Dette er markert med en liten trekant nede i høyre hjørne på verktøyikonet. Klikk og hold en stund, så får du en listen med de ekstra verktøyene. Du kan også skifte hurtig mellom «underverktøy» ved å holde Shift nede når du prøver en hurtigtast.

Arbeidsprosess

Alt etter hvilket program du bruker, er det litt forskjellige arbeidsprosesser forbundet med hvert program. I Photoshop og InDesign brukes vektorbaner stort sett til å lage forskjellige typer masker og baner for eksport til andre programmer, mens i Illustrator brukes banene til å lage vektortegninger.

Den vanligste arbeidsprosessen i Illustrator består av å lage en skisse på papir først som man scanner inn. Så legger man det inn i et eget lag  (Layer) som man låser, gjerne etter at man har skjerpet bildet litt i Photoshop først. Deretter jobber man med å føre inn skissen i lagene over med penneverktøyet og den hvite pekeren.

For å legge inn en skisse, pass på at du har høy nok oppløsningen på scannet. 300 ppi er bra. Jobb gjerne med skarphet og kontrast i Photoshop før du eksporterer et ferdig bilde du kan jobbe videre med i Illustrator.

Sett skissen inn det nederste laget i Illustrator ved å gå inn i toppmenyen og velge File > Place… Så finner du bildet på harddisken og legger til. Deretter går du inn i lag-fanen (Layer tab) og låser laget, slik at du ikke med uhell flytter på tegningen mens du lager vektorbaner i lagene over. Vanligvis er denne fanen nederst til høyre, dog dette kommer litt an på hvilken Work Space du har valgt. Om du ikke finner fanen, gå til toppmenyen og velg Window > Layers eller trykk F7.

Når man fører inn skisser og lager figurer, bytter man ofte mellom P og A. Man lager en node (P). Så flytter man litt på den for å justere (A). Så legger man kanskje til kurver på banen (Alt+P). Derfor er det greit å lære seg hurtigtastene for disse to. Disse egner seg også godt til bruk med mus eller styreflate, mens selve tegneverktøyene i programmene blir mye enklere å bruke om du bruker et skikkelig tegnebrett.

NB! Denne guiden er hovedsaklig for Mac-brukere, men vanligvis brukes Cmd på Mac akkurat som Ctrl på PC.