fiskeben.dk


Meninger med mening

Arkiv for Nørderi

Nyt sideprojekt: hvor meget er dagen tiltaget siden vintersolhverv?

Endnu et sideprojekt ser dagens lys. Med SidenSolhverv.dk kan du nu holde dig opdateret om, hvor meget dagen er blevet længere siden sidste vintersolhverv.

På denne tid af året synes jeg vinteren er på sit værste; det er mørkt, koldt og vådt, og tegnebogen er slunken efter en måned med juleextravaganza. En af mine små hobbyer er at følge med på, hvor mange flere minutters dagslys vi har. Et relativt håndgribeligt bevis på at dagene bliver længere har en behagelig effekt på vintermørket. Derfor fik jeg lyst til at lave SidenSolhverv.dk, som gør det nemt at få netop den information.

Hvad er vintersolhverv?

Vintersolhverv er årets korteste dag og falder som regel på 21. eller 22. december. Det er ved vintersolhverv, at Solen er på sit laveste på den nordlige halvkugle. Dette er på grund af, at Jorden hælder ca 23 grader i forhold til dens bane om Solen.

Teknologier og implementation

Siden er lavet i Ruby og serveres med Sinatra og thin. Det overrasker mig stadigvæk, hvor effektivt det er at arbejde med denne kombination.

Da jeg begyndte at researche til projektet opdagede jeg, at det med at beregne dagens længde faktisk ikke er nogen enkel sag. Man skal i princippet vide en masse om Solens placering, afstand til Jorden, dato, skudår og en masse mere. Jeg har ikke en chance til at vide alt det (specielt fordi jeg ønskede at siden selv skal finde ud af hvor brugeren er og vise relevante data), men jeg fandt en formel, som kan beregne dagens længde. Den behøver kun at vide en breddegrad og hvor mange dage der er gået siden vintersolhverv plus nogle få konstanter, og det er til at have med at gøre. Den er naturligvis ikke så nøjagtig som rigtige astronomiske beregninger, men resultatet er godt nok til dette formål.

Breddegraden har jeg valgt at finde automatisk. Den kan findes ved at lave et opslag på brugerens IP-adresse mod freegeoip.net. Samtidig får man også en del andre nyttige data såsom by og land. Jeg har valgt at gøre det på denne måde, fordi brugeren ikke skal belemres med at foretage valg samt bruge tid på en ekstra round trip til serveren. Samtidig holdes grænsesnittet rent og antallet af opmærksomhedskrævende elementer nede. Det har den ulempe, at hvis IP-opslaget ikke virker, så virker sitet heller ikke.

Datoen for vintersolhverv er heller ikke en enkel sag for en lægmand som mig. Her skal man også vide en masse om Solens dit og dat, så jeg endte simpelthen til sidst med at sakse en liste fra Wikipedia og hard code den ind. Mental note: husk at opdatere tabellerne i år 2020.

Videre udvikling

Jeg kommer nok ikke til at foretage mig mere på dette site. Hvis jeg gør, vil jeg muligvis åbne for at bruge andre metoder end opslag på IP-adressen til at finde sin lokation. Det vil åbne for, at brugere kan lege med at sammenligne forskellige steder eller undersøge, hvordan det er hjemme, mens man er på farten. Derudover kan det være jeg vil pakke koden, der beregner dagens længde og hvor meget den er tiltaget siden vintersolhverv, ind i en Ruby Gem og frigive den sammen med kildekoden.

Ikke mere snak: prøv selv på SidenSolhverv.dk.

2

jan

2

Tim Cook forklarer navnet på den nye iPad

Tim Cook om navnet på den nye iPad:

So you can do it either way, is the real story. You can stick with the name and people generally love that, or you can put a number at the end which denotes the generation or whatever. [..] The new iPad was not a shocking new way of naming from an Apple point of view. It goes back to what weve actually done the most. So it probably was talked about in a way that seemed more like a shocking change than it really was.

Det var det jeg sagde.

30

maj

0

Effektiv søgefunktion med Full Text indeks i MySQL

Selvom det de sidste år er meget populært at bruge dedikerede søgeindex som Sphinx og Lucene, så kan disse systemer i bund og grund mere, end hvad de fleste har behov for eller har til rådighed. Dedikerede søgeindex kræver som regel, at de kan køre som en egen service på serveren. Det tilbyder de færreste webhoteller.

At lave en fornuftig søgefunktion med MySQL-databasen er slet ikke så svært, og det er heller ikke så ineffektivt, som man nemt kan foranlediges til at tro. Det dækker til fulde behovet for små og mellemstore websider. Til for eksempel en blog (uanset størrelse) er MySQL rigeligt, men de dedikerede indekseringstjenester har rigtignok ekstra funktioner som facetter, markering af søgeord og relevans, som man enten må undvære eller implementere selv.

