Some thoughts of Haskell newbie going from Scala

I don’t earn by writing Scala, but I did quite a fair of Scala when working on my Minecraft mod and my master’s thesis. I am very interested in functional approaches, so for a long time I wanted to learn Haskell. I bought a book “Learn You a Haskell for Great Good” and started reading and testing examples. In this short article I point out some things I found to be odd or not that good as in other languages I encountered. Don’t read this as a bashing of Haskell, I love the language (the type inference is so strong), but no language (not even my favourite Scala) is without faults and imperfections.

Read More

Scala serialization pickle

Let us begin our story with some structure.

1
2
3
case class Pupper(name: String)

case class Doggies(oldPuppers: Seq[Pupper])

Next we obtain some data.

1
val input = Doggies(Seq(Pupper("Adolf"), Pupper("Ben")))

And now we want to serialize them. I firmly believed that Scala’s case classes and collections are serializable. So I tried “classic” serialization:

Read More

Quicksorting with Java, Scala and Groovy

I found this older post comparing performance of Java, Scala and Groovy on the Quicksort algorithm. I have cleaned all source files a bit, so they all have similar/same variable and method names. I also added “best of ten” functionality to get past VM warming up and other irregularities. In original post I was quite sceptical about the time it took to process, it was way too quick - 45ms and 56ms. I know it was probably because of Groovy, but it in my opinion ruined comparison of Java and Scala, because of such short time intervals combined with no VM heating up.

Read More

JavaScript na root.cz - mám ho povolit?

V předchozím článku jsem se věnoval datové a časové náročnosti JavaScriptu, fontů a reklam na root.cz. V diskuzním vláknu padlo tvrzení, proč zapínat JavaScript, když to akorát zpomaluje. Problém tohoto argumentu je, myslím si, celkem zřejmý: „Proč povolovat obrázky, když to vše jen zpomalují.“ Ano, máte možnost zakázat si obrázky, ale proč to dělat, když přijdete o nemalou část požitku z prohlížení stránky? Navíc JavaScript roota je povětšinou použit k dotažení věcí, které nejdou řešit pomocí CSS (např. lazy loading obrázků nebo přilepení “asociální lišty” až v určitém bodě posunu po stránce).

V diskuzi jsem uvedl, že mám silné podezření, že za zpomalení nemůže JavaScript samotné stránky, nazvěme jej užitečný JavaScript, ale reklamní, pojmenujme si jej balastní JavaScript, který uživateli navíc nic přímo nepřináší.

Níže jsou výsledky mého měření (každá hodnota je průměr ze tří měření). Začneme zlehka údaji o prvním načtení, které pro normální uživatele, kteří si z rozmaru nečistí cache každých pár hodin/minut, v podstatě nic neznamenají. Běžně si totiž prohlížeč stažený kód v JavaScriptu pamatuje, dokud nevyprší časové razítko od serveru, nebo dokud mu server neřekne, že má novější verzi. Ku příkladu velký bratr Google má nastaveno toto časové razítko na jeden rok.

Read More

Root.cz - ošklivý JavaScript a fonty mi ruinují FUP!

Pokud čtete tento článek, tak jste pravděpodobně na root.cz zahlédli vlákno Nový Root již dnes?. Je plné kritiky nového vzhledu, objevují se tam i hlášení technických chyb.

Osobně mi přijde velmi hloupé po někom vyžadovat, aby mi opravoval stránky pro 4 roky nevyvíjený prohlížec Opera 12, prohlížeč s podílem na trhu pouhých 0,29%. Ano, dostal pouze několik bezpečnostních záplat, ale žádné nové vlastnosti nebo větší zásahy se nedělaly po dlouhé roky. Z CSS neumí vůbec např. user-select: none, calc, 3D transformace a JavaScript nezvládá ani ve verzi ECMAScript 5, přestože ostatní prohlížeče dokončují podporu ECMAScript 6 (Edge 79%, Firefox 85%, Chrome 91%).

Read More

Hexo is here!

Allow me to introduce you. Hexo is a static website generator aiming at blogs. And, I must say, Hexo handles it quite well. I wasn’t sure if static blog is good enough (I was using WordPress for ages), but so far it would seem it’s fairly capable. You can even have dynamic features like comments and search, all handled via magic of JavaScript.

Read More