The Intellectual Wilderness There is nothing more useless than doing efficiently that which should not be done at all.

2021.06.11 10:42

Building Erlang 23.3.4.3 on Devuan/Debian/Ubuntu

Filed under: Computing,Science & Tech — Tags: , , , , , , , , — zxq9 @ 10:42

Erlang R24 is out! …but there are, as usual with a version X.0 release, a few rough edges (enough of them around the important-but-annoying WX and OpenGL updates that I’ll be writing another post about that shortly…).

In the meantime, R23.3.4.3 is excellent and quite reliable. The steps for building with kerl are nearly identical as for R22, but it is worth re-posting them with the relevant version updates (or if you like the video version, Dr. Kumar made a few demonstrating his home Erlang + ZX build). Also, if you’re in a part of the world where erlang.org’s docs are occasionally really really sloooooooowwww don’t forget the R23 docs mirror (or my Erlang page with linky links to everything).

sudo apt update
sudo apt upgrade
sudo apt install \
    gcc curl g++ dpkg-dev build-essential automake autoconf \
    libncurses5-dev libssl-dev flex xsltproc libwxgtk3.0-dev \
    wget vim git
mkdir vcs bin
cd vcs
git clone https://github.com/kerl/kerl.git
cd ..
ln -s ~/vcs/kerl/kerl bin/kerl
kerl update releases
kerl build 23.3.4.3 23.3.4.3
kerl install 23.3.4.3 ~/.erts/23.3.4.3
echo '. "$HOME"/.erts/23.3.4.3/activate' >> .bashrc
. ~/.erts/23.3.4.3/activate
wget -q https://zxq9.com/projects/zomp/get_zx && bash get_zx

As usual, the ~/vcs/ directory is just my convention for version-controlled code that my $HOME sync scripts know to ignore, and you might want to install Erlang to some place global on your system like /opt/erts/ or whatever. The steps above work without root privileges with the exception of the apt commands. Remember if you are on Devuan or Debian that you need to perform the sudo commands actually as root unless you configure sudo on your system, then the rest as your normal local user account.

2021.06.4 09:26

確率事象

いくつかの無駄な考え:

  1. 天地万物はプランク限界でピクセル化されています。
  2. エベレットとボーアの解釈はどちらも正しい: 宇宙は遅延評価され、未来は「記憶」するには費用がかかりすぎる.
  3. 相対論的効果は、イベントの評価に必要な伝播遅延と削減バジェットのために発生する創発現象です。
  4. 確率は文脈から外れて滑らかに見えますが、ピクセル化とイベント順序の依存関係により、無限に小さな確率のイベントが実際に発生することが制限されます。
  5. 実数は偽物であり、有理数は実数です。 すべての数値には有限の解像度があります。
  6. 上記の点のために、残念ながらかなり多くの数学が間違っています (たとえば、真のタンジェントは、単一の値ではなく、そのスコープによって制限される範囲です)。 しかし、偽の数学は、その大部分が真っ赤な嘘であると認めれば、工学を完成させるのに十分に妥当な近似値です。
  7. 人は、自分の幻覚に夢中になりすぎて、上記のことを注意深く考えることができません。

2021.06.2 14:39

Random: The Erlang runtime (aka BEAM) when fed bad data

Filed under: Computing — Tags: , , , , — zxq9 @ 14:39

Random: How the Web was Designed

Filed under: Computing — Tags: , , , , , — zxq9 @ 14:37

2021.05.4 17:56

Tsuriai: Now engaging in smart contract work

I never thought I’d see the day, but Tsuriai (the tiny Japanese software company I work for) is now in the Ethereum smart contract market as a developer — which means I am now in that same market.

Need a smart contract or blockchain/IPFS-based project developers/consultants/educators*?
Just shoot the office an email at info@tsuriai.jp and they’ll hook you up.
They can even accept payment in ETH now, which makes it a lot easier to contract from overseas.

What a world!

[*Or, as always, Erlang developers or consultants, distributed systems analysis, and pretty much any other BEAM-related services, education or assistance!]

It is pretty well known that I don’t think smart contracts are going to save the world from itself because the problems in the US, Europe and China have everything to do with violations of social trust by government and lack of faith in people among the people themselves (as well as lack of faith in culture and tradition), but… smart contracts actually are kind of fun to write and our workflow is pretty darn fast.

