Grejen med SQL

Det finns alltid en rätt tid för en fräsig SQL och en fel tid och fel tid är oftast när klockan är efter 21. Idag är det 23:25 men ändå en bra SQL-tid i saltgruvan.

För den (stackare) som ännu inte är invigd i SQL-träsket kan jag berätta att att SQL är ett språk (Structured Query Language) alltså ett strukturerat fråge-språk och det är precis vad det låter som: ett språk med vilket man hämtar data genom att ställa frågor!

För den oinvigde är ”data” helt enkelt information, ex: personinformation över alla personer som finns i Sverige, information om alla bilarna du äger, din porrfilmssamling eller innehållet i ditt kylskåp. Data är typ information i någon from av struktur.

En dator är alltså en pryl som behandlar data och du kan inte kalla din dator för ”data” med hedern i behåll. Det är liksom som att blanda ihop ord och bokstäver (typ) men det gör man ju inte. G är en bokstav GET är ett ord bestående av bokstäver, ja ni fattar. När det kommer till tal och siffror är det precis samma sak fast här verkar totalt kaos råda. DAGLIGEN läser man om dödssiffror som stiger och annat felaktigt. Det är ju faktiskt dödstalet som stiger. Tal består ju av siffror… Om man som jag gillar att reta upp sig på saker är detta närmast en outtömbar källa för irritation och bultande ådror i pannan  – DAGLIGEN. Se detta inlägg för mer information.

Hur som, i all denna är information är SQL din vän att hålla i handen när du behöver leta i detta träsk av information och jag har inte alls tänkt att närmare förklara vad och hur man pratar SQL men det är lite av ett vägskäl inom programmering, många ger upp när de kommer till SQL. En dålig SQL-fråga kan sega ner ett system enormt samtidigt som en bra kan öka prestandan som satan. Bäst är när man på en kvart optimerar en fråga och går från flera sekunder till några millisekunder. Många är de stollar som försökt ersätta SQL med något annat ”enklare” – nästan alltid mycket sämre.

I alla fall, en grej som ofta är lite knölig i SQL är att bygga en snabb sökmotor och om du står inför detta så fortsätt läsa…. (konstpaus).

Anta att du har ett antal produkter i ditt system och dessa produkter har ett eller flera sökord kopplade till sig och du vill alltså söka fram den produkt som matchar bäst, dvs där flest sökord matchar din sökfras.

Programmering handlar mycket om att kunna uttrycka saker på så få ord som möjligt och så exakt som möjligt med de ord som finns i ett språk och egentligen är det samma sak att uttrycka på ett vanligt språk som att ”programmera” det man vill säga. Enda kruxet är att programmeringsspråk har ofta väldigt begränsat med ord man kan använda sig av.

På svenska skulle jag säga:
Jag vill ha en lista på alla produkter vars sökord innehåller sökfrasen och listan ska sorteras så att den produkt som har flest träffar bland sökorden på sökfrasen ska vara överst och resten i fallande ordning.

Men det kommer man inte långt på, det är alldeles för luddigt och svaret skulle bara bli error stupid! SQL har inte dessa ord så då får man uttrycka sig med andra ord. SQL har däremot orden ”längd” och ”ersätt” som man kan använda för att få reda på längden (antal bokstäver) på ett ord eller mening och ersätt för att ersätta ett ord med ett annat.

Så på svenska skulle jag då säga:
Jag vill ha en lista på alla produkter vars sökord innehåller sökfrasen och listan ska sorteras fallande utifrån kvoten av differensen av antalet bokstäver i produktens sökord och antalet bokstäver i produktens sökord efter att alla förekomster av sökfrasen tagits bort, och längden på sökfrasen.

Visst fuktar det? VISST FUKTAR DET?

Differens och kvot kommer du ihåg från matten i åk6 va? Det är alltså ”delat med” och ”minus” vi pratar om.

