0
<< предыдущая заметкаследующая заметка >>
30 ноября 2021
Вторая жизнь ваших комментариев

Добрый человек Kalan подарил мне чековый принтер чтобы я реализовал давно задуманный арт-концепт: появление комментариев в туалете онлайн. Такая почти что Стена Плача, только записочки передаются по интернету. Так что пишите комментарии, я вас внимательно читаю.

Принтер удобнее всего оказалось расположить под потолком. Чисто технически настроить это было не слишком сложно, но граблей оказалось много. Xprinter XP-A160M печатает на чековой ленте 80мм (576 точек), понимая команды ESC/POS. На самом деле он их не очень-то понимает - например категорически отказывается переключать раскладку на какую-то, кроме китайской. Но это не очень важно, потому что можно печатать в графике. Скорость у принтера настолько бешеная, что скрипт PHP не успевает потрошить картинку и передавать ему биты: на листе появляются пустые линии от ему одному заметных пауз. Чтобы их не было, я сперва накапливаю данные, потом передаю.

Сперва я беру комментарий или текст и делаю HTML. А HTML перегоняю в картинку при помощи утилиты cutycapt (и xvfb, если сервер без дисплея):

/usr/bin/xvfb-run --server-args="-screen 0,576x600x8" /usr/bin/cutycapt --min-width=576 --min-height=1 --url=file://file.html --out=file.png

Далее надо сделать картинку монохромной. И, желательно, толково. Делается это при помощи утилиты convert/imagemagick:

/usr/bin/convert file.png -resize 576x -colors 2 -normalize -colorspace Gray -dither FloydSteinberg -alpha off -background white -alpha Background filemono.png

И вот это - территория адских глюков. Во-первых, потому что разные сборки imagemagic на разных машинах внезапно дают совершенно разные результаты - как по качеству, так и по сбоям. Например, опция -monochrome на десктопной Убунте работает, а на сервере armf выдает черную картинку. Если собрать самому imagemagic из исходников, то глюка нет, но качество преобразования скверное. Впрочем, даже после игр с опциями, сборка на сервере редкие файлы все равно транслирует со сбоем (слева file.png, справа filemono.png):

Далее остается картинку побитово загнать в принтер в нужном формате, но тут уже я написал свой скриптик на PHP. Любопытно, что хоть глубина цвета у filemono.png равна 2, но палитра файла непредсказуема. Белая точка может обозначаться цветом 0x000000, черная 0x000001, но в следующем файле белая точка вполне может оказаться 0x000003, а черная 0x0000FE, поэтому предварительно скрипт ищет, какой цвет у белой точки сегодня.

Но в целом все работает прекрасно. Особенно мило, что принтер с автоотрезчиком, удобно рвать ленту. Так что пишите комментарии! А там уж, как знать, может, когда-нибудь мне удастся реализовать полный концепт: печать прямо на настоящей туалетной бумаге.

Также можно прямо напрямую отправить на сортирный принтер текстовое послание или картинку:

напечатать текст

или напечатать картинку

Для интересующихся скриптами:
показать код
<?php

header
('Access-Control-Allow-Origin: *');
header('Content-Type: text/plain');
ini_set('error_reporting'E_ALL);
ini_set('display_errors'1);
ini_set('display_startup_errors'1);

