GmailFS

GmailFS — файловая система (для Linux), позволяющая использовать почтовую службу GMail для хранения файлов. Поддерживаются системные вызовы read, write, open, close, stat, symlink, link, unlink, truncate и rename.

Достоинства очевидны — файлы этой файловой системы будут доступны вам в любое время из любой точки мира, было бы только подключение к интернет. Недостаток один — компания Google, которая является владельцем GMail ничего не знает о GMailFS — это сторонняя разработка. А это чревато тем, что Google может и не понравится такое не целевое использования их системы или они просто планово поменяют что-то в интерфейсе и GMailFS перестанет работать.

Оставить комментарий

Пожуй, покури

Сфотографировал в магазине. Как видно из надписи («лучше жевать, чем курить») — позиционируется как инструмент борьбы с курением, хотя любому понятно, что это скорее приведёт к обратному эффекту. Теперь даже самые маленькие дети смогут удовлетворить своё желание «выглядеть круто», что часто ассоциируется с сигаретой во рту и только закрепят своё желание курить.

Лучше жевать... (27.47КиБ)

Меня давно забавляет следующая проблема. Забавляет, потому что решить я её всё равно не смогу, остаётся только играть с ней — что в этом мире бизнес делает случайно, а что специально? Случайно ли трёхэтажный гипермаркет «Бехетле» открывается в 100 метрах от «Макдоналдса» или потому что туда ходит множество людей? Причём ходит поесть — при деньгах и с аппетитом. Случайно ли выпустили жевачку с формой сигареты или это такая реклама курения?

Оставить комментарий

POP3 для Gmail

Появился проект POP Goes the Gmail, позволяющий забирирать почту с GMail почтовым клиентом через протокол POP3. Приложение требует .NET framework.

Оставить комментарий

«Репортаж с петлёй на шее»

Дом, где распологается квартира в которой я живу, стоит на пересечении двух улиц — Рихарда Зорге и  Фучика. Первый был советским разведчиком и журналистом, второй — деятелем чехословацкого коммунистического движения, писателем и журналистом.

Для меня фантастические миры Желязны или Лукьяненко параллельной вселенной не являются — в них я чувствую себя свободно. А вот когда дело доходит до коммунистической идеологии, особенно в больших концентрациях я мечусь между цинизмом и сочувствием.

Решил прочитать одну из самых знаменитых коммунистических книг — «Репортаж с петлёй на шее» Фучика. Пока прочитал половину. Дилемма — не знаю как правильно воспринимать книгу — то ли как пропагандистское пособие настоящему коммунисту, наполненное пафосом до горлышка, то ли как летопись мужественного человека, верящего в минувшие идеалы. Затрудняюсь. Буду читать дальше.

Оставить комментарий

Устройство для чтения молитв

Друг приехал из Турции. Рассказал много интересного. В частности, это удивительное устройство на иллюстрации позволяет мусульманам читать молитву. Вероятно там есть возможность автоскроллинга, таймер и счётчик — кажется, мусульманом очень важно во сколько и сколько раз была прочитана молитва.

Digital kur'an (15.65КиБ)

Оставить комментарий

Шрек-2

Советую прочесть отзыв небезызвестного Гоблина на фильм «Шрек-2». Я, кстати, посмотрел его давным-давно, спасибо кинотеатру «Омут», в пиратской, понятно, копии. Соответственно, «правильный перевод», который, «только в кино» обошёл меня стороной, поэтому с «принцем Чармингом» я не встретился, зато осёл стал донкеем (a donkey). В общем, почитайте, забавно.

Оставить комментарий

Предсказания

Дочитал книгу Линуса Торвальдса «Just for fun». Помимо всего остального, заинтересовала глава где Линус пытается заглянуть в будущее и ответить на вопрос каким будет мир компьютеров через несколько лет.

Меня этот вопрос интересует в плане борьбы между КПК (PDA) и сотовыми телефонами. Кто победит — КПК с возможностями сотовых телефонов или сотовые телефоны с возможностями КПК (т. н. «смартфоны»)? Для меня это прежде всего борьба форм-факторов: что важнее — большой экран или маленькие размеры и где проходит оптимум? Мне выход видится в появлении устройств, идущих третьим путём. А именно…

