Sections

2019-01-21

Programovací jazyky Č/Č++ a ZVUKSI

Mnoho čecháčků má s programováním problém v tom, že syntax je anglicky. Proto jsem se rozhodl přeložit BASIC a C do češtiny. Pro Slováky by byl vhodný ČOBOL, ale na mém slovenštinu bude poznat, že to dělal Čech, takže to přenechám Slovákům samotným.



ZVUKSI

Začátečníkův VšeÚčelový Kód Symbolických Instrukcí

V BASICu jsem neprogramoval ani nepamatuju, a taky se mi nechce obcházet určité elegantnosti v návrhu Pythonu, takže ZVUKSI je víc pseudokód než Č. Podle úrovně symbolického myšlení je možné místo BUDIZ, ROVNO, NEROVNO, JE, NENI, VETSI, MENSI, NEVETSI, NEMENSI apod. používat odpovídající znaménka, ale to by COBOLovitost ZVUKSI tolik nevynikla. Taky by se měl ZVUKSI dát psát na české klávesnici, kde některá znaménka cílová skupina nemusí najít, nebo AltGr nefunguje.

Vyhrazený slovníček podle QBASIC 1.1 a VB.NET (todo):

DO...LOOP, END, EXIT, FOR...NEXT,
IF...THEN...ELSE, GOSUB...RETURN,
GOTO, ON...GOSUB, ON...GOTO,
SELECT CASE, STOP, SYSTEM
 
CONST, DATA, DIM, ERASE, OPTION BASE,
READ, REDIM, REM, RESTORE, SWAP,
TYPE...END TYPE
 
CALL, DECLARE, EXIT, FUNCTION, RUN,
SHELL, SHARED, STATIC, SUB
 
CLS, CSRLIN, INKEY$, INP, INPUT,
KEY (Assignment), LINE INPUT, LOCATE,
LPOS, LPRINT, LPRINT USING, OPEN COM,
OUT, POS, PRINT, PRINT USING, SPC,
SCREEN Function, TAB, VIEW PRINT,
WAIT, WIDTH
 
CIRCLE, COLOR, GET (Graphics), LINE,
PAINT, PALETTE, PCOPY, PMAP, POINT,
PRESET, PSET, PUT (Graphics),
SCREEN Statement, VIEW, WINDOW
 
CHDIR, KILL, MKDIR, NAME, RMDIR
 
CLOSE, EOF, FILEATTR, FREEFILE
GET (File I/O), INPUT, INPUT$,
LINE INPUT, LOC, LOCK, LOF, OPEN,
PUT (File I/O), SEEK Function,
SEEK Statement, UNLOCK, WRITE
 
CLEAR, FRE, PEEK, POKE
 
ASC, CHR$, HEX$, INSTR, LCASE$, LEFT$,
LEN, LSET, LTRIM$, MID$ Function, MID$
Statement, OCT$, RIGHT$, RSET, RTRIM$
SPACE$, STR$, STRING$, UCASE$, VAL
 
ABS, ASC, ATN, CDBL, CINT, CLNG, COS,
CSNG, CVDMBF, CVSMBF, EXP, INT, LOG,
RANDOMIZE, RND, SGN, SIN, SQR, TAN,
TIME$ Function
 
COM, ERDEV, ERDEV$, ERL, ERR, ERROR,
KEY (Event Trapping), ON COM, ON ERROR,
ON KEY, ON PEN, ON PLAY, ON STRIG,
ON TIMER, PEN, PLAY (Event Trapping),
RESUME, RETURN, STRIG, TIMER Function,
TIMER Statement