$DIR='/tmp/xprint_'.time();
$file_in=$DIR.".array";
$file_html=$DIR.".html";
$file_img=$DIR.".png";
$file_mono=$DIR."_mono.png";
$file_out=$DIR.".lp0";

 
// если прислали готовую картинку для принтера
if(count($_FILES)>0) {
    foreach(
$_FILES as $n=>$FILE) if(is_uploaded_file($FILE["tmp_name"])) {

        
// сделать из загруженной картинки монохромную.png
        
image2mono($FILE["tmp_name"],$file_mono);

        
// отправить на принтер
        
xprint_png($file_mono,$file_out);

    die(
"salert('Done',2000);"); // только одна картинка
    
}
}

 
// если прислали текст для принтера
elseif(isset($_REQUEST['text'])) {
    
$s=uw($_REQUEST['text']);
    if( 
strlen($s) > 2000 || substr_count($s,"\n") > 80 ) die("\nError: text too long: ".strlen($s)." > 2000, \\n = ".substr_count($s,"\n"));

    
// сделать из текста файл HTML
    
file_put_contents($file_html,"<html>
<head>
 <meta charset='windows-1251'/>
 <meta http-equiv='Content-Type' content='text/html; charset=windows-1251'>
</head><body>
</body><div style='font-size:25px'>"
.nl2br($s)."</div></body>
</html>"
);

    
// сделать из HTML картинку
    
html2png($file_html,$file_img);

    
// сделать картинку монохромной.png
    
image2mono($file_img,$file_mono);

    
// отправить на принтер
    
xprint_png($file_mono,$file_out);

    die(
"ajaxoff();salert('Printed',2000);ajaxoff();"); // только одна картинка
}

 
// иначе пришли данные комментария из дневника
else {
    if(
function_exists("fastcgi_finish_request")) fastcgi_finish_request(); // закрыть соединение

    
$p=file_get_contents('php://input');
    if(!empty(
$p)) { file_put_contents($file_in,$p); $p=unserialize($p); }
    else {
        
$f="xprinter.array"; if(!is_file($f) || empty( $p=@unserialize(file_get_contents($f) )) ) die("Nothing to do");
    }

    
// сделать из данных HTML-комментарий
    
make_comment_html($p,$file_html);

    
// сделать из HTML картинку
    
html2png($file_html,$file_img);

    
// сделать картинку монохромной.png
    
image2mono($file_img,$file_mono);

    
// отправить картинку на принтер
    
xprint_png($file_mono,$file_out);
}

// удалить временные файлы
// $g=glob($DIR.'*'); foreach($g as $l) { if(is_file($l)) unlink($l); }

exit;

####################################################

// сделать из HTML картинку (apt install cutycapt xvfb)
function html2png($file_html,$file_img,$width=576) {
    
exec("/usr/bin/xvfb-run --server-args=\"-screen 0, ".$width."x600x8\" "
        
."/usr/bin/cutycapt --min-width=".$width." --min-height=1 --url=file://".$file_html." --out=".$file_img);
}

// сделать картинку монохромной.png (apt install imagemagick)
function image2mono($file_img,$file_mono,$width=576) {
    
exec("/usr/bin/convert ".$file_img." -resize ".$width."x -colors 2 "
    
."-normalize -colorspace Gray -dither FloydSteinberg -alpha off -background white -alpha Background ".$file_mono);
}