Про проекторы все слышали? Отлично! А про проекционную клавиатуру? Мне всегда казалось, что её должны взять на вооружение не только производители КПК, но, и даже прежде всего, производители смартфонов. Причём вкупе с проектором. То есть. В штатном режиме происходит всё как обычно — владелец смартфона тыкает в свою 15-ти или около того кнопочную клавиатуру и вглядывается в небольшой экранчик. Подходит к столу, ставит телефон на стол, на столе появляется проекционная клавиатура, на стене — экран. Наверное, понадобится дополнительное питание, но это не проблема — более мощный и крупный аккумулятор в сумке или сеть. Ноутбук в кармане. Единственное неудобство — нужна поверхность для проецирования.

На странице с концепт-устройствами от NEC есть, например, «P-ISM» — модель такого проектора с проекционной клавиатурой. Кстати, там же (помимо других интересных вещей), есть и ленточный сотовый телефон, что, в принципе, может привести к появлению КПК другого типа — ноутбук в рулоне. Непринуждённо вынимаем из кармана аккуратно сложенный «носовой платок», разворачиваем и… начинает стучать по чувствительному экрану ноутбука-«носового платка».

Есть ещё вариант проецирования голограмм в воздух как это делается во многих фантастических фильмах. Выход хороший, но в практическом плане разработчикам нас порадовать нечем — все подобные проекторы в лучшем случае проецируют изображение на специальный пар.

Более всего привлекателен вариант с проецированием изображения прямо в мозг. Насколько я знаю из Discovery Channel, есть разработки позволяющие пускать очень плохие изображения по зрительному нерву — единственное что удалось пока сделать в этой области, но это-то как раз не очень интересно. То же самое, но куда качественнее, можно сделать при помощи специальных очков — ещё один вариант, который разработчики, на мой взгляд, незаслуженно забыли. Кажется, никто не пытается сделать эти устройства меньше и удобнее.

Вообще-то минитюаризация интересна больше японцам, а не американцам и европейцам. Япония, как известно, не очень-то охотно делится своими новинками — на их внутреннем рынке продаются действительно удивительные устройства, возможно, и такие очки лежат в каком-нибудь японском магазинчике.

Так вот — интересно проецирование не на сетчатку и не в зрительный нерв, а создание экрана за зоной видимого. Что вы скажете о новом центре обработки информации, который будет заниматься обменом информацией с различных устройств? Думаю, ничего невозможного в этом нет — эволюция на протяжении всего времени постоянно создавала в мозге участки для обработки различной информации — то же зрение появилось далеко не сразу, а уж электрическое «зрение» у рыб, тепловое у змей, да и центр речи у человека. Мозг — гибкая штука и внедрение туда ещё одного центра обработки чего либо не кажется мне непосильной задачей.

Другое дело, что мы знаем о мозге так мало, что вряд ли сможем создать сейчас что-то подобное сознательно. Разве что, условно говоря, воткнуть провода в какой-то участок и надеяться, что мозг научится интерпретировать сигналы с них и создаст такой центр самостоятельно. Но это, по всей видимости, дело куда более отдалённого будущего, чем ленточные ноутбуки и ноутбуки-телефоны. Впрочем, поживём — увидим.

Оставить комментарий

Ба-бах!

Казань. День города (6.55КиБ)

30 августа в Казани отмечают день города и республики. Кстати, Казани в этом году исполняется 999 лет, так что праздник в этом году — генеральная репетиция тысячелетия Казани, празнование которого обещают провести с грандиознейшим размахом.

В этом году в праздневствах я не поучаствовал. Толпа пьяного народу — неотъемлемая часть любого городского праздника в России — не мой идеал компании. Мы с ████ прошлись 30-го по городу и умудрились (так совпало) посмотреть салют с наивысшей точки 55-тиметрового колеса обозрения — аттракциона, который недавно открылся в новом парке «Шурале». Снимок сделан при помощи камеры в моей Nokia 6230 как раз в момент о котором я рассказываю.

На нём мало что видно — всё-таки камеры на телефоне пока по своей практичности вещь довольно бесполезная, пришлось загубить снимок Photoshop’ом, чтобы убрать шумы.

Оставить комментарий

С учебным годом!