AddHandler AddressOf Alias And
AndAlso As Boolean ByRef
Byte ByVal Call Case
Catch CBool CByte CChar
CDate CDbl CDec Char
CInt Class Constraint Class Statement CLng
CObj Const Continue CSByte
CShort CSng CStr CType
CUInt CULng CUShort Date
Decimal Declare Default Delegate
Dim DirectCast Do Double
Each Else ElseIf End Statement
End <keyword> EndIf Enum Erase
Error Event Exit False
Finally For (in For…Next) For Each…Next Friend
Function Get GetType GetXMLNamespace
Global GoSub GoTo Handles
If If() Implements Implements Statement
Imports (.NET Namespace and Type) Imports (XML Namespace) In In (Generic Modifier)
Inherits Integer Interface Is
IsNot Let Lib Like
Long Loop Me Mod
Module Module Statement MustInherit MustOverride
MyBase MyClass Namespace Narrowing
New Constraint New Operator Next Next (in Resume)
Not Nothing NotInheritable NotOverridable
Object Of On Operator
Option Optional Or OrElse
Out (Generic Modifier) Overloads Overridable Overrides
ParamArray Partial Private Property
Protected Public RaiseEvent ReadOnly
ReDim REM RemoveHandler Resume
Return SByte Select Set
Shadows Shared Short Single
Static Step Stop String
Structure Constraint Structure Statement Sub SyncLock
Then Throw To True
Try TryCast TypeOf…Is UInteger
ULong UShort Using Variant
Wend When While Widening
With WithEvents WriteOnly Xor
#Const #Else #ElseIf #End
#If = & &=
* *= / /=
\ \= ^ ^=
+ += - -=
>> Operator >>= Operator << <<=


Euklidův algoritmus v ZVUKSI:

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

VYPIS ""
VYPIS "NSD a Bezout 2 celých čísel."
VYPIS ""

ROZMER r JAKO CELE()
VSTUP "a := ", r(0)
VSTUP "b := ", r(1)

ROZMER k BUDIZ 1 JAKO CELE
ROZMER q JAKO CELE()
POZN Jednotková matice
ROZMER x BUDIZ (1, 0) JAKO CELE(2)
ROZMER y BUDIZ (0, 1) JAKO CELE(2)

ZATIMCO r(-1) NEROVNO 0 DELEJ
    q(k) BUDIZ r(k-1) DEL r(k) ' q je o 1 pozadu
    r(k) BUDIZ r(k-1) ZB r(k) ' názorné modulo
    x(k) BUDIZ x(k-1)-q(-1)*x(k)
    y(k) BUDIZ y(k-1)-q(-1)*y(k)
    k BUDIZ k + 1
SMYCKA

VYPIS ""
VYPIS "NSD(", a, ", ", b, ") = ", r(k), " = ", x(k), " * ", r(0), " + ", y(k), " * ", r(1)
VYPIS ""

JESTLI r(k) ROVNO 1 TAK
    VYPIS "Čísla jsou nesoudělná."
    VYPIS ""
KONEC JESTLI

VYPIS "Koncový stav: " ' mezivýpočty
VYPIS ""
VYPIS "q = ", q
VYPIS "r = ", r
VYPIS "x = ", x
VYPIS "y = ", y
VYPIS "k = ", k
VYPIS ""

KONEC

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



Č/Č++

Pro tuhle modifikaci jsem kdysi dal dohromady hlavičku plnou #defineů. Mám ji na starém netbooku. Tahle implementace by mohla doopravdy fungovat. Nevýhodou je, že původní vyhrazená slova jsou stále vyhrazená. Také názvy funkcí standardních knihoven by měly být přeloženy, ale nechce se mi. Také nejde psát na české klávesnici.

Je to také příležitost pro konzistentnější typový systém, který snese rozšíření. Používá to HolyC, Zig, Kotlin, Rust a kdeco ještě.
C jako celé, N jako nezáporné, Z jako znak, P jako plovoucí. Číslo za ním označuje počet bitů. K plovoucím lze přidat ještě R jako rozšířený rozsah za cenu nižší přesnosti. Zpravidla se jedná o 2x delší typ s useknutou mantissou, aby končila v půlce. Takové typy se objevují ve strojovém učení. Nejkratší je furt napsat int/cele nebo float/plov, když nechceme řešit, jak velký typ je potřeba. Pythonu stačí 4: bool, nafukovací int, nafukovací float, str.

