Sections

2020-02-02

Freestyle rapy české Aspie komunity přes Messenger

2020-02-02 je takové zvláštní palindromické datum, jak v ISO formátu, tak různých plebejských formách zápisu typu 02/02/2020, že mi sem nedá nepostnout něco speciálního. To jsme takhle 3x přes Messenger plýtvali svým básnickým střevem a dělali freestyle rap. Původně jsem navrhoval, aby to vyšlo na Aspie blogu založeném 1 současným správcem Českopedie, ale za celou dobu jsem to tam nenašel, takže to dávám sem, ale některá jména trošku zcenzuruju od původních souborů, co se válely v počítači. Data změny jsou 2015-08-13, 2017-12-30 a 2018-09-12, ale pár dní mi trvalo, než jsem to upravil, abych zrýmoval pasáže, které se nerýmovaly.

DISCLAIMER: Názory a postoje níže v rámci freestyle rapu vyjadřené se zcela neshodují s našimi skutečnými názory. A taky nejsme ve skutečnosti tak sprostí.


TAKE 1

Děje se na Idiopaticky idiotickém komunikátu sympatizantů sadistické dishonestace bohemismů vindikujících mentální kommocí autistického spektra.

(M)C Depka
(G)etman (Honza)
(L)lukky
(K)rafty

Editoval Getman


M:
Rap rap rap,
každej by z toho zheb,
nemám kde sehnat fet.
Budu jako Metrix,
můj mobil mi kix'.
Budu těžkej raper,
sem svůj vlastní hater.
Jou jou jou,
z mýho rapu se všichni poblijou.

G:
Salamalejkom,
narvu do prdele salám s čabajkom,
jestli se budete srát do islámu,
pošlu na vás moji nasranou lamu.
Ali je největší
a kdo si to nemyslí, je pičus,
jiná víra nesvědčí,
mlátím každého bezvěrce o kaktus!

L:
Hovno

M:
Jou, dame frístajl

G:
Musím kopírovat,
nechte mě otevřít Notepad!
Pak přeformátuju a máme text na kasovní trhák.
Zabijte se jestli si myslíte, že jsem čúrák.
MC depka je deprese a MC Getman hate,
všichni budou schody do mýho paneláku mejt.

M:
Budu rapovat,
až chcípnu, ze statních peněz budou muset mi tělo pochovat,
pohřeb bude zbytečnej,
můj život není věčnej,
ani ten váš,
zabije me hlad a nebo mráz?
Asi se zabiju sama,
nechci tu být mezi váma,
všichni mě serete,
každej človek se tu jenom plete.

K:
A mě serou ignoranti

G:
Boží svět je na hovno a islám je víra,
to chce dlouhej vous a pořádnýho kníra.
Potom odpálit kus tý velký sračky,
boží mlýn zaujme místo pračky.
Při soudným dnu Bohovi narthnu prdel,
jestli půjdu do pekla, tak aby ze světa sešel.
Žádnej čúrák nemá mi co poroučet,
nebo mu naúčtuju obézní účet
jako půlka dětí Americe,
těm nandám do čízburgru štěnice.

M:
Sklenice, petice, plíce, opice, sice, kytice, kobylnice.

G:
Plíce.

G:
ﷹﷲﷷﷸ, (Sallá-lláhu alajhi wa-sallam)
hasta la vista, jdem na salám.
لا يلله يللا الله, (Lá il-láha illa lláh)
na bezvěrce snese prach.

L:
Stratil sem klíče, do píče.

G:
Nechápu nic, co se mých hoven týče.

L:
Do píče

M:
hranice

G:
napíše samice,

L:
co volila je v putyce.

G:
A spálila všechny kytice národa českého,
co je na něm kurva hezkého?
Aspie Community Freestyle, vy kundy,
vyseru se vám na nějaký bžundy.

M:
Hustý, mám rýmy do svýho slovníku rýmu.

G:
A ten slovník je součást našeho týmu.

L:
Vyseru se do zemanovi kundy.

G:
Vykradu mu všechny jeho fondy.

M:
Mám slovník rýmu,
nenosím plínu,
vím, že jednou zhynu,
nesu na sobě vinu toho, ze existuju,
cover na album maluju,
ale je hnusný jako všechno,
muj rap není žádný techno.
Pisu tady mimo tema,
nehledám žádnýho Nema.

G:
Já jsem tu nejspíš proto, abych všechno posral,
ne, že bych to chtěl, ale asi jsem se proto sem dostal.

M:
Vlastně teda

G:
hledám peda,
to mi nedá,
pinďour zvedá.

L:
Kvalita videa, to se fakt podělám,
Našli tu hyenu, já si ji zadělám,
na česneku, ať to smrdí.

G:
Nebude tu zemi oplývat strdí.

K:
Ty vole, máme tady talenty.