Рискуя насыпать соль на раны, поздравляю всех учащихся и тех, кто их учит с началом нового учебного года. Но раз этот день, по недоразумению, считается праздником, я всех, кого он касается, с ним поздравляю.

Оставить комментарий

Стих

Когда-то я это уже цитировал, но не могу удержать, чтобы не процитировать ещё раз. Единственный удачный стёб над лирикой, который я когда-либо видел.

Все было: лужа на крыльце,
Знакомый профиль мусорного бака
И у забора писала собака
С задумчивой улыбкой на лице.

Оставить комментарий

Устранение потерь при кодировании почтовых аттачей в base64

Как известно, когда-то электронные письма предназначались исключительно для обмена текстом. Соотвественно и все протоколы тогда разрабатывались в расчёте на это. Когда появилась потребность передавать файлы, поступили очень просто — файлы специальным образом преобразовывались в текст и этот текст включался в тело письма. Конечно, такое преобразование не проходило даром — объём файла сильно увеличивался от этого пребразования, поскольку «текст» — это куда меньшее количество символов, чем бинарные данные, да и речь в те времена шла только об английском тексте. Со временем, это вошло в стандарт и почтовые программы научились самостоятельно вставлять в текст файлы, преобразуя их различными методами.

Прошло время, текст в электронных письмах давно уже не только английский, а стандарты кодирования текстовых файлов до сих пор используют только латинские буквы (плюс цифры и некоторые символы, такие как плюс, миную, слеш и так далее). Мне пришло в голову — а что если попробовать кодировать файлы всем полем допустимых символов. Сейчас, когда появились письма на UTF-8, допустимыми символами являются все, за исключением символов с кодами 0x00 (из-за того, что почти всё ПО написано на C/C++, где этот символ является признаком конца строки), 0x0A и 0x0D (это символы перевода строки, не хотелось бы, чтобы какой-нибудь умный клиент в бинарном файле добавил к 0x0D символ 0x0A — по стандарту в письмах перевод строки обозначается парой этих символов и, обычно, если встречается только один из них, почтовые клиенты или MTA добавляют и второй).

Из всех вариантов кодирования, а их три (Base64, UUencode и quoted-printable) для моих целей подошёл только quoted-printable. Идея его очень проста — все недопустимые символы (и «равно») преобразуются в последовательность из трёх символов: символ «равно» и шестнадцатиричный код символа. Поскольку «допустимых» символов традиционно очень мало, то метод не слишком экономичен.

Я же задался целью проверить, что же будет, если попробовать передать файл, где поле допустимых символов расширено до максимума. Сразу скажу — эксперимент удался. Можено эксперементально внедрять новый формат кодирования писем. Назовём его Bolk Quoted-Printable. Ладно, ладно, будем скромнее. 8bit Quoted-Printable.

Я написал небольшую программу на PHP, которая в качестве параметра использует имя файла, который нужно закодировать, а на выход выдаёт этот файл в формате понятном почтовому клиенту. Таким образом, если её запустить как «php -q 8qp.php somegif.gif > somename.eml» и открыть получившийся файл вашим почтовым клиентом, внутри вы должны увидеть свою картинку.

<?php
    // Example 1. 8qp.php
    // Written by Evgeny Stepanischev aka BOLK
    $bound = 'BOLKNOTE.RU';

    $mime = getimagesize($argv[1]);
    $mime = $mime['mime'];

    $str = file_get_contents($argv[1]);
    $len = filesize($argv[1]);

    echo <<<HEADER
Content-Type: multipart/mixed;
        boundary="----{$bound}"

------{$bound}
Content-Type: $mime; name="{$argv[1]}"
Content-Disposition: attachment; filename="{$argv[1]}"
Content-Transfer-Encoding: quoted-printable


HEADER;

    $np = array (0, 10, 13, 61);

    for ($i = 0; $i<$len; $i++)
    {
        $code = ord($str{$i});

        echo in_array($code, $np) ?
        '='.strtoupper(str_pad(dechex($code), 2, '0', STR_PAD_LEFT)):
        $str{$i};
    }

    echo "rn------{$bound}--";

Для эксперимента я выбрал наугад две картинки. JPEG и GIF. И вот что получилось в итоге. «TheBAT!» — это наименование моего почтового клиента.