C8    N8    N0   Z8
C16   N16   N1   Z16
C32   N32   P32  Z32
C64   N64   P64
C128  N128  P80

signed char  unsigned char       void         char
short        unsigned short      bool         char16_t
int          unsigned            float        char32_t/wchar_t
long         unsigned long       double
long long    unsigned long long  long double

Poslední dobou se používají různé druhy plovoucích čísel, což se hodí do typového systému zanést:

P##p - přesné - P(##/2) s mantissou prodlouženou o ##/2 bitů
P## - standardně podle IEEE
P##r - rozšířený rozsah - P(##*2) s mantissou useknutou o ##/2 bitů

IEEE nestandardizuje 8-bitový plovoucí formát, takže P16p není z čeho odvodit, a z 8-bitových jde jenom P8r. Často se uvádí P8 jako 1-4-3, což je jen 1 vyměněný bit od P8r. Pak jsou tu ještě posit čísla, která se určují počtem bitů a rozsahem, ale v těch se nevyznám.

Vyhrazený slovníček (* pouze v C++, ** přibylo v C++11 až C++20):

alignas**           zarovnat
alignof**           zarovnani
asm*                symbolickeprikazy symprik
atomic_cancel**     nedelitelnezrus nedelzrus
atomic_commit**     nedelitelneposli nedelposli
auto                promenna prom funkce fun
bool*               priznak
break               prerus
case                pripad
catch*              chytni zachyt chyt
char                znak
char8_t**           znak8
char16_t**          znak16
char32_t**          znak32
class*              trida
concept**           pojem
const               stala stale staly st
consteval**         stalevyhod stvyh
constexpr**         stalyvyraz stvyr
continue            pokracuj
decltype**          prohlasdruh prohldruh
default             vychozi
delete*             smaz
do                  delej
double              realny realna realne
else                jinak
enum                vycet
explicit*           narovinu
export*             vyvez
extern              vnejsi
false*              lez
float               plovouci plov
for                 pro
friend*             soudruh pritel
goto                jdina
if                  jestli kdyz
inline              samodosad vradku
int                 cely cela cele
long                dlouhy dlouha dlouhe
mutable*            menitelny menitelna menitelne
namespace*          prostor
new*                novy
noexcept**          bezvyjimky
nullptr**           nic
operator*           operace
private*            soukromy soukroma soukrome
protected*          chraneny chranena chranene
public*             verejny verejna verejne
register            registr
return              vrat
short               kratky kratka kratke
signed              znamenkovy znam
sizeof              velikost
static              stojaty
static_assert**     stojatevynuceni stojvyn stvyn
struct              struktura
switch              prepni
template*           sablona
this*               toto tohle tento sebe se
thread_local**      vlaknuvlastni
throw*              vyhod
true*               pravda
try*                zkus
typedef             definujtyp deftyp
typeid*             indetifikacetypu identtypu idtypu
typename*           jmenotypu jmtypu
union               jednota
unsigned            neznamenkovy nezaporny nezap kladny
using*              pouzivaje pouzij
virtual*            virtualni mysleny myslena myslene
void                prazdno procedura proc
volatile            nestaly
wchar_t             sirokyznak
while               zatimco behem
override**          prerizeni pretizeni
final**             konecny konecna konecne
audit**             proverka
axiom**             dogma
#if                 jestli kdyz
#elif               jinakjestli jinakkdyz
#else               jinak
#endif              konecjestli koneckdyz
#ifdef              jestlistan kdyzstan
#ifndef             jestlinestan kdyznestan
#define             stanov
#undef              zrus
#include            zahrn
#line               radek
#error              chyba
#pragma             ucin prekl prekladac
#defined            stanoveno
#__has_include**    mazahrnuto
#__has_cpp_attribute** mavlastnost
_Pragma**           prekladac