På SQL skulle det skrivas såhär:
select Product.*, (length(Product_keywords) – length(replace(Product_keywords, ‘SÖKFRAS’,”))) / length(‘SÖKFRAS’) as score from Product where Product_keywords like ‘%SÖKFRAS%’ order by score desc

BOOM! Sen tar man liksom bara en kaffe och sträcker ut sig.

Ska inte hävda att jag själv klurade ut  detta utan jag snubblade sannolikt över det på nätet när jag googlade efter en bra lösning på nämnda problem för länge sen men det är en härlig SQL jag med stor iver med jämna mellanrum skriver.

Frågor (höhö) på det?

Publicerad: november 25, 2015 - Fredde, Mjukvara |

Kommentera

E-postadressen publiceras inte. Obligatoriska fält är märkta *

Följande HTML-taggar och attribut är tillåtna: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

3 Kommentarer |

www.tabb.at – ett enkelt kvällshack

Häromdagen gjorde jag ett enkelt kvällshack och slöjdade ihop ”grej” så man kan följa en aktiekurs i en webbläsartabb/flik.

 

Publicerad: april 9, 2014 - Mjukvara |

Kommentera

E-postadressen publiceras inte. Obligatoriska fält är märkta *

Följande HTML-taggar och attribut är tillåtna: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Skriv en kommentar |

WTF är DNS reflection?

Tycker du att internätet gått extra trögt senaste veckan? Har kanske till och med dina favvosidor varit svåra att nå?

Då beror det antagligen på internethistoriens största DDOS, ett bråk mellan Cyberbunker och SpamHaus som trappades upp förra veckan.

SpamHaus är ett ideellt företag som tillhandahåller listor på servrar som skickar spam så att nätverks-nissen på olika företag kan begränsa trafik till och från dessa servrar för att slippa massa spam (hyvens). SpamHaus hade svartlistat servrar från Cyberbunker som är ett tyskt företag som hostar ”allt utom barnporr” och har en ”mind your own business”-policy (också hyvens) vilket Cyberbunker svarade på genom att genomföra en rejäl DDOS mot SpamHaus som fick det att vibrera i internets grundstomme. SpamHaus vände sig till Cloudflare för hjälp. Cloudflare är specialister på att ta emot mycket trafik och fått marknadsföring money-cant-buy av bråket.

Klicka här så ska jag förklara vad som händer

Publicerad: april 2, 2013 - Mjukvara, NonRSS |

Kommentera

E-postadressen publiceras inte. Obligatoriska fält är märkta *

Följande HTML-taggar och attribut är tillåtna: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Skriv en kommentar |

Ta en kaffe och läs om näthat

”Män som näthatar kvinnor” – ja man får väl börja med att fråga sig åt vilket håll rubriksättarens genuskompass egentligen pekade. En mycket roligare rubrik hade varit ”Hen som näthatar kvinnor” – men nu är det slut på det roliga. Sätt dej rak i ryggen och hämta en kopp svart för nu blir det allvar, nu blir det hat.

Det var några veckor sen jag skrev detta så det kan vara lite dammigt, men ändå.

Människan har i alla tider hatat. Vissa hatar andra för att andra hatar och tycker att deras egna hat, baserat på andras hat är mycket mjukare och vackrare än det hat som den som de hatar har.

Klicka här och läs mer

Äppelskruttet eller soptunnan?

 

Senaste tiden har ägnats åt att programmera appskrällen i objective-c/cocoa för IPhone och i java/android för Android. För enkelheten skull kallar jag det lite slarvigt ”Android” eller ”IPhone” även om det egentligen inte riktigt stämmer när man pratar om de underliggande ramverken.

Men nu gör vi en titt under huven för att se vad för fördelar vi hittar i respektive sekt. För det handlar verkligen om sekter, piluttadej för IPhone är bäst! Nä android är såååå mycket bättre! Man ba liksom, hallå! Är ni inte pr0 eller wtf!?