Denne guide retter sig mod de, der bruger MySQL til database for mindre og mellemstore websider, hvor man har brug for en form for søgefunktion.

Opret indeks på tabellen
MySQL har en funktion, der hedder Full-Text indeksering på tabeller. Det er kort fortalt et indbygget indeks i MySQL, som opdateres hver gang man kører en INSERT eller UPDATE på en tabel. Så søger databasen i indekset istedet for i selve tabellen, og søgningen vil gå hurtigere.

Det første vi derfor skal gøre er at oprette indekset på tabellen i MySQL. Det kræver, at vi først bestemmer os for, hvilke felter i tabellen, der skal kunne søges i. For eksempel har man gerne to felter, man har lyst til at gøre søgbare: overskrift og indhold. Disse skal vi oprette et fælles indeks over. Det gøres med denne kommando:

CREATE FULLTEXT INDEX mit_index ON min_tabel (felt_a, felt_b, felt_c);

Husk at skrive navnene på din tabel og de felter, som skal indekseres. Du kan selvfølgelig også kalde indekset noget andet end ‘mit_indeks’.

Søg i indekset
Søgningen i tabellen benytter MySQLs MATCH-AGAINST kommando i WHERE-delen af SQL-kommandoen. Kommandoen ser således ud:

SELECT * FROM min_tabel WHERE MATCH(felt_a, felt_b, felt_c) AGAINST('søgeord');

Her er det vigtigt at huske på, at felterne i MATCH-kommandoen skal være de samme, som du brugte i indekset, som vi lige har oprettet.

Dette er stort set alt du behøver, for at lave en udmærket søgefunktion med MySQL – med andre ord værktøjer, der allerede er tilgængelige på dit eget webhotel.

Hvis du selv vil udforske videre indenfor Full Text indeksering, så start med dokumentationen. Læs videre for en kort introduktion til nogle ekstra features.

Mere avancerede søgeformer
Det er muligt at udvide funktionaliteten lidt. AGAINST-kommandoen kan tage et ekstra parameter, der fortæller MySQL, hvordan den skal søge i indekset. Her kan man bruge mere eksotiske funktioner som binær søgning og søgning med naturligt sprog. Det følgende er kun en enkel introduktion – den dybere forståelse må du selv sørge for ved at læse dokumentationen eller søge på nettet.

Binært søg
Binært søg vil sige, at man kan bruge plus og minus foran ord i sit søgeudtryk for at fortælle databasen, hvilke ord der skal stå i teksten, og hvilke der ikke må stå i teksten. Et eksempel kunne være et søgeudtryk som ‘mobiltelefon -android’ som vil returnere de rækker, som nævner mobiltelefon men ikke android.

Query expansion
Query expansion er en mere ‘intelligent’ (i mangel af bedre ord) form for søgning, men den kan desværre også let give en masse irrelevante søgeresultater. I korte træk fungerer det sådan, at databasen kan udlede andre søgeudtryk ud fra det man faktisk har søgt efter. Med udgangspunkt i eksemplet ovenfor, så kan en søgning efter ‘mobiltelefon’ også give resultater, hvor kun ‘android’ forekommer, fordi databasen kan se, at ‘android’ ofte optræder i sammenhæng med ‘mobiltelefon’.

Ifølge dokumentationen virker dette bedst, når man bruger (meget) korte søgeord.

Natural language mode
For at være helt ærlig, så kan jeg ikke finde et entydigt svar på, hvad natural language mode egentlig er. Det ser ud til, at denne funktion også giver en score til rangering af resultaterne efter relevans. Desuden kan man antage, at navnet betyder, at funktionen er bedre til at håndtere søgninger, hvor man bruger mere naturligt sprog. Natural language mode blev først introduceret i MySQL 5.5.

18

dec

0

TermKit

En fyr ved navn Steven Wittens vil gøre op med de gammeldagse UNIX terminaler og bringe dem ind i 2011 med sit projekt, TermKit.

It’s 2011, and monospace text just doesn’t cut it anymore. In the default ANSI color palette, barely any of the possible color combinations are even readable. We can’t display graphs, mathematical formulas, tables, etc. We can’t use the principles of modern typography to lay out information in a readable, balanced way.

At lave et grafisk alternativ til kommandolinjen har været forsøgt mange gange før, men der er en grund til, at de knapt nok slår igennem hos nybegyndere, der får koldsved ved tanken om terminaler: fleksibilitet og fart.

Alligevel synes jeg, at TermKit fortjener opmærksomhed. Det lader til at være gennemtænkt, og at fyren ved hvad han snakker om.

19

maj

0