Heisann!
Artig at så mange har likt det og vil høre hvordan jeg har løst det, så her kommer det en lang og kronglete forklaring
Appen består var to deler. quoteGenerator.py og imageGenerator.py
quoteGenerator.py:
Jeg har både brukt og laget noen generatorer tidligere, og et problem er ofte at de lager ting som er for random, og da blir det kjedelig å generere. Så hadde lyst å legge ned litt stricte regler, men ikke for strict for da blir det fort kjedelig igjen.
Den beste løsningen ble å lage setups som tok utgangspunkt i virkelige quotes. Feks.
- "All you need to stay happy is coffee" (Vet ikke om dette er et virkelig quote, men kunne vært det)
Så bryte settningen ned i deler. Først ta tak i ordet coffee og lage en liste med ord den kan bytte det ut med, så du ender med ting som "
- All you need to stay happy is alcohol" så ta tak i ordet 'happy' og lage en liste med ord som kan være der, så du ender med
- "All you need to stay preserved is alcohol"
og bytte ut ord nedover og nedover på denne måten så den til slutt begynner å generere ting som er veldig vanskelig å forutse.
- "All you need to get condemed for all eternity is a body"
så videre ta tak i all you need og se om en kan putte inn ord der også.
Laget et slags eget xml format så det er lett å lage slike lister med ord i et hvilket som helst tekstbehandlingsprogram, og det ser slik ut:
(Dette er en veldig forenklet version. Er fort 100 vis av ord i en liste)
Kode
<template>
<0> is just <1> <2>.
</template>
<0>
A dream | The human soul | All absence |
</0>
<1>
a mental projection | a moving picture | tomorrow |
</1>
<2>
on a poster | captured in a magazine | on television |
</2>
I python laget jeg en enkel parcer som leser denne "xml" filen og bytter ut <0> med et ord fra listen <0> osv. Jeg satte så min gode venn Jesper som har vært med på hele prosjektet og som er veldig flink til å skrive i gang med å fylle ut lister med ord og lage flere setups. Til slutt hadde han laget over 40 slike setups med masse masse ord og den begynte å lage veldig artige ting. I starten hadde vi også med navn på slutten. Altså. - "All you need to get condemed for all eternity is a body" - Edvard Snowden. Men han følte det ble litt drøyt å legge ting i andre sin munn, selv om jeg synes det var litt artig, så vi gikk bort fra det og holdt quotsa rene.
Mens han satt å laget quotes så begynte jeg på bildegenereringa. Her dro jeg ut på nettet og fant bilder som er sånne klassiske inspirerende bilder, croppet de, og fant farger fonter kunne ha og plasseringer på bildet. La inn litt over 100 bilder og et slags bildesetup ser slik ut:
{'url': 'images/square/147.jpg', 'fontColor': [(0,0,0), (30,30,50)], 'placement':[
['center-right', 'right', 'regular', 'pad'],
['center-right', 'left', 'regular', 'pad']]},
Den velger et random bilde fra en liste med bilder, velger en random farge som funker på det bildet, og velger en tilfeldig plassering blant de plaseringene jeg har lagt inn. Det mest krevende var å lage utregning og alignment av teksten så jeg enkelt kunne si, på dette bildet bør teksten være center-right center på y aksen og til høyre på x aksten. Teksten skal alignes right, bredden den kan okkupere skal være regular (1/3 av bildet) og den skal paddes.
Den må passe på at ting ikke går utenfor kanten osv. Dette er laget mange ganger før, men var artig å finne opp hjulet på nytt og løse et problem browsere og ms-word osv løser hele tiden.
Når dette beynte å sitte var det å lage en nettside. Klassisk bootstrap 3 og jquery ting. Gjorde en del forsøk før vi landet på noe vi likte.
Her er en version som ble forkastet. Ble heller aldri ordentlig ferdigstillt, men var et forsøk på å lage litt animasjoner med html5 canvas som bygde opp quoten.
http://jorgnsn.com/DoNotIndex/Dev/Inspire2/
Appen kjører på google app engine som jeg er passe fornøyd med. Har brukt det på noen prosjekter tidligere, og synes det er litt kronglete. Alt er også litt vanskelig å få til siden de er veldig opptatt av at ting skal kunne scale. Det er selvfølgelig en god ting. Men når jeg lager et ganske lite prosjekt som dette er det synd at koden veldig fort blir kronglete for å ta hensyn til strukturen de har lagt opp.
Et eksempel er at når noen deler et bilde blir dette bildet generert fra setupen hver gang. Dette bruker serveren litt tid på, og det hadde vært bedre og lagret det som et statisk bilde som bare ble servet. Dette hadde vært veldig lett å fått til med et vanlig LAMP stack feks. Mens på google app engine må jeg lage et back end modul som blir startet opp og som genererer bildet igjen, for så å bruke et api som snakker mot google cloud storage og laste bildet opp der, så må jeg serve dette bildet ved å bruke noe som heter blobstore i google app engine. Det har jeg ikke orket å gjøre, men er vel det som står igjen på listen min.
hosjmeister, det at du har fått samme bilde med samme tekst er ganske utrolig egentlig, for det er så mange muligheter at det nesten ikke kan skje, så lurer på om det er noe feil på nettsiden som gjorde at den la inn noe den allerede hadde generert. Skal sjekke det ut.
Det er ikke noe som knytter bilder eller tekst sammen, det er helt random, men jeg har lagt merke til at hjernen min driver å leter etter mening og sammenheng mellom det som står på bildet, og selve bildet. Jeg misstenker at hjerner liker veldig godt å finne sammenhenger, så da lager den en sammenheng for meg selv om det egentlig ikke er noe, og det er egentlig en artig ting jeg har funnet ut av igjennom dette prosjektet.
Ellers har det vært veldig artig å jobbe på. De første tre dagene denne uka satt jeg og Jesper sammen til veldig sent og jobbet på prosjektet for å få det ferdig, og jeg vet ikke hva det er, for selv om dette er et veldig rart prosjekt å bruke masse tid på, så er det bare så ufattelig artig å sitte sammen og grave seg igjennom alle mulige slags små utfordringer som å teste ut forskjellige farger på øyet, teste ut tekster til siden, skal boten ha en personlighet, hvordan føles dette, og se hvordan alt forandrer seg med små grep, og komme frem til noe som funker. Jeg har funnet ut at jeg blir veldig lykkelig når jeg sitter dypt inni sånne prosjekter, så er absolutt å anbefale