L:
Ale taky dementy.
Ale zdá se mi, že ta hyena smrdí.
Seru na lidi,
to budu radši honiti.

M:
Jsem úchylná, libí se mi sado-maso,
neumím kolem sebe obmotat laso.
Ani mlátit nemám sílu,
nečekejte, až mě uvídite, vílu.
Ať se ten kluk řeže sám,
uvidí, kdo je tu pán.
Nemám žádnej plán,
asi prázdno v hlavě mám.
Tužku na papír dám, napíšu vám,
že je mezi lidma samej klam
a spoustu fám
před sebou mám
plno zavřenejch bran.
Těla zavěsim do lán
a dám si večeři, ham,
Nemám utýct kam.

G:
Malo mám paměti RAM.

L:
A dám sůl do ran.
Z každého semínka může vzejít individuální bytost.

K:
Honit si čuráka ti dělá ohromnou radost?
Ale když je nevystříkáš, tak se
nevytvořej nový, ze
kterejch může bejt bytost.

L:
Ne, nevzejde, každý má stejný genetický materiál
ovlivňuje ho až propojení z vajíčka dál.

K:
Máš mokrý sny, jak cítíš ráno za tmou?

L:
Jo.

K:
To pak spermie stejně chcípnou.
Teda já nemám mokrý sny.
Teda vlastně jo, protože já nehoním.

L:
V tom případě si vykastrovaný,
protože muž má nutkání
se rozmnožovat, čili
tak jsi žena, ty ne jestli.

K:
Máš pravdu, jsem žena, chceš fotku, broučku?

M:
Dáme freestyle,
nebudeme dělat Heil,
psát rýmy
a bejt liny
a flusat sliny
a lizat pliny.

L:
Nechci a neříkej mi tak. Řekni nějakou ukolébavku.

K:
Víte, co mě
v těchto dnech ukrutně
sere? Že když já si pustím
při spaní nějaký seriál, tak mi najednou
litat mouchy (aj, zmrdi) pred obrazovou začnou.
Chtělo by to mouchokaust, vím.

L:
Den už se sešeřil,
už jsme si dost užili,
tak hajdy do peřin
a ne, aby jste tam řádili,
zítra je taky den,
slunko mi to dneska slíbilo,
přej mě si hezký sen
a kéž by se nám to splnilo.
Na na na na na na na na,
aby už nebylo, co by nám
chybelo, hajduly dajduly,
aby víčka sklapnuly.

M:
Hnusnou noc,
ptáš se proč,
protože bude hnusná,
já sem píča nevkusná.
Hnusný sny a noční můry,
hoven vám tu řeknu fůry,
ať vidíte v noci stvůry,
co vam hryžou mozkový kůry.
Pochčijte se v noci a chcípnete do rána,
krví se naplní celá vana,
ať vaše tělo v posteli hnije,
všichni lidi to, že jste mrtvý, budou mit u pyje.

L:
Tohle není ukolebavka. Buď trošku pozitivní.
Nechci ti brát tvůj styl, ale chci hezky usnout.

K:
Může být instrumentální?

L:
Ukolébavka?

M:
Už ležím, musela bych vstát,
jít pro kytaru, pak k PC to hrát.
Jsem totiž na mobilu, K?

L:
Ne, kdepak, nenamáhej si maso,
prosím jen napiš text, jasno?
Krafty, co to má znamenat?

K:
Si to pusť a nech to hrát.

G:
ﷲﷳ, (Alláhu akbar)
pudem na bar,
dáme si nealko,
protože chlast je harám tolko,
vychlastáme hl Coly,
dáme svým ledvinám složité úkoly,
že naše tělesné schránky,
co 5 let neviděly zlaté stránky,
do rána neusnou,
vyhoníme si nad Lízou Monou.
Přecpeme se brambůrkama a usmeme až ráno,
jíst tehdy je v tenhle měsíc harám, že ano?
Dobré ráno místo dobré noci,
závislým na kofeinu je těžko pomoci.
Kdo potřebuje spánek,
máme zrovna ramadánek,
vzpoměňe si někdy na Lláha,
pro bezvěrce tvrdší než podlaha.



TAKE 2

Listopad 2017, korektura v prosinci. Editoval Getman.

Featuring:
Mr. Lukáš (B).
John (G)etman AKA 637man AKA j-61m
(T)ereza
(D)enis
(J)an Jochajan AKA classroomtoilet
(P)etr
(M)iroslav
(Ra)adim
(Re)nata


B:
Mr. B. k vašim službám, koho mám zdissovat?
Zničit, ztrapnit, zadupat a poté zlisovat?
Komunita fajná, ale něco se sem blíží,
Druhé kolo Rap Battle směrem sem se plíží!
Sorry, trochu jsem si hrál.
Kdo jde dál?