Случайный GIF: исходный размер — 33590, мой quoted-printable — 36300, base64 encode — 46034, TheBAT! UUencode — 47052, TheBAT! Quoted-printable — 80576.

Случайный JPEG: исходный размер — 28144, мой quoted-printable — 29656, base64 encode — 38570, TheBAT! UUencode — 39429, TheBAT! Quoted-printable — 65663.

В случае QP-кодирования моим методом, размер файла, как видно по результатам двух экспериментов, увеличился совсем ненамного — 4-8%. Если для теста взять текстовый файл, то прирост будет едва заметен, если вообще будет, надо только переводы строки для текстовых файлов не кодировать, а пускать как есть.

Эксперименты на первом же попавшемся Sendmail показали, что, во-первых, типичный MX стремиться разбить строку по размеру своего буфера (у моей жертвы этот размер оказался равен приблизительно двум килобайтам) — но это легко устранимо, достаточно делать это за него и, что более неприятно, «умница» sendmail перекодирует письмо так как считает нужным — в традиционный quoted-printable.

Последняя беда поставила меня в тупик. Правда, ненадолго. Вспомнив, что большинство клиентов умеют открывать письма в формате EML я решил пойти на хитрость — прикрепить моё письмо как аттачмент другого, замаскировав моё письмо под обычный текст — Sendmail вряд ли проверяет аттачи глубже одного вхождения. А чтобы письмо максимально адекватно воспринималось почтовым клиентом, я дал ему disposition inline и убрал из него все служебные поля. Попробовал отправить — получилось. В TheBat видно только лишнее пустое поле — беда небольшая.

<?php
    // Example 2. 8qp_next.php
    // Written by Evgeny Stepanischev aka BOLK

    $bound  = '3D1E1C92aaBF00D';
    $bound2 = '3D1E1C92xxBF00D';

    $mime = getimagesize($argv[1]);
    $mime = $mime['mime'];

    $str = file_get_contents($argv[1]);
    $len = filesize($argv[1]);

    echo <<<HEADER
From: <mailbox@sample.com>
To: mailbox@sample.com
From: mailbox@sample.com
Content-Type: multipart/mixed;
 boundary="----------{$bound2}"

------------{$bound2}
Content-Type: message/rfc822; name="1.eml"; charset=utf-8
Content-Disposition: inline; name="1.eml"
Content-Transfer-Encoding: 8bit

Content-Transfer-Encoding: 8bit
Content-Type: multipart/mixed;
        boundary="----{$bound}"

------{$bound}
Content-Type: $mime; name="{$argv[1]}"; charset=utf-8
Content-Disposition: attachment; filename="{$argv[1]}"
Content-Transfer-Encoding: quoted-printable


HEADER;

    $np = array (0, 10, 13, 61);

    for ($i = 0; $i<$len; $i++)
    {
        $code = ord($str{$i});

        echo in_array($code, $np) ?
        '='.strtoupper(str_pad(dechex($code), 2, '0', STR_PAD_LEFT)):
        $str{$i};

        if ($i && ($i % 512) == 0) echo "=rn";
    }

    echo "rn------{$bound}--",
    "rn------------{$bound2}--";

Полный размер письма после такой двойной «упаковки» увеличивается незначительно. Кстати говоря, Opera 7.0 с таким письмом не справилась. Возможно, в силу старости — текущая версия этого пакета — 7.61b. Для интереса я отправил письмо на мои ящики на серверах Mail.ru и Gmail.com. Оба сервера вполне достойно справились с задачей, единственно, что Gmail не принимал письмо, пока я не указал charset как UTF-8.

Оставить комментарий

Замкнутый круг

Статья «Обзор рынка интернет-провайдеров РТ». От комментариев каждого из экспертов, в конечном итоге, осталась одна строчка. В том числе и от моего осталось следующее:

Получается замкнутый круг — объём внутреннего трафика невелик, поскольку очень мало интересных ресурсов; а ресурсов не хватает, потому что потенциальная аудитория очень мала.

Оставить комментарий

Мобильный SSH

Кстати, занимаясь поиском интересных мидлетов, наткнулся на Floyd Telnet & SSH midlet и muTelnet midlet. Забавная штука. В принципе, через это можно выполнить какие-нибудь несложные действия — перезагрузить машину, обновить Apache и т. п.