Euklidův algoritmus v Č:

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

#include "cz.h"
zahrn <stdio.h>
zahrn <stdlib.h>

stanov PUV_KAP 16

// Co to je za jazyk, když si musím psát vlastní vypisování pole?
procedura vypispole(cele* pole, cele velikost){
    jestli(velikost > 0 && pole){
        printf("[%d", pole[0]);
        pro(cele i = 1; i < velikost; ++i){
            printf(", %d", pole[i]);
        }
        puts("]");
    }
}

cele hlavni(){
    cele a, b, k = 1, kap = PUV_KAP; cele *q, *x, *y;
    x = malloc(PUV_KAP);
    y = malloc(PUV_KAP);
    x[0] = 1; x[1] = 0; // jednotková matice
    y[0] = 0; y[1] = 1;
    printf("a := "); scanf("%d", &a);
    printf("b := "); scanf("%d", &b);

    zatimco(r[k] != 0){
        q[k] = r[k-1]/r[k]; // q je o 1 pozadu
        r[k] = r[k-1]%r[k]; // názorné modulo
        x[k] = x[k-1]-q[k]*x[k];
        y[k] = y[k-1]-q[k]*y[k];
        ++k;
        jestli(k >= kap){
            kap *= 2;
            y = realloc(y, kap);
            x = realloc(x, kap);
        }
    }

    printf("\nNSD(%d, %d) = %d = %d * %d + %d * %d\n\n", a, b, r[k], x[k], r[0], y[k], r[1]);

    jestli(k == 1){
        puts("Čísla jsou nesoudělná.");
    }

    puts("Koncový stav:"); // mezivýpočty
    printf("q = "); vypispole(q, k);
    printf("r = %d\n", r);
    printf("x = "); vypispole(x, k);
    printf("y = "); vypispole(y, k);
    printf("k = %d\n", k);

    free(x); free(y);
    vrat 0;
}

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

Povolené Unicode znaky v identifikátorech podle C18:
00A8, 00AA, 00AD, 00AF, 00B2–00B5, 00B7–00BA, 00BC–00BE, 00C0–00D6, 00D8–00F6, 00F8–00FF, 0100–167F, 1681–180D, 180F–1FFF, 200B–200D, 202A–202E, 203F–2040, 2054, 2060–206F, 2070–218F, 2460–24FF, 2776–2793, 2C00–2DFF, 2E80–2FFF, 3004–3007, 3021–302F, 3031–303F, 3040–D7FF, F900–FD3D, FD40–FDCF, FDF0–FE44, FE47–FFFD, 10000–TamToStejněNikohoNezajímajá

Takže nepovolené znaky jsou: ¡¢£¤¥¦§©«¬®°±¶»¿×÷ ᠎           ‎‏‐‑‒–—―‖‗‘’‚‛“”„‟†‡•‣․‥…‧ ‰‱′″‴‵‶‷‸‹›※‼‽‾⁁⁂⁃⁄⁅⁆⁇⁈⁉⁊⁋⁌⁍⁎⁏⁐⁑⁒⁓⁕⁖⁗⁘⁙⁚⁛⁜⁝⁞  [šipky, rovnítka, APL a OCR] [pseudografika, dingbats] [další šipky, braillovo písmo, další rovnítka, alchymistické symboly] [další interpunkce]  、。〃〈〉《》「」『』【】〒〓〔〕〖〗〘〙〚〛〜〝〞〟〠〰 [náhradní páry, soukromé užití] ﴾﴿ [neznaky FDD0~FDEF] ﹅﹆ [neznaky FFFE a FFFF]

Další znaky nepovolené na začátku: 0300–036F, 1DC0–1DFF, 20D0–20FF, FE20–FE2F