Jag tänkte inte ge mig in i kriget om det är bättre med en större skärm eller inte. Det är säkert bättre med en större skärm om man behöver en större skärm. Det här blir istället en jämförelse ur en utvecklares perspektiv.

Först, det är fränt att kunna programmera. Jag har alltid älskat att programmera saker ända sen jag satte mina fingrar på tangentbordet på C-64an så har det dansat ur små program på alla håll och kanter. Det är bara en fett tjockt skön grej att kunna berätta för en maskin exakt vad den ska göra och så gör den det i all evighet tills strömmen går. Men jag ska skriva om min passion för programmering vid något annat tillfälle.

Språksyntax
Java är alltid java och syntaxen är ren, tydlig och enkel. Obj-c syntaxen är svårare men har man snubblat sig över tröskeln så rullar det på. ”metod”-deklarationen är rätt rolig i obj-c men Java är svårslaget.

Vinnare: Android (Java)

Utvecklingsmiljö
Jag kör eclipse för Android och XCode för ios. XCode är helt okej. Eclipse är (precis som Xcode) en utvecklingsmiljö i vilken man utvecklar program, alltså ett program för programmerare skrivet av programmerare och eclipse är bra, makalöst jävla megabra.

En viktig sak med utvecklingsmiljön är självklart versionshantering av källkoden och inte helt otippat jobbar eclipse helt perfekt med SVN (subversion). XCode är betydligt skruttigare och jag trivs faktiskt bättre med att använda svn via Terminalen än det inbyggda i XCode.

Båda två har bra simulatorer och debuggning funkar riktigt bra.

Eclipse har ett ton med kortkommandon för allt mellan himmel och jord. De jag använder mest är alt+pilupp/ned, alt+cmd+pilupp/ned, cmd+d, shift+cmd+r (såklart), shift+cmd+t, cmd+shift+f11 osv osv. Det går blixtsnabbt att koda med eclipse om man känner till dess kortkommandon, det nästan ryker om koden.

Eclipse äter XCode till frukost.

Vinnare: Android (eclipse)

Bygga gränssnitt
Javaprogram brukar man känna igen för att de ser bedrövliga ut. Android erbjuder ett verktyg för att bygga GUI (gränssnitt) som är ”sådär” minst sagt. Har man inget att jämföra med är det okej men i jämförelse med XCodes Interface-builder är det ganska värdelöst. Den bästa layout-managern är i mitt tycke ”RelativeLayout” som är ganska okej att bygga gränssnitt i från grunden men en riktig plåga att ändra och flytta komponenter i. I princip definierar man hur komponenter är placerade relativt varandra och flyttar man en så kan det säga *poff* så ligger resten i ena hörnet. Med eftertanke och planering så går det okej. Men Interface-builder i XCode är riktigt bra. Det är mycket enkelt att bygga gränssnitt för IPhone.

En stor fördel är att det går snabbt att ”slänga ihop” en snabb prototyp av en ide.

Vinnare: IPhone (XCode/InterfaceBuilder)

Kompatibilitet
Det är rimligt att anta att livslängden på en smartphone är kring två år och då är det rimligt att göra appar som är kompatibla med 2år gamla operativsystem. Vilket i praktiken innebär ios5 och android 2.3. Köper du en IPhone idag får du ios6 och kör man IPhone4/4s så kommer ios6 som en automatisk uppdatering. Jag skulle tippa på att när ios7 kommer så är det nog läge att överge stöd för ios5.

Android å andra sidan går utmärkt att köpa nya med 2.3 även om operativet är två år gammalt! Detta blir givetvis en pain-in-the-ass för utvecklaren som antingen får välja att bara stödja de 30% som kör 4.0 eller välja att stödja från 2.3 men då inte kunna använda de fördelar som finns i 4.0. Resultatet blir att man får använda olika kompatibilitetsbibliotek och tredjepartsramverk för att efterlikna 4.0 funktioner på 2.3.