Незамениная штука для приходящих администраторов. Впрочем, с PDA это делать, конечно, куда проще и удобнее, чем с сотового телефона.

Оставить комментарий

Алисы в закулисье

Рекомендую взглянуть на работку «Закулисье» с сайта SkillRu. Очень хорошая игра на контрастах заставляется забыть, что работа не постановочная — где-то балерины действительно проходят на сцену по таким коридорам.

Оставить комментарий

Nokia 6230

Серебристый мобильный телефон Nokia с экраном, на котором изображены две руки, готовые к рукопожатию, и логотип NOKIA под ними.
Nokia 6230

У меня скоро день рождения. Это уже становится моей доброй традицией — дарить себе на день рождения сотовые телефоны. В прошлом году это был Siemens S55. В этом году я раскошелился на Nokia 6230. Основные характеристики:

  • Стандарт: GSM 900/1800/1900
  • Дисплей: цветной, 128x128, TFT 65535 цветов
  • Аккумулятор: Li-Ion 850 mAh, BL-5C.
  • Максимальное время разговора: 3ч
  • Максимальное время ожидания: 300ч
  • Размеры: 103x44x20
  • Вес: 97 грамм
  • Java (MIDP2), на сайтах написано, что максимальный размер приложения — 128Кб, но у меня работают и по 230Кб.
  • Органайзер: часы, будильник, калькулятор, секундомер, календарь и т. п.
  • Мультимедиа: FM-радио (stereo), MP3/AAC-проигрыватель, проигрыватель видео 3gp, камера с возможностью
    записи видео.
  • Интернет: GPRS, WAP 2.0 (xHTML)
  • Графические форматы: JPEG, GIF, WBMP, PNG.
  • Передача данных: SMS, MMS, IrDA, Bluetooth, встроенный модем, HSCSD, EDGE (4+1, 3+2),
    скорость до 238,6Кб/сек, email, SMS-чат, Wireless Village чат.
  • Звук: MIDI и SP-MIDI, 30(?) голосов.
  • Память: 8Мб в телефоне, 32Мб на MutiMedia Card (MMC).
  • И так далее.

Общие ощущения. Nokia, по-видимому, это — классика. И как всякая классика к новому тянется неохотно. В Siemens многое очень хорошо продумано, в Nokia — многих чисто интерфейсных вещей нехватает или они недоработаны. Простой пример: в Siemens, если в SMS содержится номер телефона я могу его очень просто выделить прямо во время прочтения и позвонить по нему.

Есть и очень неприятные сюрпризы. Например, в Siemens нет ограничений на размер мидлета. В Nokia — есть. Думаю, у этой модели он составляет 256Кб. Оказалось ещё, что в Siemens имеется своё нестандартное J2ME API для доступа к файловой системе. Что позволяет тому же Microreader читать книги прямо с диска, а не из внутренностей мидлета. В мире J2ME разработано File Connect API (кажется так). Но это относительно новый стандарт и моя модель его не поддерживает.

Вообще, телефон крайне простой, чувствуется забота о пользователе, которую можно выразить словами «как бы пользователь чего не натворил». Меня это радует мало. Но! При всех недостатках, я получил: хороший телефон, плохенький, но фотоаппарат, FM-радио и MP3-плеер. Последняя возможность оказалась решающим аргументом в пользу покупки — всегда хотел иметь MP3-плеер. Я даже раскошелился на 256Mb MMC. Я покупал Samsung с гарантией в 3 года, она мне обошлась в 1067 рублей. Если интересно, покупал я в компании «Теко компьютер» на ул. Космонавтов, 28.

Кстати говоря, есть такая программа как Nokia Multimedia Converter. Ссылку давать не буду — в интернете ищется очень легко. Она позволяет сконвертировать видеофайл в формат 3gp, принятый в этом телефоне. Известный фильм «Герой» сконвертировался в 58Мб видео. Т. е. на своей карточке я могу носить небольшую фильмотеку.

Как водится, есть недостаток: встроенный видеоплеер не умеет перематывать или хотя бы проматывать фильмы. Мне кажется, что сам формат не позволяет производить перемотку — например, в нём могут отсутствовать опорные кадры, но промотку-то можно было сделать.

