Etikettarkiv: Humor

Hur man botar ”Writer’s block”

  1. Jag skriver inläggets rubrik och prokrastinerar sedan i en vecka.
  2. Bestämmer mig slutligen för att åstadkomma något, men vet inte vad ”Writer’s block” är på svenska.
  3. Det heter uppenbarligen ”skrivblockering”, enligt den oändligt pålitliga källan Wikipedia.
  4. Lär mig att tillståndet kan orsakas av prestationsångest eller brist på inspiration.
  5. Kollar meditationsguider på Youtube för att lära mig minska ångesten och ”öppna tankarna”.
  6. Inser snabbt att meditation inte fixar huvudet gratis, utan kräver övning för att ha någon positiv verkning.
  7. Eftersom deadlinen närmar sig, tar jag och prokrastinerar lite till.
  8. Startar en inre monolog utav frustration: ”Hur fan kan det vara så svårt att få nåt skrivet? Jag har ju gjort det förut, även med betydligt mindre tid att förbereda mig. Man kan ju rambla om vad som helst här i redaktionen, inte bryr dom sig vad man skriver. Nä helvete, jag förtjänar nog inte att vara med här…”
  9. Konstaterar att det föregående var överdramatiserat.
  10. Inser slutligen att det finns guider för behandling av skrivblockering som garanterat är bättre än vad jag kan åstadkomma.
  11. Som det visar sig är det OK att skriva skräp. Jag anser mig vara klar då jag märker att inlägget är exakt 200 ord långt. Tack och hej!

Simons 12 livsregler: ett motgift mot ett totalt värdelöst liv

Min idol Jordan Peterson, professor i psykologi, kom i januari 2018 ut med boken ”12 Rules for Life: An Antidote to Chaos”, eller på svenska: ”12 livsregler: ett motgift mot kaos”. Jag har ännu inte läst boken, som nog ligger i kön, men ändå inspirerad har jag nu sammanfattat 12 egna livsregler som ska hjälpa dig i att göra rätt val i livet. Eller åtminstone hjälpa dig att inte göra fel val. Vissa punkter lönar sig att ta med en liter salt, eller egentligen alla för att inte förvirra någon. Så buckle up, Bucko! som Jordan skulle ha sagt, roughly speaking.

1. Studera någonting meningsfullt

Utforska dina intressen och analysera dina starka och svaga sidor. Lär dig att förstå dina egna värderingar och fundera på vad just du vill bidra med i samhället.

Undvik studieinriktningar som inte tar dig någonvart eller som endast erbjuder kurser i fullständigt nonsens. Sådana studieinriktningar är i princip alla humanistiska ämnen. Totalt skräp. Undvik även elitistiska och överskattade institutioner som Svenska handelshögskolan. ”Men hankeiterna är våra vänner!” Lol. Nämn en hankeit du är vän med.

Du kanske känner någon som studerar på Aalto-universitetet och har hört dem berätta många intressanta saker om sina studier. Men du begriper nivån av deras inkompetens då de förklarar att matematik handlar om att lösa svåra integralfunktioner. Undvik även alltså alla ingenjörsutbildningar.

Det bästa valet du kan göra är antagligen att studera naturvetenskaper, men undvik gärna exempelvis kemi, som i själva verket endast är en del av fysiken. Undvik också att studera fysik eftersom du i så fall tvingas handskas med approximationer och mambo jambo kvantfysik. Datavetenskap är ett någorlunda vettigt ämne, men det kräver att du lär dig programmeringsspråk, och språk är humanistiskt. Så skippa också datavetenskap.

Studera matematik är väl vad jag försöker att säga. No reward, men framför allt no risk.

2. Acceptera din existens

Yeah.

3. Se filmen Pulp Fiction

Det här är den bästa filmen i hela filmens historia, kanske någonsin. Mästerverket av Quentin Tarantino, från 1994, som vann en Oscar för bästa manuskript, har sedan närmare 10 år bakåt varit min favoritfilm.

4. Ha sex, eller spela åtminstone golf

Idén är att få orgasm, vilket båda dessa aktiviteter resulterar i. Regelbunden orgasm främjar både den fysiska och psykiska hälsan. Det kan även minska risken att insjukna i cancer. Om du trots detta får cancer så har du i alla fall lyckats leva ett åtminstone mediokert liv genom att följa denna regel. Det är alltså en win-win-situation. Men kom dock ihåg att sex måste vara ömsesidigt medan det å andra sidan är socialt acceptabelt att tvinga med en vän till golfbanan.

5. Gå på en inflyttningsfest, förstör en stol

Ibland måste man satsa på kortvarig lycka för att balansera det med långvarig olycka som annars skulle leda till depression.

4. Uttryck dig med precision

Använd inte vaga och inexakta idéer som \sin x \approx x och liknande så kallade ”regler”. De är helt BS!

5. Gå med i Spektrums redaktion