”Spinners/Pickers/Wheels” kan göras med: http://code.google.com/p/android-wheel/ och ActionMeny / ActionBar / Fragments kan man göra med: http://actionbarsherlock.com/ båda fungerar dock riktigt bra.

Sjävklart haltar jämförelsen då IPhone tillverkas av ETT företag och Android är open-source, men faktum kvarstår ändå.

Vinnare: IPhone (IOS)

Testning
Testning har senaste åren fått mycket fokus och det är mycket positivt. Både att ”testare” växer fram som en helt naturlig del av utvecklingsteamen men även att det börjar bli standard för utvecklare att skriva unit-tester/testkod för koden. Kortfattat så kan man säga att unit-tester är små miniprogram som testar logiken i programmet.

Jag är ett stort fan av unit-tester.

I både Eclipse och XCode är det enkelt att komma igång med unit-testerna och de har ungefär samma funktionalitet så det blir faktiskt lika på denna punkten.

Vinnare: Båda, ialla fall om man skriver sina tester annars är man en förlorare. :)

Persistera objekt
Eller att ”spara saker” kan vara en fröjd eller plåga. Personligen gillar jag att skriva SQL-kod och tycker att ett samtal med databasen är trevligt att göra. Av någon oförklarlig anledning är detta riktigt omständligt att göra i Android. Eller både och. Det är relativt enkelt att göra DAOer men att använda Loaders verkade (med viss reservation) rejält meckigt och dessutom kom de först i 3.0 så mitt val föll på gamla hederliga DAOer. I IOS finns CoreData som är riktigt trevligt. Man bygger upp sin datamodell och sen sköts databaskommunikationen automatiskt, funkar riktigt bra.

Vinnare: IPhone (CoreData)

Allmänt hårslitande
Programmering handlar till mycket stor del att ta sig igenom en äventyrlig hinderbana med alla tänkbara fallgropar och på vägen lösa alla problem som uppstår. Detta har lett till att ett och annat tangentbord krökts kan jag lova. En kreativ programmerare kan svära timvis utan att upprepa sig, men inte heller avbryta felsökningen för annat än mer kaffe eller småkakor. Man vet ju att det alltid på ett eller annat sätt går att lösa, om inte genom att skriva om skiten från början.

Det finns givetvis fördelar och nackdelar med båda språken. IOS har inte på långa vägar lika trivsamt sätt att hantera fel som try-catch i Java. Även om try-catch finns i IOS ska det användas när programmet kraschar och inte till vanliga ”fel” då får man jonglera runt med en pekare till ett NSError-object.

En pain in the ass är när man ska komma igång med XCode då måste man ladda ner en massa certifikat och profilen och fan och hans moster. Nu när jag gjort det några gånger är det hyffsat smärtfritt men i början var det ett jädra meck.

The Royal pain in the ass är när man ska släppa appar i AppStore. För det första kostar det 800spänn att skapa ett konto och en app går inte att flytta mellan konton så har du i framtiden tänkt sälja den så bör den ligga på ett separat konto från början – katching (för Apple). Okej men då har man degat 800 spänn och backar till med bilen vid ITunesConnect som är själva varuintaget för AppStore där vid lastkajen förväntar man sig att det på Apple-maner ska så en välpolerad yngling och hålla upp dörren när man kommer med sin skinande nya app – ICKE!

Istället möts man av ingenting förutom en luggschleten hink, märkt med texten ”Lägg din app här”. Jaha? Vad händer sen. Ja se, det är nu det roliga börjar för nu ska ers Höghet granska ditt verk vilket sker efter en helt idiotiskt och slumpartad process. Det tar ungefär 1-2 veckor, det beror på. Kan ta 3 dagar – kan ta 15 dagar, det beror som sagt på. Men inte på var du är i kön utan på något annat. Vad är det nog ingen som vet. Det går heller inte att kolla var i ”kön” man är utan rätt vad det är kommer ett mail med att vi börjat titta på din app. Kul!