To jsou jenom diaktitická kombinační znaménka a kombinační ligatury



ČOBOL (TODO)

No tak můžu to zkusit, ale těch slov je hodně, takže se to protáhne.

Vyhrazený slovníček podle IBM na z/OS:

ACCEPT
ACCESS
ADD
ADDRESS
ADVANCING
AFTER
ALL
ALPHABET
ALPHABETIC
ALPHABETIC-LOWER
ALPHABETIC-UPPER
ALPHANUMERIC
ALPHANUMERIC-EDITED
ALSO
ALTER
ALTERNATE
AND
ANY
APPLY
ARE
AREA
AREAS
ASCENDING
ASSIGN
AT
AUTHOR
BASIS
BEFORE
BEGINNING
BINARY
BLANK
BLOCK
BOTTOM
BY
CALL
CANCEL
CBL
CD
CF
CH
CHARACTER
CHARACTERS
CLASS
CLASS-ID
CLOCK-UNITS
CLOSE
COBOL
CODE
CODE-SET
COLLATING
COLUMN
COM-REG
COMMA
COMMON
COMMUNICATION
COMP
COMP-1
COMP-2
COMP-3
COMP-4
COMP-5
COMPUTATIONAL
COMPUTATIONAL-1
COMPUTATIONAL-2
COMPUTATIONAL-3
COMPUTATIONAL-4
COMPUTATIONAL-5
COMPUTE
CONFIGURATION
CONTAINS
CONTENT
CONTINUE
CONTROL
CONTROLS
CONVERTING
COPY
CORR
CORRESPONDING
COUNT
CURRENCY
DATA
DATE-COMPILED
DATE-WRITTEN
DAY
DAY-OF-WEEK
DBCS
DE
DEBUG-CONTENTS
DEBUG-ITEM
DEBUG-LINE
DEBUG-NAME
DEBUG-SUB-1
DEBUG-SUB-2
DEBUG-SUB-3
DEBUGGING
DECIMAL-POINT
DECLARATIVES
DELETE
DELIMITED
DELIMITER
DEPENDING
DESCENDING
DESTINATION
DETAIL
DISPLAY
DISPLAY-1
DIVIDE
DIVISION
DOWN
DUPLICATES
DYNAMIC
EGCS
EGI
EJECT
ELSE
EMI
ENABLE
END
END-ADD
END-CALL
END-COMPUTE
END-DELETE
END-DIVIDE
END-EVALUATE
END-IF
END-INVOKE
END-MULTIPLY
END-OF-PAGE
END-PERFORM
END-READ
END-RECEIVE
END-RETURN
END-REWRITE
END-SEARCH
END-START
END-STRING
END-SUBTRACT
END-UNSTRING
END-WRITE
ENDING
ENTER
ENTRY
ENVIRONMENT
EOP
EQUAL
ERROR
ESI
EVALUATE
EVERY
EXCEPTION
EXIT
EXTEND
EXTERNAL
FALSE
FD
FILE
FILE-CONTROL
FILLER
FINAL
FIRST
FOOTING
FOR
FROM
FUNCTION
GENERATE
GIVING
GLOBAL
GO
GOBACK
GREATER
GROUP
HEADING
HIGH-VALUE
HIGH-VALUES
I-O
I-O-CONTROL
ID
IDENTIFICATION
IF
IN
INDEX
INDEXED
INDICATE
INHERITS
INITIAL
INITIALIZE
INITIATE
INPUT
INPUT-OUTPUT
INSERT
INSPECT
INSTALLATION
INTO
INVALID
INVOKE
IS
JUST
JUSTIFIED  
KANJI
KEY  
LABEL
LAST
LEADING
LEFT
LENGTH
LESS
LIMIT
LIMITS
LINAGE
LINAGE-COUNTER
LINE
LINE-COUNTER
LINES
LINKAGE
LOCAL-STORAGE
LOCK
LOW-VALUE
LOW-VALUES
MEMORY
MERGE
MESSAGE
METACLASS
METHOD
METHOD-ID
MODE
MODULES
MORE-LABELS
MOVE
MULTIPLE
MULTIPLY
NATIVE
NATIVE_BINARY
NEGATIVE
NEXT
NO
NOT
NULL
NULLS
NUMBER
NUMERIC
NUMERIC-EDITED
OBJECT
OBJECT-COMPUTER
OCCURS
OF
OFF
OMITTED
ON
OPEN
OPTIONAL
OR
ORDER
ORGANIZATION
OTHER
OUTPUT
OVERFLOW
OVERRIDE
PACKED-DECIMAL
PADDING
PAGE
PAGE-COUNTER
PASSWORD
PERFORM
PF
PH
PIC
PICTURE
PLUS
POINTER
POSITION
POSITIVE
PRINTING
PROCEDURE
PROCEDURE-POINTER
PROCEDURES
PROCEED
PROCESSING
PROGRAM
PROGRAM-ID
PURGE
QUEUE
QUOTE
QUOTES
RANDOM
RD
READ
READY
RECEIVE
RECORD
RECORDING
RECORDS
RECURSIVE
REDEFINES
REEL
REFERENCE
REFERENCES
RELATIVE
RELEASE
RELOAD
REMAINDER
REMOVAL
RENAMES
REPLACE
REPLACING
REPORT
REPORTING
REPORTS
REPOSITORY
RERUN
RESERVE
RESET
RETURN
RETURN-CODE
RETURNING
REVERSED
REWIND
REWRITE
RF
RH
RIGHT
ROUNDED
RUN
SAME
SD
SEARCH
SECTION
SECURITY
SEGMENT
SEGMENT-LIMIT
SELECT
SELF
SEND
SENTENCE
SEPARATE
SEQUENCE
SEQUENTIAL
SERVICE
SET
SHIFT-IN
SHIFT-OUT
SIGN
SIZE
SKIP1
SKIP2
SKIP3
SORT
SORT-CONTROL
SORT-CORE-SIZE
SORT-FILE-SIZE
SORT-MERGE
SORT-MESSAGE
SORT-MODE-SIZE
SORT-RETURN
SOURCE
SOURCE-COMPUTER
SPACE
SPACES
SPECIAL-NAMES
STANDARD
STANDARD-1
STANDARD-2
START
STATUS
STOP
STRING
SUB-QUEUE-1
SUB-QUEUE-2
SUB-QUEUE-3
SUBTRACT
SUM
SUPER
SUPPRESS
SYMBOLIC
SYNC
SYNCHRONIZED
TABLE
TALLY
TALLYING
TAPE
TERMINAL
TERMINATE
TEST
TEXT
THAN
THEN
THROUGH
THRU
TIME
TIMES
TITLE
TO
TOP
TRACE
TRAILING
TRUE
TYPE
UNIT
UNSTRING
UNTIL
UP
UPON
USAGE
USE
USING
VALUE
VALUES
VARYING
WHEN
WHEN-COMPILED
WITH
WORDS
WORKING-STORAGE
WRITE
WRITE-ONLY
ZERO
ZEROES
ZEROS



