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 ? 1 : 0 );
        $acc = $acc | ($z << $bit);
        if((--$bit) < 0 ) { $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
7
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
2
фдуч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

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