Då vet man att det bara är några timmar kvar, oftast, kan också vara 3 dagar. Det hela är så fullkomligt värdelöst att när appen sen blir godkänd blir man så glad att man glömmer hur värdelöst det är.

Vill det sig sen illa så blir appen inte godkänd men då kanske du tänker som mig, att man borde ges chansen att rätta till det snabbt och sen få den godkänd? Icke. Du är sist i kön igen. Hur lång tid tog kön nu? Det vet man inte, 1-2 veckor. Men snälla.

Vill man gråta ut så finns det ett ”resolution center” men ingen jobbar där. Det går snabbare att ”rätta något” och sen lägga den på kön igen.

Android erbjuder flera olika alternativ till distribution av appen tex mail eller nerladdningsbar från en webbsida.

Pain-in-the-ass-koefficienten är helt enkelt lägre med Android.

Vinnare: Android

Sammanfattning och avslutningssång
Det är faktiskt väldigt roligt att utveckla appar både för IPhone och Android och jag kan inte påstå att det ena är väldigt mycket bättre än den andra. Möjligtvis är det lite enklare att ”prova på” med android. Kostnaden att köpa en Android-lur är dessutom mycket lägre.

Undra hur man bygger en app?

Hallådär bakom tangetbrädan!

Drömmer du om att göra appar för IPhone och tjäna storkovan?? Vill du leva upp till din hipsterstil med en sneakers-app? Har du önskat att du kan göra en app där man kastar falukorvar på ettriga fiskmåsar?

Inte jag heller, men däremot har jag gjort en liten sammanfattning över hur man undviker de vanligaste fällorna som Apple har gillrat åt dej som tänkte börja med utveckling i objective-c. Det är ingen nybörjarguide utan du kanske som jag är en invandrare från något annat språk, i mitt fall java och PHP.

Klicka läs mer nedan om du är intresserad.

Continue reading

Datastrukturen from hell

Har suttit en typ två veckor och försökt få till en trädstruktur – va? TVÅ VECKOR?

Oftast brukar det handla om den ska vara en path- eller parent-child-baserat träd sen bara koda så fingrarna glöder men denna är fan riktigt klurig.

Ena trädet håller ”templates”, definitioner av items en ”något” som har egenskaper och/eller en lista av andra items. Sen finns ett träd till som innehåller konkreta implementationer av definitionerna, alltså faktiska ”saker” som följer de definitioner som finns i template-trädet.

En användare kan ha access till en generell del i template-trädet och olika subträd som då kan ersätta eller bygga ut de generella definitionerna.

Faktiska saker ska också följa de regler som template-trädet har hur sakerna får vara parent/child till varandra. Sen kan vissa delar i defintions-trädet vara avklippta för en user och samma sak i trädet med faktiska saker.

Ja jag vet egentligen inte vad jag vill ha sagt med detta, kan du ta det en gång till? jag fattar inte riktigt hur jag menar!

Långsam resolv av lokala adresser på mac os x lion

Efter uppgraderingen av OS X till Lion så började resolv av lokala adresser till apachen gå trögt. Men inte jättetrögt, bara 2-sekunder-trögt sådär trögt att man nästan blir galen men ändå inte hinner kasta ut datorjäveln genom fönstret för 2 sekunder senare så hittas adressen.

Men lösningen var lika enkel som märklig.

Mina lokala adresser hade jag döpt till .local på slutet vilket byttes ut mot .test istället, vips så gick det snabbt igen.

Enable php on SuSE 11

Ja varje gång är det samma huvudbry och varje gång skriver jag ner det på en lapp som jag förlägger någonstans.

SuSE är ett fint operativ och för att få webbservern att parsa .php filer som php så:


a2enmod php5
rcapache2 restart
apachectl -M

Av någon anledning glömmer jag rcapche2 och kör apache2ctl i en timme och det hjälper ju inget…

Nu är jag frisk från förkylningen – hurra hurra!

Den efterlängtade katalogen har ääääääntligen dykt upp:
Återkommer med recension!