Lägg dina studier åt sidan helt och hållet för en längre tid och börja skriva meningslösa artiklar om allt och ingenting. Att skriva texter som inte direkt har med dina studier att göra kan leda dina tankar in på nya stigar och du kan lära dig nya saker om dig själv. Dessutom tvingar skrivandet dig att artikulera dina tankar på ett sådant sätt att andra människor lyckas fånga ditt budskap. Att skriva utvecklar även ditt språk och expanderar ditt ordförråd. Men vad är meningen med allt detta trams? Jo, det hjälper dig i förverkligandet av följande punkt.

6. Trigga någon

Att trigga någon är ett komplext socialt fenomen som kräver djup och noggrann analys av både ens eget och offrets tankesätt, kunskap och värderingar. En bra trigg sårar inte offrets känslor, utan placerar denna i ett obehärskat och defensivt tillstånd i ett par minuter, innan förståndet tar tillbaka offret till verkligheten.

Man blir aldrig en perfekt triggare, utan det finns alltid utrymme för förbättring, och det bästa sättet att bli bättre är att öva. Börja med att trigga dina närmaste vänner som du vet att kan hantera det, och när du behärskar tekniken så kan du börja trigga svagare och mera instabila individer, exempelvis humanister.

7. Bevisa Eulers identitet

Visa att e^{i\pi}+1=0.

8. Skicka smöret

Om du upplever svåra tider och kontinuerligt misslyckas med att hitta en mening i det du gör så kan du alltid komplettera genom att vara den som skickar smöret vid frukostbordet.

9. Spela beerpong

Du har antagligen en lång och fruktansvärd sitz bakom dig där du tvingats socialisera och fått din sångboks peniskollektion utökad. Koppla av med ett eller fem spel beerpong. Alla är vinnare, speciellt de som förlorar. Dessutom utvecklar du din koordinations- och samarbetsförmåga. Det kan dock vara en bra idé att skippa det sista spelet.

10. Våga säga nej till Bang

Acceptera så tidigt som möjligt att kurstenten kommer att gå åt skogen och att varje räkneövningspoäng är viktig.

11. Var källkritisk

Undvik att använda så kallad ”teori” innan den är verifierad. Om du vill vara fancy schmancy så bevisar du själv alla satser innan du använder dem. Lita endast på axiom och definitioner om du vill sova gott om nätterna.

12. Sluta flexa och lev ditt liv

Allt större flugsmällor för allt mindre flugor

Varning: Detta inlägg innehåller extremt dålig Java-kod.
Läs på egen risk.

Den som nån gång har läst Reddit-sidan ProgrammerHumor har kanske lagt märke till tendenserna att hitta på alldeles absurda lösningar till mycket simpla problem eller koncept.
Till exempel, för cirka 9 månader sedan var volume sliders ett återkommande skämt och därav skapades många vackra implementationer, bl.a:

 

Mer nyligen var temat om hur man ”effektivast” kollar om ett givet heltal är jämnt eller udda. Funktioner som åstadkommer detta är lättare att implementera än volume sliders, så motiverad av mina nyfunna kunskaper i Tira (Tietorakenteet ja algoritmit) bestämde jag mig naturligtvis för att testa några i Java. Metoderna nedan är inspirerade av både ProgrammerHumor och egna idéer. Några av dem kan kräva kunskap om Java eller talteori för att förstå, så en TL;DR i meme- format finns längst ner för dem som inte bryr sig om tekniska detaljer.

Metod 1: Divisionsrest

Kolla talets divisionsrest med 2. Om resten är 0, så är talet jämnt, annars udda.

  • Tråkig normie lösning
  • Använder inte ens rekursion
public boolean isEven1(int n) {
    return n % 2 == 0;
}
Metod 2: Sista siffran

Vi undersöker talets sista siffra. Om den är 1, 3, 5, 7 eller 9 är talet udda, annars jämnt. Javas indexOf()- metod för listor returnerar -1 ifall det sökta objektet inte hittas i listan. Då gör vi ju så klart en lista av de udda siffrorna och kollar om metoden ger -1 för talets sista siffra.

  • Behöver inte utföra nån äcklig aritmetik
  • Konstant tidskomplexitet, fortfarande helt för effektiv
public boolean isEven2(int n) {
    List<Character> lastDigits
        = Arrays.asList('1', '3', '5', '7', '9');
    String number = Integer.toString(n);
    char last = number.charAt(number.length() - 1);
    
    return lastDigits.indexOf(last) == -1;
}
Metod 3: Induktion

Vi använder oss av matematisk induktion. Allmänt gäller att 0 är ett jämnt tal, efter varje jämnt tal följer ett udda, och efter varje udda följer ett jämnt. Vi bygger alltså iterativt upp en array av booleans tills vi nått det n:te elementet, som vi returnerar. Dock för att undvika en OutOfMemoryError måste vi tyvärr fuska lite och emellanåt skriva över gamla värden.

  • O(n) tidskomplexitet. Från Tira vet vi ju att O(n) är bra.
  • Induktionen kräver antagandet att 0 är ett jämnt tal.  Detta kan verifieras med en av de andra metoderna.