There are clear use cases that fit the Ethereum-style computing paradigm and even some that clearly benefit from deployment on something like IPFS rather than a traditional server back end, and we can talk the client through the pros and cons. I suppose the most common thing to want to implement is NFTs at the moment, and some forms of NFTs (especially distributed name registry systems <hint!> <hint!>) are clearly extremely valuable solutions to otherwise difficult to administer problems.

2021.04.30 09:10

Valgrind “Hello, World!”: Python 3.6 VS Python 2.7 VS Erlang R23

I’ll just leave this here…

Python 3.6

ceverett@icecream:~/Code/python$ cat hello.py
#! /usr/bin/python3

print("Hello, world!")
ceverett@icecream:~/Code/python$ ./hello.py
Hello, world!
ceverett@icecream:~/Code/python$ valgrind ./hello.py
...
==19264== HEAP SUMMARY:
==19264==     in use at exit: 320,946 bytes in 166 blocks
==19264==   total heap usage: 1,698 allocs, 1,532 frees, 2,505,946 bytes allocated
==19264== 
==19264== LEAK SUMMARY:
==19264==    definitely lost: 0 bytes in 0 blocks
==19264==    indirectly lost: 0 bytes in 0 blocks
==19264==      possibly lost: 5,608 bytes in 10 blocks
==19264==    still reachable: 315,338 bytes in 156 blocks
==19264==         suppressed: 0 bytes in 0 blocks
...
==19264== ERROR SUMMARY: 8163 errors from 116 contexts (suppressed: 0 from 0)
ceverett@icecream:~/Code/python$

Python 2.7

ceverett@icecream:~/Code/python$ cat hello2.py 
#! /usr/bin/python

print "Hello, world!"
ceverett@icecream:~/Code/python$ ./hello2.py
Hello, world!
ceverett@icecream:~/Code/python$ valgrind ./hello2.py
...
==19416== HEAP SUMMARY:
==19416==     in use at exit: 417,246 bytes in 199 blocks
==19416==   total heap usage: 2,958 allocs, 2,759 frees, 3,085,205 bytes allocated
==19416== 
==19416== LEAK SUMMARY:
==19416==    definitely lost: 0 bytes in 0 blocks
==19416==    indirectly lost: 0 bytes in 0 blocks
==19416==      possibly lost: 528 bytes in 1 blocks
==19416==    still reachable: 416,718 bytes in 198 blocks
==19416==         suppressed: 0 bytes in 0 blocks
...
==19416== ERROR SUMMARY: 489 errors from 30 contexts (suppressed: 0 from 0)
ceverett@icecream:~/Code/python$

Erlang R23

(On this one I can include the entire output.)

ceverett@icecream:~/Code/erlang$ cat hello_world 
#! /usr/bin/env escript

% Example of an escript
-mode(compile).

main(_) ->
    ok = io:setopts([{encoding, unicode}]),
    io:format("Hello, world!~n").
ceverett@icecream:~/Code/erlang$ ./hello_world 
Hello, world!
ceverett@icecream:~/Code/erlang$ valgrind ./hello_world
==25872== Memcheck, a memory error detector
==25872== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==25872== Using Valgrind-3.13.0 and LibVEX; rerun with -h for copyright info
==25872== Command: ./hello_world
==25872== 
Hello, world!
ceverett@icecream:~/Code/erlang$

Hey, Python! What the actual fsck is going on here?!? Jeebus… The Good Idea Fairy came along and convinced the webtarded among you to start throwing kitchen sink features in (“walrus operator” — yeah, great idea, that, and totally worth losing the sober guidance of Guido over…) along with 8163 memory errors. Sweet! Oh how far the great have fallen…

Honorable mention: Ruby 2.5

I didn’t expect much better from Ruby as the Good Idea Fairy has been forwarding all xer mail there for years, but wow… just wow

ceverett@icecream:~/Code/ruby$ cat hello_world.rb 
#! /usr/bin/ruby