По поводу моего любимейшего занятия — чтения книг, могу сказать следующее: размер пикселя и разрешающая способность экрана, а так же чёткость — выше. В этом смысле читать книге удобнее. Недостаток: теоретически ограниченный максимальный размер мидлета (а книги можно загружать только упаковывая книгу в мидлет), наверное помешает читать большие книги — придётся разбивать её на несколько частей. Но недостаток не слишком серьёзный: во-первых, книги пакуются ZIPом внутрь мидлета, во-вторых, мидлетов (и книг) может быть много, так как памяти приличное количество.

Ещё из приятного — скорость загрузки мидлетов (а значит и книг) значительно выше. Значительно. Кстати, для чтения книг на Nokia рекомендую FreeBookReader от Tequilacat. Из всех, что я попробовал (штук 5-6) этот мне понравится больше всех. Продуманнее, больше возможностей, активно развивается. Будете ставить — обязательно скачайте shell. Он позволяет подготавливать текст книги без упаковки вручную.

Оставить комментарий

Шифрованные SMS

Какое-то время назад я рассуждал о том, что неплохо было бы написать Java-приложение для сотовых телефонов, позволяющее обмениваться шифрованными SMS. Во многих телефонах есть API для работы с SMS, значит и проблем особых возникнуть не должно. Оказывается, такое приложение есть — SecureSMS.

When installed on 2 phones, it allows you to encrypt and send (and then receive and decrypt) SMS messages so that they are not readable by any party in transit, including the GSM operator. The SecureMessenger consists of common API, two implementations of the API so far (for Siemens M50 and SL45i), common UI and localization utility (currently only English-language resources file exists, easily translatable to any language)

В данный момент поддерживаются Siemens SL45i/M50/S55 (и, наверное, более новые) и Nokia 60-й серии.

Оставить комментарий

Патч к IMP/Horde

Если при работе с webmail IMP/Horde у вас выдаются ошибки в функции imap_fetchbody, попробуйте применить мой патч. Порядок применения:

  • Разместить в папке lib, с названием, например, bolkpatch.php.
  • В файлах lib/IMP.php и view.php после блока строк require_once надо ставить строку
    require_once IMP_BASE . ’/lib/bolkpatch.php’;
  • Заменить в этих двух файлах все вызовы imap_fetchbody на imap_fetchbody2.
  • Установить модуль PEAR Mail_Mime (pear install Mail_Mime)
// IMP patch. Written by Evgeny Stepanischev
function imap_fetchbody2(&$imap_stream, $msg_number, $part_number, $options = NULL)
{
    $params = array(&$imap_stream, &$msg_number, &$part_number);
    if ($options !== NULL)
    $params[] = &$options;

    $str = @call_user_func_array('imap_fetchbody', $params);

    if ($str == '' || $str === FALSE)
    {
        array_splice($params, 2, 1);

        $mail = @call_user_func_array('imap_fetchheader', $params).
                @call_user_func_array('imap_body', $params);

        require_once 'Mail/mimeDecode.php';

        $decoder =& new Mail_mimeDecode($mail);
        $structure = (array) $decoder->decode(array('include_bodies' => true));

        return isset($structure['parts'][$part_number-1]) ?
                $structure['parts'][$part_number-1]->body :
                $structure['body'];
    }

    return $str;
}

Оставить комментарий

Блогами забытый

Придумал новую фразу — «блогами забытый сайт». Смысл, кажется, очень легко просматривается.

Оставить комментарий

Держимордия

Держимордия (12.16КиБ)

Фото с сайта Regnum.ru. Грузинские компьютерщики развлекаются — принесли компьютеры, проекторы и по ночам пишут на российском посольстве различные надписи, отражающие их мнение о политике России в Грузии.

Оставить комментарий

Проблема с c-client

Bug #29783 IMAP module problem.

Хозяйке на заметку: если под Linux RedHat у вас не собрался PHP с IMAP c-client, соберите его с модулем OpenSSL (ключ -​-open-ssl). Должно помочь. Удивляет то обстоятельство, что разработчики PHP явно знают как о существовании проблемы, так и методе её решения. Почему бы не написать об этом хоть где-нибудь?

Оставить комментарий