// напечатать картинку.png на принтере
function xprint_png($file,$file_lp='') { if(empty($file_lp)) $file_lp=$file.".lp0";
    
$DEV=@exec("/bin/ls /dev/usb/lp*"); if(empty($DEV)) die("\nError: lp* not found"); // нашли принтер

    
$ESC="\x1b";
    
$GS="\x1d";

    
$out="";
    list(
$w,$h,$type) = @getimagesize($file);

    if(
$h 3000) die("\nError: height too big");

    if( empty(
$w) || empty($h) || false===($im=imagecreatefrompng($file)) ) die("\nError: Empty file ".$file);

    
$w0 floor(($w+7)/8); // байт в 8 раз меньше точек

    
$min=0xFFFFFF;
    for(
$y=0;$y<$h;$y++) { // найти сегодняшний код белых точек
        
for($x=0;$x<$w;$x++) {
        
$c=imagecolorat($im,$x,$y);
        if(
$c>$min) break;
        
$min=min($c,$min);
        }
        if(
$c>$min) break;
    }

    
$out.=$ESC."@"// Сброс настроек
    
$out.=$GS."v0".chr(0// печать картинки
    
.chr($w0 0xFF).chr(($w0 >> 8) & 0xFF// width (bytes!)
    
.chr($h 0xFF).chr(($h >> 8) & 0xFF); // height

    
$bit=7$acc=0;
    for(
$y=$h-1;$y>=0;$y--) { //for($y=0;$y<$h;$y++) // прямое/перевернутое
    
for($x=$w-1;$x>=0;$x--) { // for($x=0;$x<$w;$x++) // прямое/перевернутое
        
$z=( imagecolorat($im,$x,$y) == $min );
        
$acc $acc | ($z << $bit);
        if((--
$bit) < ) { $out.=chr($acc); $acc=0$bit=7; }
    }
    if(
$bit!=7$out.=chr($acc); // добавить если не кратно
    
}

    
$out="\n".$out."\n" // добавим переводы строки
    
.$GS."V\x41".chr(3); // и команду обрезки листа
    // file_put_contents($DEV,$out); // напрямую настройки безопасности запрещают
    
file_put_contents($file_lp,$out); exec("cat \"".$file_lp."\" > $DEV");
    
unlink($file_lp);
}


// сделать из данных $p комментарий в файле HTML
function make_comment_html($p,$file_html) {
    
$is=300// размер юзерпика

    
include_once "include_sys/_obracom.php";
    function 
explode_last($c,$s){ return substr(strrchr($s,$c),strlen($c)); }
    function 
h($s) { return str_replace(array('&','<','>',"'",'"'),array('&','<','>','&#39;','&#34;'),$s); }

    
$s=h($p["Text"]);
    if(
stristr($s,'{screen:') or stristr($s,'{scr:')) {
        
$s preg_replace("/\{screen:\s*(.+?)\s*\}/si","<div style='border: 1px dotted red; background: #eeeeee'>$1</div>",$s);
            
$s preg_replace("/\{scr:\s*(.+?)\s*\}/si","<div style='border: 1px dotted blue; background: #eeeeee'>$1</div>",$s);
    }
    
$s=str_replace("\n","\n<br>\n",$s);
    
$s=AddBB($s);
    
$s=hyperlink("\n$s\n");
    
$s=trim($s,"\r\n ");
    
$s=preg_replace("/&(#[\d]+;)/si","&$1",$s); // отображать спецсимволы и национальыне кодировки
    
$s=preg_replace("/<div alt='play'>[^<>\s]+ <div/s","<div alt='play'><div",$s);
    if(empty(
$s)) die("\nError: empty text");
    
$p['Text']=$s;

    
file_put_contents($file_html,"<html>
<head>
 <meta charset='windows-1251'/>
 <meta http-equiv='Content-Type' content='text/html; charset=windows-1251'>
<style>
img {max-width: 100% !important; height: auto !important;}
.header { font-size:12px; }
.name { display:inline; font-size:40px; font-weight:bold; }
.answer { font-size:10px; }
.text { margin-top:10px; font-size:25px; }
</style>
</head>
<body>
<img src='http://lleo.me/dnevnik/user/"
.$p['unic']."/userpick.jpg' style='float:right;margin: 0 0 1ex 1em;max-width:".$is."px;max-height:".$is."px;height:".$is."px;width:".$is."px;object-fit:cover;border-radius:7px;' onerror=\"this.style.display='none'\">
<base href='http://canada.lleo.me/dnevnik/"
.$p['Date']."'>
<div class='header'>"
.$p['Date']." ".$p['Header']."</div>
<div class='name'>"
.$p['Name']."</div>
<div class='answer'>"
.($p['Parent']?" отвечает ".$p['parent_Name']." ":'').date("Y-m-d H:i",$p['Time'])."</div>
<div class='text'>"
.$p['Text']."</div>
</body>
</html>"
);

}

function 
uw($txt) { return(iconv("utf-8","cp1251//IGNORE",$txt)); }

?>
?>
<< предыдущая заметка следующая заметка >>
пожаловаться на эту публикацию администрации портала
архив понравившихся мне ссылок

Комментарии к этой заметке скрываются - они будут видны только вам и мне.

Оставить комментарий
Linux Safari Chrome
 Украина
5
0
Соziдатель
На бумаге будет хорошо, чтобы подтираться некоторыми мнениями.

Но каменты ж ещё те высеры… Можно под принтер маленький унитаз и вполне себе экспонат для музея современного искуства.
Windows Safari Chrome
 Казахстан
1
0
Denis Dyakov
Зашел написать этот комментарий, но меня опередили: в идеальном мире этот принтер должен заправляться туалетной бумагой.
Linux Ubuntu Firefox
 Москва
0
0
Леонит Каганофф
Вы знаете хоть один современный принтер или печатающую головку или матрицу кассовую, способную много печатать на туалетной бумаге?
Windows Safari Chrome
 Москва
0
0
2:5020/321
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
Ищите LX800 матричный. Оптрончик чтобы ловил перфорацию...
Windows Safari Chrome
 Германия
0
0
patimo
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
Надо туалетную бумагу молоком пропитать. Так ещё Ленин делать догадался.
Windows Firefox
 Израиль
1
0
Павел бывший Пашка
Я знаю. Есть бесконтактные струйные принтеры, печатают на любых предметах, в том числе довольно корявых и гнутых,
На любом пакете с молоком или коробочке с йогуртом посмотрите, дату чаще всего печатают они.
Им все равно, на чем.
Windows Safari Chrome
 Смоленск
0
0
Иван____
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
Позднесоветский или ранненезависимороссийский струйный принтер. Он был характерен маленькими размерами и тем что ему было плевать на чем печатать. Единственное на туалетной бумаге чернила могут расплываться.
Я годах в 91-93 приручал его к компьютеру "Поиск". Ничего жило это...
Linux Safari Chrome
 Израиль
2
1
lookkil
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
Принтер использует термобумагу, которая, по последним данным, является страшным канцерогеном. Подтираться нельзя, а лучше и в руки не брать!
Windows Firefox
 Marietta
0
6
Jason
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
Леонид фанат игр с неизученной вакциной. Канцерогены ему норм.
Windows Firefox
 Нижний Новгород
0
0
Белый Крысс
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
Но-но! Наш чудесный российский натурпродукт супротив вашей буржуйской бумаги это как Тесла супротив Ё-мобиля! Аналоговнет!
Linux Firefox
 Азербайджан
0
0
морра
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
Так он китайской привился
Windows Firefox
 Нижний Новгород
0
0
Белый Крысс
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
Вы всё напутали:
> .. категорически отказывается переключать раскладку на какую-то, кроме китайской.
Это же о принтере речь шла.
Windows Firefox
 Уфа
0
0
Роксана Бабаян
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
В 2015 году у одного казанца на чеке в кармане проявился чей-то лик. Об этом местное ТВ даже передачу выпустило, не подумав, что это могло быть банальное термовоздействие (возможно даже умышленное, ради хайпа).
А насчет канцерогенов, мне ещё тётя говорила, что не понимает тех кто подтирается газетой, там же сплошной свинец и прочая гадость.
Linux Ubuntu Firefox
 Израиль
8
0
200-1.95M
стишку движенье в самый раз
на принтер ну и в унитаз
Windows Firefox
 Россия
3
0
romul0
я бы своей жопе не каждый комментарий доверил...
Windows Firefox
 Нижний Новгород
9
0
Белый Крысс
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
Прочитать или написать?
Windows Safari Chrome
 Москва
0
0
2:5020/321
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
Осознать.
Windows Firefox
 Россия
0
0
romul0
и то, и другое
Windows Safari Chrome
 Кременчуг
13
0
ЖК
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
Мысль изреченная банальна, изрекаю:
это почти как Стена Плача, только Стена Срача.
Windows Firefox
 Калуга
1
0
DrGluck
Киберпанк, который мы заслужили
Windows Safari Chrome
 Москва
0
0
2:5020/321
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
Еще можно успеть на конкурс почты россии!
Linux Safari Chrome
 Харьков
0
1
фдуч2000
Как арт-концепт - супер. Но только не стоит этим пользоваться полноценно, т.к. чековая бумага токсична для человека (даже без комментариев)
Mac Safari Chrome
 Amsterdam
2
0
Igor Pellinen
То есть, не надо кушать бумагу?
Windows Safari Chrome
 Москва
4
0
Анатолий-1
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
Не только, молекулы бумажного рака превосходно впитываются через кожу, тем более через жопу.
Windows Safari Chrome
 Москва
0
0
2:5020/321
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
Да и вдыхать не полезно...
Windows Firefox
 Калуга
1
0
DrGluck
Я попытался отправить на принтер 18 главу Улисса, но оно зависло навсегда. Может быть стоит ограничивать длину сообщения для принтера?
Linux Safari Chrome
 Москва
0
0
Леонит Каганофф
Не волнуйтесь, там ограничено все.
Windows Firefox
 Калуга
0
0
DrGluck
Тогда чего оно повисло на этом запросе?
Linux Safari Chrome
 Москва
0
0
Леонит Каганофф
Ну во-первых, что значит, повисло? Принтер в моем туалете повесить браузер на вашем столе уж точно не сможет... ;)
Windows Firefox
 Калуга
0
0
DrGluck
Я нажал XPrint и не увидел сообщения "Printed". Просто висел курсор ожидания до перезагрузки страницы.
Linux Safari Chrome
 Москва
1
0
Леонит Каганофф
Такое у меня постоянно на сайте Сбербанка, АлиЭкспресса и РЖД :)
Windows Safari Chrome
 Москва
4
0
2:5020/321
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
Думаете и у них в туалетах такое висит?
Windows Firefox
 Калуга
0
0
DrGluck
Хоть что-нибудь распечатолось из Улисса или совсем ничего?
Linux Safari Chrome
 Москва
3
0
Леонит Каганофф
Мне кажется, там всё из Улисса.
Windows Safari Chrome
 Россия
1
0
Василий Алибабаевич Пупкин
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
И если дан тебе талант писать на стенах в сортире,
В Питере ты художник в андеграундном стиле
Windows Safari Chrome
 Россия
3
0
Василий Алибабаевич Пупкин
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
Пусть стены нашего сортира
Украсят юмор и сатира!
Windows Safari Chrome
 Россия
1
0
Василий Алибабаевич Пупкин
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
Писать на стенах туалета,
Увы, друзья, не мудрено.
Среди говна вы все поэты,
Среди поэтов — вы говно.
Windows Safari Chrome
 Россия
0
0
Василий Алибабаевич Пупкин
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
Туалетные писаки!
Вы не славитесь умом,
Ваши головы, как сраки,
Переполнены говном!
Linux Safari Chrome
 Киев
0
0
трович
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
Не, Леонид, так нещитово. В настоящей, концептуальной инсталляции принтер должен быть 3D. Чтобы читатель мог послать тебе, например, картинку с кактусом. Вот тогда у тебя с аудиторией был бы этот... как его... паритет и обратная связь. А когда у одних каменты, а у других бумага - это сплошное издевательство и волюнтаризм.
Windows Safari Chrome
 Израиль
1
0
б
Сначала я подумал, что у тебя камера в потолке туалета. Охренел.

Потом понял, что у тебя там не камера, а зеркальный потолок. Охренел конкретно.

Про моду делать зеркальный потолок над кроватью я слышал и понимаю мотивацию. Кстати, лучше не плоское зеркало, а выпуклое. Можно его своровать на улице на выезде с ограниченной видимостью.

Но зачем зеркальный потолок в туалете? Расскажешь?

UPD. Если решишь ответить, то может быть заодно расскажешь, как случилось, что потолочное зеркало треснуло?
Linux Ubuntu Firefox
 Москва
1
0
Леонит Каганофф
Собирался сделать весь туалет зеркальным, как видел в клубах в Сеуле и Берлине. Но зеркал не хватило.

Потолочное зеркало треснуло из-за подвижек плит по сезонам. Да, в громадных панельных домах тоже ежегодно происходят микроскопические сдвиги.
Windows Safari Chrome
 Израиль
0
0
б
Хорошо что не хватило.
А еще хорошо, что ты не захотел скопировать решение как в том клубе в Тель Авиве, где у нас однажды рабочая вечеринка проходила. Там туалеты зачем-то со стекляными стенками сделали. Причем полупроницаемыми. Изнутри не видно, что ты у зала как на ладони. Видимо, чтобы не смущать справляющего нужду.

UPD: Ну и чтобы два раза не вставать. Интересно, как ты закрепил зеркало. Я даже не знаю, чего бы я больше боялся с таким туалетом. Что зеркало с потолка упадет на меня, или на гостя.
Linux Ubuntu Firefox
 Москва
0
0
Леонит Каганофф
Хороший клей и плинтуса по краю.
Windows Safari Chrome
 Домодедово
6
0
id
"Микроскопические" )))) при сезонной температурной деформации бетона от 0.5 до 0.8 мм на метр и типовой высоте 12-этажного дома 38 метров это от 2 до 3 см на верхнем этаже.

