Warning: session_start(): open(/var/lib/php/sessions/sess_eq63q3nh3rfo28v8flhgo0js0c, O_RDWR) failed: No space left on device (28) in /var/www/tb-usercake/models/config.php on line 51
Warning: session_start(): Failed to read session data: files (path: /var/lib/php/sessions) in /var/www/tb-usercake/models/config.php on line 51
/*
(up to date version of the text is on discord)
"Recognition By Compression"
Components:
-INPUT DATA - e. g. an image to compress
-It is a SEARCH for the best COMPRESSOR of the INPUT DATA
-a CURRENT BEST COMPRESSED VERSION of the input data [possibly updated when improvements are made]
-a COMPRESSED VERSION of data x is a PIECE OF CODE computing x
-a COMPRESSED LOSSY VERSION of data x is a PIECE OF CODE computing y
with diff(x, y) small
-SEARCH STRATEGIES (generators of ever improving scored compressed versions for some input data)
-Compression SCORERS (let's say simply by the size of the compressed version; this is for losslesss compressors)
(LOSSY compressions are difficult to score, TBD)
Later:
-SEMANTIC LINKERS that make sense of a compressed version of an image
*/
sclass RecognitionByCompression_v1 extends Meta {
interface CompressionRegime {
byte[] decompressorToBytes(A decompressor);
A decompressorFromBytes(byte[] compressed);
byte[] runDecompressor(A a);
default byte[] decompress(byte[] compressed) {
ret runDecompressor(decompressorFromBytes(compressed));
}
}
class CompressionRegime_GZEval implements CompressionRegime {
public byte[] decompressorToBytes(S decompressor) {
ret gzipBytes(toUtf8(decompressor));
}
public S decompressorFromBytes(byte[] compressed) {
ret fromUtf8(gunziBytes(compressed));
}
public byte[] runDecompressor(S code) {
ret toByteArray(dm_javaEval(code));
}
}
class CompressorSearch {
CompressionRegime regime;
byte[] inputData;
new Best best;
*(CompressionRegime *regime) {}
*(CompressionRegime *regime, byte[] *inputData) {}
int inputDataSize() { ret l(inputData); }
int compressorSize(A compression) {
ret l(regime.decompressorToBytes(compression));
}
double score(A compression) {
ret doubleRatio(inputDataSize(), compressorSize(compression));
}
bool verify(A compression) {
ret byteArraysEqual(regime.runDecompressor(compression), inputData);
}
void submit(A compression) {
double score = score(compression);
if (score > best.score())
if (!verify(compression))
warn("Compressor didn't verify");
else
best.put(compression, score);
}
}
}