public boolean isEven3(int n) {
    n = n < 0 ? -n : n;        //gör n positivt
    int idx = 0;
    boolean isCurrentEven = true;
 
    boolean[] evenOdd = new boolean[10000];
    while (idx <= n) {
        if (idx == 10000) {
            idx -= 10000;
            n -= 10000;
        }
 
        evenOdd[idx] = isCurrentEven;
        isCurrentEven = !isCurrentEven;
        idx++;
    }
    return evenOdd[idx - 1];
}
Metod 4: Overflow

Alla vet ju att rekursion är bra, så här har vi en härlig blandning av rekursion och error handling.

Vi antar som baskunskap att Javas Integer.MAX_VALUE,
dvs. 2^31 – 1, är ett udda tal. Detta kan igen verifieras med någon annan metod.
Om  n = 2^31 – 1 är n udda. Annars kallar vi rekursivt på funktionen med parametern n + 2. Så klart, om n är ett jämnt tal borde den eventuellt hoppa över 2^31 – 1 och orsaka en OverflowException. Men eftersom Java hanterar den här situationen utan att klaga, måste vi använda Math.addExact()- metoden som explicit ger en Exception ifall vi går över 2^31 – 1.

Rekursionen upprepas i värsta fall ca 2^30 gånger, så en StackOverflowError orsakas långt före det. Vid detta skede avbryter vi rekursionen och startar om med en hjälpvariabel som säger hur långt vi kommit förut.

  • O(2^31 – n) tidskomplexitet. Större tal får snabbare svar.
  • isEven4(1200000000) svarade true på endast 23 sekunder.
int offset;
 
public boolean increment(int n) {
    if (n == Integer.MAX_VALUE) {
        return false;
    }
    try {
        n = Math.addExact(n, 2);
        offset += 2;
        return increment(n);
    } catch (ArithmeticException e) {
        return true;
    }
}
 
public boolean isEven4(int n) {
    offset = 0;
    while (true) {
        try {
            return increment(n + offset);
        } catch (StackOverflowError e) {
            //inget fel här, moving on...
        }
    }
}
Metod 5: Goldbach

En välkänd hypotes inom talteorin är den s.k. Goldbach Conjecture, som säger att varje jämnt tal större än 2 kan uttryckas som summan av två primtal. Resultatet har inte bevisats för godtyckligt stora jämna tal, men det har verifierats med dator för tillräckligt stora tal för våra ändamål.
Det enda jämna primtalet är 2, dvs det största jämna talet som kan uttryckas som summan av två jämna primtal är 4. Alltså om vårt tal är större än eller lika med 6 söker vi udda primtal vars summa är vårt givna tal. Annars undersöker vi talet med Metod 4.

Hur kan vi då visa att ett givet tal är ett primtal? Vi använder så klart Wilson’s Theorem. Enligt denna sats är n ett primtal om och endast om talets (n-1)! divisionsrest med n är n-1, dvs.
(n-1)!\ \equiv\ -1 \pmod n
Till detta ändamål har vi hjälpfunktionerna modFactorial och isPrime.

  • Antagligen O(n^3) tidskomplexitet. Funktionen modFactorial är O(n) och isEven5 har en dubbel loop.
  • Körtiden varierar kraftigt mellan udda och jämna tal av ungefär samma storlek:
    isEven5(4000) gav true på 2 sekunder och isEven5(4001) gav false på cirka 15 sekunder.
    isEven5(10000) gav true efter 30 sekunder. Hur länge tog det för isEven5(10001)?
  • Använd alltså den här metoden om du redan anar att ditt tal är jämnt!
public int modFactorial(int p, int mod) {
    if (p < 1) {
        return -1;
    }
    long n = 1;
    for (int i = 1; i <= p; i++) {
        n = n*i % mod;
    }
    return (int) n;
}
 
public boolean isPrime(int n) {
    if (n < 2) {
        return false;
    } else {
        return modFactorial(n - 1, n) == n - 1;
    }
}
 
public boolean isEven5(int n) {
    n = n < 0 ? -n : n; //gör n positivt
    if (n < 6) {
        return isEven4(n);
    }
 
    for (int i = 3; i < n; i++) {
        if (!isPrime(i)) {
            continue;
        }
        for (int j = 3; j <= i; j++) {
            if (!isPrime(j)) {
                continue;
            }
            if (i + j == n) {
                return true;
            }
        }
    }
    return false;
}

Här tog kreativiteten och/eller tålamodet slut, för om vi vill kan vi göra godtyckligt ”effektiva” algoritmer, men de är inte nödvändigtvis så intressanta. Men nu har vi ju jobbat under premissen att vår metod ska ge ett svar för just det talet vi stoppar in, och att svaret ska vara rätt. Vad om vi ändrar på spelreglerna lite? En bonusmetod, isEven6, hittas under länken längst ner.

Det här inlägget kunde tolkas både som en uppmuntran och en varning. Avsiktligt dålig kod kan vara väldigt underhållande och lära en tänka på problem på nya sätt (om det här är en bra eller dålig sak är upp till läsarens tolkning). Å andra sidan är dessa metoder det oundvikliga resultatet av att spendera helt för mycket tid på Tira.

TL;DR

https://i.imgur.com/TUYX6Tq.jpg