Если дом построен по "секционному" принципу, как сейчас модно - с двумя несущими "кольцами", внутренним (вокруг шахты лифта) и внешним, то на 17 этаже имеем сезонную "пляску" до 4 сантиметров стен внешнего кольца при околонулевой внутреннего. В получающиеся щели пролазит рука.
Windows Safari Chrome
 Москва
0
0
2:5020/321
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
Монолит не такой уж и монолит, швы там есть конечно...
Windows Safari Chrome
 Москва
0
0
2:5020/321
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
Ну подвижка плит это еще не излитие трампов!
Mac Safari Chrome
 Москва
0
0
Sol
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
Везде-то вам Трампы мерещаться... трапПы имелось в виду?

Те которые были в Сибири и вызвали самое глобальное "великое пермское вымирание" (до 90% всех видов).
Linux Safari Chrome
 Москва
0
0
никто не я
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
когда-то в Икее продавались комплекты зеркальной плитки.
Вполне можно выложить сортир целиком.
Заодно будет видно куда брызги летят...
Windows Safari Chrome
 Екатеринбург
0
0
Негаб
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
>Можно его своровать на улице на выезде с ограниченной видимостью.

Никогда бы не заподозрил наличие у вас мелкоуголовных наклонностей )
Linux Safari Chrome
 Днепропетровск