print "Hello, World!\n"
ceverett@icecream:~/Code/ruby$ ./hello_world.rb 
Hello, World!
ceverett@icecream:~/Code/ruby$ valgrind ./hello_world.rb
...
==27051== HEAP SUMMARY:
==27051==     in use at exit: 2,921,234 bytes in 20,690 blocks
==27051==   total heap usage: 65,312 allocs, 44,622 frees, 16,447,358 bytes allocated
==27051== 
==27051== LEAK SUMMARY:
==27051==    definitely lost: 385,479 bytes in 4,421 blocks
==27051==    indirectly lost: 640,953 bytes in 5,808 blocks
==27051==      possibly lost: 1,626,429 bytes in 9,663 blocks
==27051==    still reachable: 268,373 bytes in 798 blocks
==27051==         suppressed: 0 bytes in 0 blocks
...
==27051== ERROR SUMMARY: 162050 errors from 402 contexts (suppressed: 0 from 0)
ceverett@icecream:~/Code/ruby$

162,050 memory errors. For Hello, World. How can there even be 162,050 instructions in the resulting set of commands to the system?

2021.04.5 20:25

Erlang: Socket experiments preliminary to writing a web server from scratch

Filed under: Computing,Science & Tech — Tags: , , , , , , , — zxq9 @ 20:25

A relative newcomer to networking in Erlang, Dr. Ajay Kumar, has started a self-educational project to create a web server from scratch in Erlang to give himself some first-hand insight into how TCP sockets work in Erlang and how web servers work in general. Web servers are a thing almost everyone has written against or for, but few have tried to implement on their own because socket programming sounds scary and time consuming to learn.

This video is quite short but incidentally demonstrates how not scary socket programming is and how easy it is to experiment with networking concepts on your own. Go experiment! Write networky things! It’s fun!

As an aside to this… I have a two-part explanation video that explains everything that is going on inside the service at he is basing his web server on. In the first part I explain what is going on within the default chat server that ZX templates as a network service project (kind of slow, covers basics for Erlang and ZX newcomers), and in the second part I explain how I used that as a basis for creating a telnet chat service that implements global shouts, channels, permissions, and other basic features needed for a real chat service (a bit better paced if you already know your way around Erlang and discusses some higher-level concepts such as service structure and the “service -> worker pattern“).

2021.03.11 16:31

Social Trust: Why crypto, blockchain and smart contracts will not change the world

Lately I have been involved in a number of discussions about distributed systems, delegated authority structures, cryptocurrency and smart contracts. The hope of many is that cryptocurrency will avert inflationary trouble entirely and help the public hold government in check. There is also hope that smart contracts will magically turn Africa into a paragon of high trust economics and a trade powerhouse of its own accord.

I decided to record my thoughts on this here:

The TL;DW of it is that while these are really great things to hope for, and not impossible goals, the idea that crypto technologies are going to manifest profound levels of social change on their own is misguided. The social and political problems much of the world is facing today are due to an erosion of trust and flagrant, repeated violation of trust and faith from every actor at every angle. In short, the West is moving from a high-trust social model to a low-trust social model and Africa is and has ever been suffering from low-trust social models. Crypto isn’t how that is solved.

Erlang: Video tutorial HOWTO on installing Erlang and ZX from scratch on Ubuntu Linux

Filed under: Computing — Tags: , , , , , , — zxq9 @ 13:24

I’m flattered to find that Dr. Kumar made a tutorial video of how to install Erlang and ZX on a fresh Ubuntu system and check that it is working by playing Erltris. It is sort of a video version of previous instructionals and the ZX quickstart docs all in one place.

Big thanks to Dr. Kumar!

2020.12.26 16:19

Erlang: Writing a Tetris clone Part 3 – Gameplay rules, final features and deployment

Filed under: Computing,Games — Tags: , , , , , — zxq9 @ 16:19

The third video in this series moves on with implementation of gameplay rules, scoring, the “next” preview window and packaging and deploying the game using ZX as a shortcut.

Writing this is a lot of fun. As of this video the game part is finished, but there are a few things such as high score recording and maybe some network features that have not been implemented. I might make a fourth video that covers these but it might be more interesting to move on with another example to demonstrate techniques to accomplish similar tasks.

Quite a few details that were noticed and mentioned in the first two videos have been updated in the course of completing the code for this video, so it may be interesting to check the commit history if you’ve been following along.

As always, have fun making stuff!

Older Posts »

Powered by WordPress