2019-01-06

1. 5letka je za námi, soudruzi!


Tentokrát bude výroční příspěvek česky, protože anglicky mluvící země si ještě socialismus nevyzkoušely, aby zjistily, že není lepší než jiné formy státismu. Pojem 5letka pro ně proto nic neznamená. Pro ně byl výroční článek o 4. výročí, což je délka volebního mandátu.

Přibývání nových článků je čím dál tím pomalejší, že už by se mohlo vyplatit z toho udělat statickou stránku v jednoduchém HTML, která by se načítala rychle i po vyčerpání datového balíčku, případně v zemích, kde neplatí síťová neutralita.

ANSI grafy jsou úžasné.



MĚSÍČNĚ:

19+█

18+▒
17+▒
16+▒
15+▒
14+▒
13+▒
12+▒
11+▒
10+▒
09+▒█
08+▒▒
07+▒▒
06+▒▒
05+▒▒█  ██                                      █  █
04+▒▒▒█ ▒▒███    █ █       █    █               ▒  ▒  
03+▒▒▒▒█▒▒▒▒▒ █ █▒█▒██    █▒█   ▒             ██▒  ▒ 
02+▒▒▒▒▒▒▒▒▒▒█▒█▒▒▒▒▒▒█  █▒▒▒   ▒█   █  █  █  ▒▒▒  ▒ ▒▒     █  █  ██
01+▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██▒▒▒▒█ █▒▒█  ▒  ▒  ▒██▒▒▒  ▒█▒      ▒█ ▒▒
00+▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒█▒▒▒▒██▒▒█▒██▒▒▒▒▒▒██▒▒▒▒▒█▒▒
   123456789ABC123456789ABC123456789ABC123456789ABC123456789ABC12345
   |  2 0 1 4  |  2 0 1 5  |  2 0 1 6  |  2 0 1 7  |  2 0 1 8  |2019