5
0
Дмитрий
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
Я сегодня вакцинировался, ожидал, конечно, что стану к вайфаю подключаться, или по блютусу слушать музыку без наушников. А вместо этого открылась возможность удалённой печати.
Windows Firefox
 Москва
0
0
vctor
У вас Файзер небось. С чужими чипами, их перешивать надо, совсем как в рассказе Леонида про студента.
Linux Safari Chrome
 Москва
5
0
Леонит Каганофф




Кто это сделал, признавайтесь!
Windows Safari Chrome
 Израиль
11
0
б
Не я. Но ты на всякий случай прямо там, в сортире, его и замочи. От греха подальше.
Windows Firefox
 Латвия
0
0
Heisenberg2
...а то на "трон" заберется - не выведешь потом ничем.
Linux Ubuntu Firefox
 Владимир
0
0
Adamos
Надо вывести в двух экземплярах и приложить к счетчикам.
Глядишь, обнулит...
Windows Safari Chrome
 Москва
0
0
2:5020/321
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
Он сам
Windows Firefox
 Латвия
0
0
Heisenberg2
Терешкова
Windows Safari Chrome
 Москва
1
0
Михаил
Как же ты теперь в одном поле вместе с ним сядешь?
Windows Firefox
 Россия
0
0
Galvorn
Первый нах!
Windows Safari Chrome
 Германия
0
0
hoch3
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
Сука, я сделал это!

Ку-ку! Десять часов!
Windows Safari Chrome
 Redmond
0
0
Андрей№189
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
Ох, 10 лет назад использовал ImageMagick для поточной обработки картинок, тогда напрыгался с тем, что надо было использовать очень определенные его версии, чтобы получать воспроизводимые результаты.
За 10 лет, я смотрю, ничего не изменилось.
Linux Safari Chrome
 Россия
0
0
Онанимус
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
Netpbm рулит.

всего комментариев: 62

<< предыдущая заметка следующая заметка >>