G:
Já se ovšem taky připojím,
další odpad se sebe vyplodím.
1. diss bude na Blbiše,
co jak když mu MAFRA tiskne lže:
Ty vychcanče, zmanipuloval sis tisk,
aby nepasli, jak československý máš pysk,
a od mých asi pitomých souobčanů,
zfalšoval sis 30 % fakanů.
Sám s kompem neumíš a cpeš nám EET,
mě se hlava s té byrokracie plete!
Podnikat tu snad bude těžší než za socíku,
že tys komouš byl, StBácký bídníku?

B:
Soudruh Babiš, zvaný Oligarcha,
Přišel ze slovenska a hodně tlachá,
30 % hlasů, kde k nim přišel?
Asi podvod, co mu vyšel.
Prý měl pletky s StB.
Sorry jako ale jemu jebe?
Pár let v čele vlády ho teď budem mít,
má někdo páru, co se bude dít?

G:
Začal tu cenzurovat internet,
prejže kvůli hazardu hned,
ale jak vidno jinde, je to slippery slope,
octne se na indexu něco jiného a máme oči v sloup.

B:
Ok, lidi, slušně to tu fičí,
kdo další nám tu něco dalšího narafičí?

G:
Ano, dámy, kmáni, trans a nebinární gendery,
pojďte zdissovat třeba zkorumpované IT tendry!
Bém s tou Opencard byl ale pako,
zadat vendor lock může jen ten, komu se líbí Jabko.
Kurva Krnda to nechala promlčet,
takže ten pičus nepůjde za to ani bručet!
Přineste bulharský zákon o open-source pro stát,
ať už nás tyhle kauzy nemusí daněmi sát!

B:
Politici, Krnda, tenhle stát,
stejně nakonec to bude něco stát,
mysleli jsme že vše bude OK,
existuje politik co za své činy se poká?

G:
Asi ne, tady nejsme Západ,
situace tu volá o revoluční nápad.

B:
Proč ne, lidi maj dost,
tak nechť započne ten revoluční skvost!

T:
Lukáši, to je dobrý!

B:
Děkuji za uznání - úklona.
Ale Getman je taky dobrej.

T:
Wow, no jo, sakra dobrej.

G:
My jsme ty modrý,
když zmizela železná opona,
o maximální svobodu dál žebrej.
Takové věci by se měly,
objevovat na tom ATYPu,
aby NT pomnuli,
jak rýmy já s B. sypu.

B:
NT lidi, pocity mám smíšený jak twister,
kdo z nich nás jednou pochopí, bude u mě mistr.
Dneska modrá, sprostá barva, lidi vzhlížej k SPD.
Budu sedět v první lajně, zvědav, kdo co dovede.

G:
Migrace je dávno passé,
ISIS odpálil svou mešitu,
kdyby se na islám Okomůka nelepil jak prase,
moh by vést demokratizační revoltu.
Takhle jsem musel volit Piráty.
Snad ušetří na IT zakázkách státní dukáty.

B:
Piráti, mně neznámí, kde mají svůj poklad,
Ale jou hou hou, dámy, kmáni, jejich diss má odklad.

G:
Kdyby jenom nechtěli dát ANO pokus další.
Ale stejně to závisí na tom, kdo na hradě straší.
Když to bude po březnu stále
tehnle nemocný tuZeman,
nevím, jak to bude s Českem dále,
budoucnost zahaluje туман.

B:
Zeman prezidentem chce ještě chvilku být,
ale má na to sílu, zdraví, nebo bude muset jít?

G:
Bude muset jít, když ne teď,
tak během dalšího funkčního období.
A ty můj národe si nepleť
rakovinu s cukrovkou, rozdílné je obojí.
Proč se nepřidá nikdo další,
to z toho má být duo?
To bude jak na Šlágru pro starší,
sežeň nám lidi, producente - sluho!

B:
Žádny sluha, si mě pleteš, ale v jedom máš tu pravdu.
Přidejte se dámy páni, ať to nemá vadu.

G:
Producent-sluha je sám Jehova,
co sem nutí lidi přispívat doslova.
Teď si říkám, asi bych měl programovat ty matice,
šoupněte sem mezihru, než se přidá třeba nějaká samice.

B:
Kdo nepá páru co napsat (ano, jsou tu tací),
nechť tímhle videem načerpá inspiraci:

https://www.youtube.com/watch?v=xkMqWLGGlz0
(Snorlax vs Slaking. Epic Rap Battles of Pokémon #14.)

https://www.youtube.com/watch?v=pNUH75XMeQI
(Groudon vs Kyogre. Epic Rap Battles of Pokémon #17.)

* * * * *   M E Z I H R A   * * * * *

J:
Tschüss, jsem na propustce.

G:
Tak ihned sahni po elektronické propisce.
Zaplav tento idiopaticky idiotický komunikát
plný mentální kommoce autistického spektra,
ať je tu víc toho blablabla a něco máme z dat
toho našeho internetu a drahého elektra.

J:
Ja, mein Führer!

G:
Deutsch habe ich nicht gesprochen früher.

J:
Jinak jsem rád, že jsem na propustce,
aspoň nemusím poslouchati
jednoho debila, pro kterýho jsou, tupce,
autisti jen automati.

G:
Also, Mufti Merkel lasst hier Immigranten ein,
sodass wir Weißen würden nicht allein.
Aber diese Braune haben kein Respekt
von unsere Kultur, was ein Defekt!

J:
Mluv česky, německy umím jenom "Ja, mein Führer".

G:
Dlouho jsem nepsal německy,
a umíš ty maďarsky,
když jseš dílem ze severních Uher?

J:
Jenom trochu.

D:
Ja viem po německy,
ale len ako tak děcky.
Sa musím doučiť, hochu.

G:
Praha byla krásné německé město,
a ikdyž jsme vyhnali Němce, tak přesto
by se mělo v tradici pokračovat
a německy se doučovat,
už i kvůli obchodním stykům,
nebo v pornu německým dickům.
Jiné jazyky v tomto rapu navadí,
Google mi kdyžtak jejich význam poradí.
Ale dávejte pozor, musí se to rýmovat,
morbidně - to je rapování základ.

P:
Tak vidím, už i tahle skupina se zvrhla.

M:
Ahojte, je nás nějak moc, trdla.

L:
A to má být jako špatně snad?

M:
Nikoliv, je to lepší, mít tady víc lidí.
Ani nevím někdy, co mám psát.

Ra:
Píš, co ti mysl napadne, po čem se pídí,
neboj se na cokoliv zeptat.

T:
Tato je lepší, je nás tu méně, myslím vám,
Za mě dobrý, protože nejsem v práci a odpočívám.

Ra:
Autistická terapie - zde se rozebírají jiných problémy,
ale občas je povoleno trochu odbočit od hlavní témy.

Re:
Tak z odbočení může vzniknout pořádný malér.

Ra:
Neboj, kapitán zná hranice, kdo je provokatér.

Re:
Kdože je tím kapitánem?

Ra:
Hádej, můžeš 3x enem.

Re:
Snad ne můj roztomilý chlapec?

Ra:
Bingo, já přec.

Re:
Á sakra, další Titanic máme.

G:
A nyní si už dáme:

* * * * *   K - O - N - E - C   * * * * *



TAKE 3

G John Getman AKA Johannes Getmann AKA Juan Getemano
J Jou Dzea
D Dušan Kopítko AKA Krafty Moog
M MthueanMcscwa AKA Berlin Führer

Editoval Getman v noci na 12.09.2018 v Poznámkovém bloku.


J:
Počkej, ale dá se vytvořit svůj vlastní "internet"?
Za chvíli bude tenhleten mrtě zcenzurovanej. Takze do budoucna?

G:
Můžeš si vytvořit vlastní protokol.
Ale jestli ho bude používat dostatek lidí, je věc jiná.

J:
Protokol, do kol, sokol, monopol ...
Monopol napsal protokol do škol,
rozkopal sokoly co byli na mol.
Rozhod se trol, že na vsechno odpoví "lol".
Dokola mrtvola
rozdupaná od vola.

G:
Methanol ethanol propanol butanol pentanol hexanol ...

J:
Od láhví do Ládví
oslepnem a chcipnem na mor.
Tento tvor ma divny vzor,
chová se jako blbec.
Jdem do hor kopat brambor.
Hrabiše, toho nevol,
Jinak te oholí
a zůstanem o holi.
Až vznikne spor,
udělej vzdor
a dáme dohromady sbor,
kterej vymyslí nádor.
Postavíme vor a odplujem na jižní pól.
Píšu tu snad jenom samej blabol.

Lezou mně z břicha střeva
a me to vůbec neva,
jsem totiž zombie,
která tě poblije.
Až budeš poblitej,
budeš taky smrdutej,
nikdo nebude chtít bejt od tebe ojetej.
Jako auto nebo autobus nebo gumy,
co na tebe blbe čumí.

D:
Každej měsic si kupuji rajčatovy protlak.
V téhle periodě leskne se jak lak.
Jsem jak dalmatín, na zadku skrvna,
proud krve vyprksl jak vlna,
je to sračka jak z hovna psího,
nechce se mi vymyslet nic lepšího.

J:
Měl by ses zabít,
protože nemáš na byt.
Měl by ses zabít,
protože neumís kalit.
Měl bys umřít,
lepší, než se celej život dřít.
Měl bys chcípnout,
ňákej jed si píchnout.
Měl bys nás sebe zbavit.
Až umřeš, půjdem to oslavit.

D:
Měl bych natáhnout bačkory,
jsem debil, mám mozkové nádory.

J:
Neumím ani špetku pokory,
a ani nechci, vy blbci,
to radši chcípnu,
žádný rady od vás nechci.

D:
Budu se učit, budu poslanec,
pak na vás 1 velký flusanec.
Budu se učit, budu podnikatel,
budu vlivný, šukat za pakatel.

J:
Pak přijde Hrabiš a firmu ti sezobne klofem fofrem.
Marně budeš brečet, zpátky pojď sem,
bude z tebe bezdak,
nebudeš si ani čím vytřít kaďák.

D:
Vytřu si ho koblihou,
co ty na to, děvče, jou?

J:
Třeba, pokud bude třeba.
Budeš ho mít pěkně ulepenej od cukru,
ale nikdo ti ho neolíže, ba
možná ti tam poleze mravenčí crew.

D:
Nic mě nenapadá, jsem v řiti,
špatná planeta, jsem tu jak E.T.

J:
Dobrou.

M:
Proč koblihou?
Já myslím, že větev z okrasných prvků hlavního sálu Čapího Hnízda
bude symbolem, že tě zatím do prdele neposlala, ta jedna pizda.

J:
Důchodu se asi už nedožijem,
asi fakt chcípnu zimou nebo hladem.

G:
Jsem tu s tím protokolem jaksi nastartoval
nějaký freestyle rap take 3, koukám.
Je trošku kratší, ale zase abych se moc nenaeditoval.
Pak to sem v texťáku nasoukám.

 * * *   K O N E C   * * *

2019-12-06

Oko bere (Czech Twenty-One/Blackjack Variant) in R

# Oko bere (The Eye Takes It) belongs to a family of Twenty-One-like games, where you draw cards assigned different values from a randomized deck with the objective to come as close as possible to but not exceed a certain number of points, typically 21. There also exist special hands. The most popular variant is Blackjack. This implementation plays mostly like Blackjack, but you can't split as I didn't implement multiplayer, the card deck is German (called Mariášové karty in Czechia, Mariáš is a game similar to Hearts in Windows), the royal cards are worth 1,2,3,11 points, and the special hand is Velke oko (Great Eye) of 2 Aces (normally over).

promptInt = function(promptString, defaultValue){
  # this is do-while
  repeat{
    userInputRaw = readline(promptString)
    if(userInputRaw == ""){
      return(defaultValue)
    }
    userInput = as.integer(userInputRaw)
    if(!is.na(userInput)){
      break
    }
    cat(userInputRaw, "couldn't be read as an integer!")
  }
  return(userInput)
}

ranksMarias = c("VII", "VIII", "IX", "X", "Knave", "Vamp", "King", "Ace")
suitsMarias = c("Acorns", "Bells", "Hearts", "Leaves")
cardsMarias = length(ranksMarias)*length(suitsMarias) # 32
ranksPoker = c("A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K")
suitsPoker = c("Clubs", "Diamonds", "Hearts", "Spades")
cardsPoker = length(ranksPoker)*length(suitsPoker) # 52

newDeck = function(){
  set.seed(as.integer(Sys.time()))
  cardlist = sample(0:(cardsMarias-1), 32, replace = FALSE)
  deck = NULL
  i = 0
  while(i <= cardsMarias){
    deck[[i+1]] = c(ranksMarias[cardlist[i+1]%%length(ranksMarias)+1], suitsMarias[cardlist[i+1]%/%length(ranksMarias)+1])
    i = i + 1
  }
  #print(deck)
  return(deck)
}

# Oko bere hybridized with Black Jack
cardValues = c(7,8,9,10,1,2,3,11)
money = 100
housemoney = 100
deck = NULL
repeat{ # game
  cat("You have", money, "coins, computer has", housemoney, "coins.\n")
  bet = promptInt("Place your bet, default 10, 0 to quit: ", 10)
  if(bet == 0){
    break
  }
  deck = newDeck()
  scorePlayer = 0
  scoreComputer = 0
  playerStands = FALSE
  computerStands = FALSE
  playerAces = 0 # Velke Oko
  computerAces = 0
  surrendered = FALSE
  doubled = FALSE

  repeat{ # turn
    # Player
    if(!playerStands){
      curcard = head(deck, 1)
      if(is.na(curcard[[1]][1])){ # that can also happen
        cat("The deck has run out!")
        break
      }
      deck = tail(deck, length(deck)-1)
      if(curcard[[1]][1] == "Ace"){ # Velke Oko
        playerAces = playerAces + 1
      }
      scorePlayer = scorePlayer + cardValues[match(curcard[[1]][1], ranksMarias)]
      cat("You drew", curcard[[1]][1], "of", curcard[[1]][2], "so your score is now", scorePlayer, "points.\n")
      if(scorePlayer == 22 && playerAces == 2){
        cat("You got Velke Oko!")
      }
    }
    if(doubled){
      playerStands = TRUE
    }

    # Computer - plays like dealer in Black Jack
    if(!computerStands && scoreComputer < 17){ # be more careful
      curcard = head(deck, 1)
      if(is.na(curcard[[1]][1])){
        cat("The deck has run out!")
        break
      }
      deck = tail(deck, length(deck)-1)
      if(curcard[[1]][1] == "Ace"){ # Velke Oko
        computerAces = computerAces + 1
      }
      scoreComputer = scoreComputer + cardValues[match(curcard[[1]][1], ranksMarias)]
      cat("Computer drew", curcard[[1]][1], "of", curcard[[1]][2], "so its score is now", scoreComputer, "points.\n")
      if(scoreComputer == 22 && computerAces == 2){
        cat("Computer got Velke Oko!")
      }
    }else{
      computerStands = TRUE
    }

    if(!playerStands){ # cannot implement split, refactoring needed
      wantnext = readline("(H)it, (s)tand, (d)ouble, or s(u)rrender? ")
      if (wantnext == "s" || wantnext == "S"){
        playerStands = TRUE
      }
      if (wantnext == "d" || wantnext == "D"){
        bet = bet * 2
        doubled = TRUE
        cat("You doubled the bet to", bet, "coins, promising to take 1 last hit.\n")
      }
      if (wantnext == "u" || wantnext == "u"){
        surrendered = TRUE
        break
      }
    }
    if(computerStands && playerStands){
      break
    }
  }

  # evaluation (exceedingly crappy code)
  if(surrendered){
    cat("You have surrendered, losing half the bet, which is", bet/2, "coins.\n")
    money = money - bet/2
    housemoney = housemoney + bet/2
  }else{ # Velke Oko - 2 Aces
    if(scorePlayer == 22 && playerAces == 2){
      if(scoreComputer == 22 && computerAces == 2){
        cat("Tie, you both have Velke Oko.")
      }
      cat("You won over computer with Velke Oko.\n")
      money = money + bet
      housemoney = housemoney - bet
    }else if(scoreComputer == 22 && computerAces == 2){
      cat("Computer won over you with Velke Oko.\n")
      money = money - bet
      housemoney = housemoney + bet
    }else{ # Other cases
      if(scorePlayer > 21){ # if both are over, player still loses
        cat("You are over, you lose anyway.\n")
        money = money - bet
        housemoney = housemoney + bet
      }else if(scoreComputer > 21){
        cat("Computer is over, it loses.\n")
        money = money + bet
        housemoney = housemoney - bet
      }else if(scorePlayer > scoreComputer){
        cat("You won over computer.\n")
        money = money + bet
        housemoney = housemoney - bet
      }else if(scorePlayer < scoreComputer){
        cat("Computer won over you.\n")
        money = money - bet
        housemoney = housemoney + bet
      }else{
        cat("Tie, no one loses or gains anything.\n")
      }
    }
  }

  if(money < 0){
    cat("You've gone bankrupt.")
    break
  }
  if(housemoney < 0){
    cat("Computer has gone bankrupt.")
    break
  }
}

# I also wrote a lottery game in Python some years ago. These beginner programs are way better than all those lootboxes in AAA games.

2019-11-18

AMD's "recommended" GPU chart

This article is somewhat of a sequel to "Intel's Retarded Chart".

It always challenges my inner low-spec (nV GF2 MX 200 & Intel GMA 3150) childhood gamer and demoscener when someone says I need their exact expensive thing to do something, or do something well. My brain refuses to believe these claims, after all I've heard some of the best songs composed on 4 channels of Amiga's Paula, and seen IBM PC 5150's previously undiscovered capabilities in 8088 MPH.


So what do we have here? Apparently we need at least RX 5500 to do some "good" 4K or ultrawide gaming. What do you call "good 4K gaming"? I myself consider "good" to be 30+ FPS at a very wild mix of settings, because I hate anti-aliasing, motion blur and chromatic aberration, so I put the postprocessing settings on medium at most.

And what if I told you I play PUBG Lite on mostly Ultra on my aging nV GTX 660 on triple 1200p monitors (6144x1200) in Surround and aside from typical lags, it gives off over 60 FPS? Recently my confused driver made it possible to do 12Kx2400, albeit at like 2 FPS with a borderless mode bypass, because the game arbitrarily decided to support only 720p to 4K. Not even 800x600 or 960x540, even if it's said to be for low-end devices. And the FOV is restricted to 103° or 0,57222*pi radians, while I've set the monitors for 135° or 3*pi/4 radians.

Minecraft too isn't looking too shabby, mainly because I can devote up to 24 GB of 4channel RAM to the JVM. Back when I got this GPU, I was amazed that it could run modded 1.4.7 at single 1920x1200 at over 80 FPS. Which indicates how crap the previous NVS 290 and ION really were. They could play 1.2.5 at over 30 FPS but after singleplayer removal the framerate tanked into single digits and didn't ever recover with subsequent bloat in later versions. And then there was the GMA 3150 in my Atom netbook. I remember modded 1.2.5 at lowest settings being somewhat acceptable, but lately on Windows anything newer than 1.7.3 crashes because of bad OpenGL support (1.4), and on Linux with the Mesa driver it works, but looks like a slideshow. And it's commonly believed Minecraft is a CPU-intensive game, because of Java. Why do they keep adding new features and changing existing ones when nobody asked for it (no cave update yet) instead of optimizing the game, so that it can run as good as 1.2.5?

Another eternal classic game is Quake 3 and its FLOSS clone OpenArena. If you find a well-designed map, it looks almost as good as PUBG Lite and yet runs well even on GMA, at least the original Q3. Don't know what they did to ioquake3 over those 20 years that some OA maps are somewhat laggy. For those on the more indie side, Cube or Sauerbraten is/has a great low profile engine. No one really should care about UE4 or Unity, when you have that, and also ZDoom and Build.

According to a very inaccurate SEO-spam site Userbenchmark, the GTX 660 is about the same effective speed as RX 460, only about 6x slower than RTX 2080 Ti and 4x slower than RX 5700 XT, while being 30x faster than ION and 38x faster than NVS 295, the graphics chips I upgraded from. Yet it's only 37% faster than Vega 11, so no groundbreaking progress has happened in dGPUs since 2013 and nV just keeps charging obscene amounts of money. I'm still waiting for about 30x effectively faster card at a similar price point of about $300. That means where I get 20 FPS, I can get 600 FPS assuming no CPU nor bus bottlenecks. So I can put it in the next PC where I upgrade everything else. And by no way I'll buy a new GPU every other year, that's just bullshit, I don't print nor steal money. For futureproofing only Vega VII makes sense because of huge and fast VRAM for a giant framebuffer, while not being obscenely expensive like Quadros or Titans.

Since recently I have started to hate AAA games. They are so large, all my HDDs are full. How can anyone just release an apparently uncompressed ~100 GB thing and expect people to download it when there are still people with data caps? Where are the 4K Blu-Rays? And then it needs to install, that's another 100 GB needed. And then there come updates, bloating the size even more. Thank the warez guys for repacks.

The chart says that with about a 550 to 560 card (where 460 sits), I can't do good Full HD AAA gaming. Wrong, Kingdom Come has 30 FPS at medium-ish settings at 1920x1200. But I've become too spoiled with 60 FPS so I played it on 1152x864 or something like that.

To be fair this chart isn't as inaccurate as Intel's for their CPUs, where you can OC an old Core 2 Quad and it works just fine for the most part. The biggest issue in this AMD one is the "ultrawide gaming". I can add some 720p or 480p resolutions to my Surround and hell does it go fast. I can't test VR. 4K is like unoptimized 5760x1200, which I've sorted out. It's subjective what you call "smooth" gaming, and it depends on the particular game. Swift shooters need 120+ FPS (and no smeary LCDs), while turn-based games don't need even 20 FPS, and even then it's about how responsive the UI gets. I don't care about game streaming, the input lag will be just crap, how can anyone be so hyped about this? There's SSH already.


"Ultimate [resolution] Gaming" - 2020 update

At CES 2020, AMD presented that RX 5500 is for 1080p gaming, 5600 for "Ultimate" 1080p gaming, and 5700 for 1440p gaming. Where's my triple 1920x1200 surround gaming on almost a decade old GPU from the (only) competition? In another article I have analyzed how big framebuffer is needed for some ridiculous resolutions at that time. If I do that again, I get that at 8 GB you can have triple-buffered 32K, that's 30720x17280, at 2,12 GB per buffer (6,36 GB altogether), assuming 4 bits per pixel (RGB10A2 or RGBA8), with extra 1,5 GB left for textures and what not. My setup would consume 20,7 MB even when triple buffered, which barely makes a dent in my 2 GB of VRAM.

Moreover, the resolution-ness of a GPU decreases over time. The "1440p" RX 5700 may become a "720p" card in 2025. The Intel "HD" Graphics was good for 720p30 maybe at the times of PS3 and XB360 games, but today it's more like Intel 360p Graphics, and putting a U before HD doesn't increase performance. Same can be said for my GTX 660. In the summer of 2014 I could play at 1920x1200 at all maximum settings safe for some blurring/smoothing crap, and in the spring of 2020 I have to occasionally lower resolution to some tweakmode of my own devising, like 960x600 or 1152x720, and it doesn't even bother me as I have 2 dioptries and the AAA games requiring such compromises don't fit on my HDDs anyway.

2019-11-02

Goniometric Synthesizer

Instead of working with knobs or searching for a sample, you could just enter the formula, offset, and speed, and make music more mathematical way. It's possible and mathematically proven to make any periodic sound using Fourier series, which is essentially infinite stacking of sines and cosines. Both our ears and equipment are finite, so we don't even need to stack infinitely. On my way to code a natively microtonal DAW, I ought to start with smaller bits and pieces. Coding it all at once is impossible for me.

The following QBASIC program was used to generate the initial waveform for SuperTan samplepack. This pack mostly contains this waveform variously layered and detuned, and then exported using OpenMPT.

---------------------------------------------------------------------------------

PRINT "Gsys Goniometric Sampler vO.2 - May 2015"
INPUT "XScale:"; c
INPUT "Sampledepth:"; d
INPUT "Color"; e
INPUT "InvYScale"; f
SCREEN 12
OPEN "gosawave" FOR OUTPUT AS #1 LEN = 640

FOR b = 0 TO 639
    a = TAN(b / d)
    LINE (b * c, a * (-240 / f) + 240)-((b + 1) * c, TAN((b + 1) / d) * (-240 / f) + 240), e
    g = INT(a * 256 / f + 128)

    IF g > 255 THEN
        g = 255
    ELSEIF g < 0 THEN
        g = 0
    END IF

    PRINT #1, CHR$(g);
    OUT 544, g
NEXT b
SLEEP

---------------------------------------------------------------------------------

Another program was written 4 years later when I heard how prospective R is. I knew it resembled Python and C enough that for starters I could resurrect my knowledge from the freshman courses 2 years before, and then explore optimization and the more R-like ways. Notwithstanding the Python popularity has gone through the roof at the expense of R since then. Normies learn and forget quick, we Aspies don't do that. This gives me confidence that some 40 years later I'll do what I now revere as magic and probably get paid bitcoins (fiat currencies suck in the long term). The program outputs the waveform in a series of double precision little-endian numbers without any header. You then import it in Audacity, cut as needed, and export to a format your DAW understands. No sample pack from this yet, but I have a name already: Fat Authentic Goniometric Synths.

---------------------------------------------------------------------------------

library(parallel)

cl = makeCluster(detectCores())

fourier = function(x, N = 100000, P = 2*pi, a0 = 0){
  # an, bn - cosine and sine coeficients, set inside loop, dependent on iteration variable
  ret = a0/2
  n = 1 # iteration start
  while(n <= N){
    if(n %% 2 == 0) {
      n = n+1
      next
    }
    an = 1/(pi*n)
    bn = 4/(pi*n)
    ret = ret + (an*cos(2*pi*n*x/P) + bn*sin(2*pi*n*x/P))
    n = n + 1
  }

  # somehow actually slower
  #ret = sum(a0/2, unlist(lapply(1:N, function(n){
  #  an = (-1)^(n)/(pi*n)
  #  bn = 2*n*(-1)^(n+0)/(pi*n)
  #  ret = (an*cos(2*pi*n*x/P) + bn*sin(2*pi*n*x/P))
  #  return(ret)
  #})))

  # apparently ret can be NA even if it was assigned a value few lines above
  if(!is.na(ret) && (ret > 1000 || ret < -1000)) {
    return (0)
  }
  #print(ret)
  return(ret)

}

x = seq(0, 4*pi, by = pi/96)
#x = NULL
#i = 0
#while(i < 4*pi){
#  x = c(x, i)
#  i = i + pi/24
#}

# this is very noob tier
clamp = function(x, bottom, top){
  if (!is.na(x) && x > top){
    return(top)
  }
  if (!is.na(x) && x < bottom){
    return(bottom)
  }
  return(x)
}

beginning = Sys.time()
output = parallel::parLapply(cl, x, fourier)
theend = Sys.time()
stopCluster(cl)
# stops working due to trying to set y scale to have infinite range, how stupid
plot(x, output, "l", main = "Function", sub = "a wonderful one", xlab = "argument", ylab = "value", asp = 0.5, xlim = c(0, 13))
print(output)
ofile = file("fourier.raw", "wb")
i = 1
while(i <= length(output)){
  writeBin(output[[i]][1], ofile)
  i = i+1
}
close(ofile)
print(theend - beginning)


#plot(0,0)
#i = 1
#while(i <= length(x)){
#  points(x[i]/10, fourier(x[i])/10, col = "black") # doesn't appear to do anything
#  i = i + 1
#}

# determine where to put a dot for each pair of argument and output
#scalex = 1/pi
#scaley = 1/10
#centerx = cols%/%2
#centery = rows%/%2
#i = 1
#results = NULL
#while(i < length(x)){
#  results = c(results, fourier(x))
#  idx1 = centerx + scalex*i
#  idx2 = centery + scaley*results[i]
#  if(!is.na(idx1) && !(is.na(idx2)) && idx1 > 0 && idx1 <= rows && idx2 > 0 && idx2 <= cols){
#    fb[idx1, idx2] = "@"
#  }
#}

---------------------------------------------------------------------------------

Now I should seek and learn some good audio library to have some way to output the sounds I'm generating. Old UNIX style piping to /dev/dsp doesn't work on all systems. It would be a good idea to support multiple sound APIs because one does not simply know whether this dependency will be available.