led 2014 - Backport facebookových poznámek
dub 2016 - 1. měsíc bez článků
led 2016 - 10000 celkových zobrazení
zář 2016 - 1. 2 měsíce za sebou bez článků
srp 2017 - Změna barev, přidán štítek "Code"
zář 2017 - 50000 celkových zhlédnutí
říj 2017 - 5 článků v 1 měsíci, naposledy v červenci 2014
čer~zář 2018 - 4 měsíce bez článků
dub 2019 - robotům vstup zakázán, blog zazálohován



ČTVRTLETNĚ:


33+███

32+
  /
14+
13+▒▒   ███
12+▒▒███
11+▒
10+▒▒      ███
09+▒▒   ███▒                              ███
08+▒▒   ▒      ███                     
07+▒▒███▒      ▒▒               ███   
06+▒▒██████▒▒               ▒   
05+▒▒▒▒▒███            ▒███▒███
04+▒▒▒▒▒▒▒▒▒▒   ███      ▒         █
03+▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒███▒   ███▒      ███▒
02+▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒███▒   ███▒▒▒▒
01+▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒   ▒▒▒▒▒
00+▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒███▒▒
    1  2  3  4  1  2  3  4  1  2  3  4  1  2  3  4  1  2  3  4  1  2
   |  2 0 1 4  |  2 0 1 5  |  2 0 1 6  |  2 0 1 7  |  2 0 1 8  |2019



ROČNĚ:

2014: █████████████████████████████████████████████████████████████████████████ 67

2015: █ 31

2016: █ 20

2017:  17

2018:  16



Celkem za 1. 5letku bylo zveřejněno 151 příspěvků, průměrně 30,2 na rok, 7,55 na čtvrtletí a 2,51667 na měsíc. Také bylo nabráno zhruba 75000 celkových zhlédnutí, průměrně 15000 na rok, 3750 na čtvrtletí a 1250 na měsíc.

Komentářů je i za těch 5 let i s možností komentovat anonymně moc málo na to, aby se s nimi dala dělat nějaká statistika. 14 komentářů, z toho 5 spamů.

Přispěno v BTC: 0.00000000. Vy fiaťáci jedni, asi si sem dám reklamy. Nebo bych si moh založit nějaké altcoinové peněženky. Číslo fiatového účtu sem fakt dávat nebudu.


Možné nové štítky:
Meta - pro ohlášení jako toho
ANSI - pro příspěvky používající pseudografiku a potřebující pevnou šířku
GeSeL - pro příspěvky o nebo v GeSeLu
Greentext - pro zelené historky
Memes - podkategorie ZOMFGWTFBBQ
OC - zaručený originální obsah