2017-09-12

Файлы с фото: упорядочиваем имена

Недавно вернулся из поездки, притащил оттуда фотки аж на трёх фотоаппаратах. Так уж получилось: Honor 8 Pro хорошо умеет делать фотографии в условиях низкой освещенности и на него можно сделать селфи, Note 4 поражает четкостью и насыщенностью в нормальных условиях, но на него селфи не сделаешь (попала пыль в переднюю камеру), а Canon EOS 1100D и вовсе не телефон, а полноценная камера, хоть и старенькая, но как минимум с оптическим зумом.

Иногда в процессе съемки я делаю один и тот же снимок различными камерами, надеясь потом отобрать наиболее удачный. 

В итоге, скачанные c одной камеры файлы называются датой-временем, типа 20170830_121103.jpg, на другой - тоже самое, но с неотключаемым префиксом IMG_20170830_121103.jpg, а Canon и вовсе лепит снимки с номерами по возрастанию: IMG_5678.JPG. Как их теперь объединить в один упорядоченный по имени файловый массив, да еще и соблюсти хронологию?!... Ах да, дополнительая беда: перед съемкой я совершенно позабыл выставить на них одинаковое время... 

Ругать кроме себя некого, но можно все-таки попробовать разобраться. Мне помогла замечательная утилита exiftool из пакета libimage-exiftool-perl. Она умеет читать EXIF-информацию из файла (не только из картинок, кстати) и производить над ней несложные, но чертовски востребованные мной операции. Используем её, чтобы получить все файлы с именами типа 20170830_121103.jpg.

Итак, среди двух страниц разнообразных тегов нам нужен только CreateDate, его можно получить так:

$ exiftool -CreateDate IMG_5555.JPG
Create Date                     : 2017:09:03 15:20:01

Воспользуемся специальной опцией -d, чтобы преобразовать время как можно ближе к будущему имени файла:

$ exiftool -CreateDate -d "%Y%m%d_%H%M%S.jpg" IMG_5555.JPG 
Create Date                     : 20170903_152001.jpg

Разобьем строку на два поля по двоеточию, возьмем второе и срежем первый символ:

$ exiftool -CreateDate -d "%Y%m%d_%H%M%S.jpg" IMG_5555.JPG | awk -F':' '{print substr($2,2)}'
20170903_152001.jpg


Теперь, если переименовать все файлы по внутреннему тегу, получим единообразие, но из-за расходящегося времени снимки могут потерять хронологию и смотреть (а тем более комментировать) такое слайдшоу будет немного дискомфортно.

Не отчаиваемся! Выбираем одну из камер, которая будет "эталоном". Берем вторую, наблюдаем разницу во времени, хоть с точностью до секунды (но обычно это минуты или даже часы, из-за разных таймзон). Пусть это будет 24 минуты, например. 

Используем опцию exiftool -globalTimeShift, указывая аргументом ей это самое смещение (знак впереди указывает в каком направлении надо сдвинуть временную метку). И натравливаем нижеприводимый скрипт на файлы этой камеры:

#!/bin/bash

for fname in *.JPG; do
  newname=$(exiftool -CreateDate -globalTimeShift "+0:0:0 0:24:0" -d "%Y%m%d_%H%M%S.jpg" $fname | awk -F':' '{print substr($2,2)}')
  mv "$fname" "$newname"
done

Если камер несколько, вычисляем для каждой из них свое смещение от "эталонной", меняем в скрипте зачение аргумента -globalTimeShift и натравливаем на файлы с фотографиями.

Ура, готово! Теперь все файлы называются единообразно, упорядочены по времени, и только внутри у них в EXIF по-прежнему сохранено исходное значение.

В моем случае это не важно, но если нужно, то всемогущий exiftool может и это исправить тоже. 

man exiftool ;)


2017-03-27

Мастерхост и Почта(4)

Хочу наконец-то закончить начатое почти шесть лет назад повествование о суперпочте от masterhost.

Где-то в прошлом году я вдруг заметил, что одна из пересылок, созданная в этой чудо-почте, работать перестала. Полез проверять и понял, что часть настроек была просто... удалена. Никогда такого в masterhost у меня не случалось - но, как говорится, всё бывает в первый раз.

Времени было, как обычно, в обрез - в поддержку жаловаться не стал, ограничился восстановлением именно этой погибшей пересылки и уже собирался захлопнуть панель управления, как внезапно мой взгляд упал на строку с описанием.... (барабанный бой, трубы, хор "алилуйя").... старой почты!

Тот самый простой и понятный веб-интерфейс юниксовой почты, абсолютно "легкий" и лаконичный, без всяких выхухолей типа "почтовый ящик Места". И, по всей видимости, снова бесплатный (включенный в основной тариф).

Счастью моему не было предела. Еще бы - моя старая милая почта, она снова на месте, она работает! Старые административные пароли - подошли! Я завязал себе узелок на память, чтобы переехать обратно, когда будет побольше времени.

Очнулся я где-то месяца через три, получив от мастерхоста письмо примерно такого содержания: 

Уважаемый клиент!

Сообщаем Вам о том, что в связи с изменениями ценовой политики Microsoft, стоимость
тарифного плана "МХ-1" для электронной почты на базе MS Exchange, которым Вы сейчас
пользуетесь, с 1 апреля 2017 года будет составлять 100 рублей в месяц.

Мы приносим извинения за неудобства, которые может принести Вам эта вынужденная мера.


Платить за полную фигню не 50, а уже 100 рублей в месяц было вдвойне обидно. Я засучил рукава, скопирвоал название всех пересылок (думаете, там есть команда экспорта? ха-ха), вбил их в старую почту и, наконец, удалил ненавистную услугу со своей панели, без колебаний и сожалений.

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

Меж тем, мне стали приходить письма из тех пересылок, к которым в "новой" почте не было создано почтовых ящиков. И не спам какой-то, а от "живых" людей, вполне себе требующие ответа.

Жизнь-то налаживается!

А, да! И запомните, Microsoft до добра не доведет! 

(все товарные знаки принадлежат их правообладателям, включая, но не ограничиваясь, и т.д., и т.п ;)

2012-04-18

Случайно зашел в новостной раздел debian.org и узнал, что 15 апреля лидером снова выбрали Stefano Zacchiroli, и он поставил своеобразный рекорд, став первым лидером с непрерывным трехлетним стажем. Правда, он тут же оговорился, что этот год - последний, и, в частности, добавил:

I'm flattered by the trust that Debian members have put in me in the past, and now renewed with this election. I've a lot of admiration for democratic processes, and I couldn't be happier to have been chosen to serve as DPL for another year. I suspect my agenda for the year will be quite packed and, in parallel, I'll do my best to make myself replaceable.

В моем вольном переводе:

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

По-моему, слова по-настоящему мудрого лидера, особенно про заменимость...

Отсюда

2011-10-04

tail -F

Кто бы мог подумать, что у меня будут претензии к coreutils: а именно, к небезызвестной tail.

Суть проблемы в следующем - в процессе перемещения нашей системы с etch на squeeze (или, с 4 на 6 версию Debian), был получен непонятный глюк, связанный с потерей данных при ротейте файлов. Оказалось, что дело в tail! Схема использования выглядит так:

1. Есть основная программа, которая непрерывно пишет в некий file, в ней есть обработчик сигнала (допустим, USR1).
2. Есть tail, который запущен в режиме следования за именем файла:
tail --follow=name --retry file.

И есть простейший скрипт ротейта, который работает в два приема:

1. Переименовывает файл (допустим, в file.прошло_секунд_с_1970-01-01). Сам файл, естественно, продолжает увеличиваться и после переименовывания.
2. Посылает основной программе сигнал USR1, который заставляет ее закрыть текущий дескриптор и открыть по-новой файл file.

При таких обстоятельствах, tail в режиме следования за именем файла бросает следить за старым и пересаживается на новый. Таким образом, по идее, обеспечивается непрерывность потока данных во время ротейтов.

Так вот - поведение "старого" tail-а 5.95 из etch однозначно - он будет "сосать" данные из  переименованного файла до тех пор, пока снова не появится файл со старым именем - и лишь тогда переключится на него. А вот "новый" tail 8.5 (а по факту, его поведение изменилось уже в версиях 6.x), как только файл переименован, бросает его и тупо ждет появления файла со старым именем. В итоге, данные, которые успели записаться в "старый" файл до момента обработки основной программой сигнала USR1, игнорируются tail-ом, образуя некую "дыру" в потоке - обычно пара секунд данных таким образом безвозвратно теряется.

Первым делом хочется увеличить время сна tail-а, чтобы переоткрывание все-таки успело произойти. Но потом понимаешь, что это обычный sleep, и вероятность, что tail проснется в неподходящий момент, сохраняется. 

Именно поэтому пришлось делать специальный пакет со "старым" tail-ом - бы было чуть больше времени, сделал бы значение ключа --follow=descritpor_than_name или что-то в этом духе. 

2011-03-13

Как перекодировать видео для Caanoo?

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

Надо сказать, что ответ пришел довольно быстро - скрипт tablet-encode из статьи про mediaserv. Напомню, это - обычный скрипт на старом добром Perl, который вычисляет правильную командную строку для утилиты mencoder, входящей в состав MPlayer. Получившийся в итоге файл можно проиграть на устройстве Nokia/Maemo, но весь фокус в том, что и для Caanoo это вполне приемлемо.

Проверьте, что необходимые пакеты установлены в вашем Debian/Ubuntu:

apt-get install perl mplayer mencoder

Скачайте скрипт tablet-encoder и откройте его любимым текстовым редактором. В самом начале вы увидите определения переменных, исправьте следующее:

my $idealRatio    = 320/240; 
my $defaultPreset = 'caanoo';

А также добавьте одну строчку в конец хэш-массива %PRESET, получится примерно так:


%PRESET = (
    smallest => { abitrate => 32, vbitrate => 80, width => 240, fps => 15 },
    small    => { abitrate => 96, vbitrate => 150, width => 240, fps => 15 },
    average  => { abitrate => 128, vbitrate => 350, width => 320 },
    good     => { abitrate => 160, vbitrate => 600, width => 352 },
    best     => { abitrate => 192, vbitrate => 768, width => 400, height => 240 },
    mplayer  => { abitrate => 192, vbitrate => 1200, width => 400, height => 240 },
    n900     => { abitrate => 192, vbitrate => 2000, width => 800, height => 480 },
    caanoo   => { abitrate => 128, vbitrate => 350, width => 600, height => 375 },
);

Если по каким-то причинам боитесь редактировать скрипт, можно скачать уже исправленный.

Ну а дальше, можно использовать его так:

./tablet-encode -7 --original-aspect --hq --preset=caanoo source.avi destination.avi

Всегда указывайте "-7" - пусть вас не смущает, что это опция для Nokia n770 - у них с Caanoo общая проблема, которая решается подстановкой нужного FOURCC. 

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

Upd: теперь Caanoo можно купить и в России... 



2011-03-03

Caanoo приехал

Несмотря на китайский новый год и сезонные процессы на нашей российской почте, я таки получил свою игровую приставку Caanoo и даже немного освоился с ней, приобретя некий опыт. Именно им я и хочу поделиться - возможно, это пригодится тем, кто первый раз берет ее в руки.

Итак, смотрим на содержимое коробки. Вот минимальный комплект:
  • собственно, сам девайс с абсолютно незаряженным аккумулятором;
  • запасной стилус;
  • петелька для ношения на руке;
  • шнурок для связи с PC и одновременной зарядки от USB (специального сетевого адаптера в комплекте нет);
  • книжечка "быстрый старт" с абсолютным минимумом полезной информации (не ищите русский язык, скажите спасибо за english ;)
  • диск с руководством пользователя - он содержит только два файла (на английском и на корейском, ни байтом больше).
Устройство представляет собой маленькую машинку, работающую под управлению Linux (о технических характеристиках я писал в предыдущем посте). Но для обычного человека - это просто игровая консоль, сделанная, кстати вполне добротно.

Самое время заметить, что в устройстве нет ни одной встроенной игры - их придется скачать в интернете и установить на SD-карту. Самой карты в комплекте, кстати, тоже нет. Подойдет любая полноразмерная - поддерживаются SD и SHDC до 32Gb включительно. 

Карту перед использованием форматировать необязательно (поддерживается только FAT и FAT32), но желательно. Как только вы установите карточку в Caanoo и включите ее, она запишет в корень служебные файлы NED_LIC.SYS и NED_SID.SYS, а также, по мере того, как вы будете перебирать пункты основного меню, создаст там каталоги apps, game, music, photo, movie и ebook.

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



Если соединение установилось, на экране будет отображаться такая картинка:     



Логично предположить, что вы купили эту консоль для того, чтобы играть. Что ж, по обилию игр Caanoo далеко не самая первая - но не спешите огорчаться! Уж где-где, а в области эмуляторов она может похвастаться довольно внушительным набором: а это, в свою очередь, значит, что на ней можно играть в игры, написанные для других игровых консолей и приставок - от старого доброго ZX Spectrum до SEGA Mega Drive. 

Итак, я обнаружил два основных абсолютно легальных источника приложений:
  1. Родной сайт Caanoo и Wiz - fungp.com. Только там можно скачивать платные приложения, зарегистрировать свою консоль и общаться в форуме с техподдержкой;
  2. Сайт openhandhelds.com - там можно скачать исключительно бесплатные игры и  программы - в том числе и для Caanoo. Может показаться странным, но там их гораздо больше, чем на официальном сайте.
Куда же податься?

Я считаю, что без FunGP вполне можно обойтись. Тем более, что сайт этот поистине уникален своим подходом к интерфейсу с пользователем. Перед его посещением усвойте простую истину: представления сотрудников GPH об эргономике в целом и здравом смысле в частности не совпадают с общепринятыми.

Итак, идем на fungp.com и создаем свой аккаунт. Это сравнительно легко, но имейте ввиду - на страницу с регистрацией мы попадаем по протоколу https через порт 442, а не через общепринятый 443 (будьте внимательны, если используете proxy). Ищите "SIGN UP" и смело нажимайте - должно появиться Membership Agreement, которое положено внимательно прочитать и согласиться при при помощи чекбокса "I accept the membership policy". На следующем экране вводим свою информацию, включая логин (нет различия между прописными и строчными буквами) и мыло. Последнее надо вводить аккуратно, потому что на него приходит письмо с активацией и если промахнуться - придется регистрироваться по-новой и выбирать другой логин - возможности изменить мыло до его подтверждения, увы, не предусмотрено.

Допустим, вы успешно зарегистрировали пользовательский аккаунт. Теперь можно скачать и установить программу PC Manager  на вашу Windows - поищите квадратный баннер на заглавной странице сайте, приблизительно такой:



Или скачайте по прямой ссылке (если она еще работает, конечно). После установки дистрибутива, он первым делом сам себя обновит - то есть, скачает и установит самого себя еще раз. Это нормально, не удивляйтесь.


После старта будет предложено ввести логин и пароль от аккаунта FunGP, который мы создали   на предыдущих шагах. Если вы подключите консоль первый раз, программа может поинтересоваться, надо ли зарегистрировать это чудесное оборудование. Соглашаться или нет - решайте сами, но если согласитесь, в аккаунте появится запись, примерно такого вида:

Можно ли воспользоваться гарантией в России и как это делается - понятия не имею, но если (тьфу-тьфу-тьфу) появится опыт - обязательно поделюсь им ;)

Вернемся к программе PC Manager. К счастью, она не пытается управлять вашим компьютером (как это может показаться из названия), напротив - она управляет приложениями для Caanoo. Под приложением понимается исключительно целый подкаталог (он же фолдер, папка - как вам привычнее).

Для работы с программой в настройках потребуется жестко задать каталог, куда вы будете помещать распакованные (готовые для перемещению на Caanoo) программы:



Тут мы видим первую крупную логическую несостыковку: по каким бы каталогам вы не перемещались в дереве файловой системы (слева вверху), файлов вы не увидите. На панели справа можно увидеть хоть какую-то информацию только если будут соблюдены два условия 1) вы зайдете в этот самый "Downloaded contents folder" из настроек выше 2) в этом каталоге будут существовать подкаталоги с программами для Caanoo. Вот пример - скачанные с сайта FunGP программы успешно распакованы в папку C:\GP2X, и именно она выбрана слева:


Далее, надо подключить консоль в режиме USB-накопителя и нажать на кнопку "Search device". В случае успеха, окно расширится еще одной секцией, где можно увидеть - опять-таки, не файлы, а подкаталоги! - на вашем Caanoo. Установите курсор на нужный каталог внизу (например, games), выберите каталоги для закачки при помощи чекбоксов вверху и нажмите на красивую полупрозрачную оранжевую кнопку "Apps transfer":



Начнется пофайловое копирование, будьте терпеливы! ;)


Вот, собственно, и всё - дальше обращаться с консолью надо также, как и с любой флешкой или иным USB-MassStorage  устройством - сначала "безопасно извлечь" и только потом отключать кабель USB.

Если потребуется удалить подкаталоги или программы с Caanoo - это можно сделать также через нижнее окно. Удаление также происходит пофайлово, но уже без красивых диалогов и даже без прогресс-бара. Программа только задумается на 15-20 секунд, надо просто подождать ;)

И по поводу иероглифа на кнопке в окошке - да, привыкайте. Корейский учить, к счастью, не придется, но подобные "уши" постоянно нет-нет, да напомнят нам о стране-производителе этой машинки ;)

Но вернемся к сайту FunGP - а точнее к тому, как с него качать игры и программы. Для этого надо ткнуть в линк App Store:



Попробуем разобраться, что к чему. Звездочки - народный рейтинг голосования, причем они отражают действительно реальное положение вещей. Далее - надпись Free - означает, что программу можно получить бесплатно, в противном случае что-то типа 5000G или 3000G - это так называемые G-поинты, которые можно купить за деньги, из расчета приблизительно 1000G = 1 USD. Правда, покупать их надо на сайтах-партнерах, а на FunGP - исключительно регистрировать.

И, наконец, самое главное - если название игры заканичается на _C - например, JumpToTheMoon_C, то это игра для Caanoo! Но если на конце мы видим _W, то это - игра для Wiz - консоль-предшественница Caanoo. И поскольку прямой совместимости нет, не тратьте время зря - скачанные игры для Wiz не будут запускаться на Caanoo.

Самое время выбрать игру и нажать на кнопку Purcashe. Можно, конечно, для начала аккуратно собрать их в корзинку (Add to cart), но программ на самом деле не настолько много - запутаться сложно. Да и удалить из этой корзины ничего нельзя, так что при неумелом использовании она через некоторое время превратится к копию каталога приложений ;)

Откроется новое окно:



Смело нажимайте "Buy now" - никаких уловок, платить не придется. После появления этого окна:


...игра считается купленной. Осталось дело за малым - скачать ее на наш PC.

Вот тут опять мы сталкиваемся с экзотикой. Дело в том, что скачиванием занимается не непосредственно браузер, а специальный Java-апплет, поэтому браузер должен уметь запускать Java - это непременное условие.

Теперь надо найти ссылку для скачивания. Для этого идем в список скачанного. Это можно сделать через пункт Game Purcashe history, или через бокс "My Apps", если он показывается слева - жмите на плюсик или на слово "In Box" (судя по всему, они еще не скоро что-то изменят в своем веб-интерфейсе ;)



Нажимайте кнопку Download - откроется всплывающее окно и запустится апплет (а если не запустится - будет, по крайней мере, линк - откуда можно скачать Java для вашего браузера).  Далее надо последовательно выполнить следующее:

1. Разрешить апплету хозяйничать на вашем HDD. Я это сделал и вроде бы ничего страшного не случилось:



2. Дожидаемся полной загрузки апплета (курсор ожидания во всплывшем окне заменяется на стандартный).


3. Жмем "Change folder", указываем каталог на жестком диске для скачивания (как правило, все тот же C:\GP2X), нажимаем ОК - диалог выбора каталога закрывается.

4. Нажимаем на кнопке OK со стрелочкой направа (ввиде знака больше), под полосой загрузки - она может и не отобразится толком, но все равно - мстительно покликайте туда мышкой (на всякий случай несколько раз) и идите пить чай. Это надолго.

После скачивания, игру можно установить при помощи PC Manager, как это было описано выше.  

продолжение обязательно следует

2011-02-11

Мастерхост и Почта(3)

Сегодня прочел в твиттере мастерхоста:

Ван нужна "бесплатная" почта? Вам в Gmail или к другим любопытствующим перлюстраторам. У нас другая бизнес-модель, мы честно продаем услуги.

Я уже представил себе, как офигенный штат специально нанятых сотрудников Gmail с живым интересом читает мои письма. Точно так же ясно я вижу сотрудника ФСБ, приходящего в Masterhost с требованием обеспечить рабочее место для выборочного анализа почтовых сообщений.

А резюме такое: если кто-то кричит, что он честный, возникает вопрос: а зачем он это делает? Его что, кто-то обвиняет в нечестности? Или проблема в другом?...

2011-01-26

Мастерхост и Почта(2)

Итак, неотвратимо приближался день окончания авансовой оплаты моей площадки по тарифному плану "Эффективный". Воспользовавшись ценными советами читателей к моему предыдущему посту на эту тему, выяснил следующее:

Во-первых, Google Apps - это хорошо, но у меня много пересылок, а маршрутизировать почту на основе имени получателя бесплатная версия не умеет. Надо быть как минимум учебным заведением ;)

Во-вторых, действительно - можно сидеть на "старой" почте и устаревшем тарифе "Эффективный" до посинения. Правда, с нового года на него подняли ценник - 360 рублей в месяц, о чем радостно поведали в панели сообщений.

Тогда я решил попробовать эту самую новую "Почту"... результаты превзошли самые смелые ожидания. 

Охарактеризовать это можно одним емким словом - убожество

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

Итак, вы перешли по ссылке https://m.mastermail.ru/, и радостно наблюдаете экран логина. В подвальчике этого экрана сразу бросается в глаза упоминание о Microsoft:



Дурное предзнаменование не обмануло: меня ждала смена браузера (Chrome почему-то этому интерфейсу не понравился, пришлось туда идти через Firefox). Заходим и видим псевдоокошечный интерфейс внутри страницы (честно говоря, бывает и покруче, да и побыстрее), долго тупим - где же администрирование почтовых ящиков... После чтения документации, выясняется - надо справа тыкнуть в drop-down box "параметры", там будет "показать все параметры". После выбора загружается визуально совершенно другой экран, где я вижу потрясающую статистику:



(кто разъяснит мне фразу про то, что "в 49.5Гб нельзя отправлять почту" - а куда ее можно отправлять?!)

Ну вот, теперь надо найти слева другой дроп-даун бокс, и там сменить "Управление Самостоятельно" на "Моя организация". Попутно можно узнать, что есть такая штука, как "почтовый ящик места" - вот именно так он и упоминается в настройках. 

И вот, наконец, можно конфигурить почтовые ящики и правила пересылок. 

Тут надо вспомнить, что перенос информации со "старой" почты на "новую" - осуществляется либо платно компанией Мастерхост и бесплатно вами самими. При этом компания не позаботилась ни о каких примитивных средствах импорта - если у вас есть 100-200 почтовых ящиков - закатывайте рукава и в бой! Надо 100-200 раз нажать "Создать", заполнить информацию, и далее - ОК. И все это, увы, происходит не так быстро, как хотелось бы.

Но мне немного повезло - у меня ящиков-то было штук 10 от силы, но зато пересылок - 35. Я аккуратно создал 35 правил пересылки (как это было в старой почте) и полез проверять. Увы, при попытке отослать почту на этот адрес, письмо возвращается с вердиктом "такого mailbox-а не существует". Ура, теперь надо тупо создать 35 мэйлбоксов, исключительно затем, чтобы почта все-таки добиралась до правил пересылки. Да, и пароль при создании тоже надо вводить - два раза.

И вот, наконец-то дело сделано - создано энное количество мейлбоксов! Теперь время воспользоваться рекламируемой фичей "несколько почтовых доменов на одной услуге". Но и тут облом - как выясняется, полноценной поддержки не существует. Все, что можно сделать после присоединения нового домена - это добавлять адрес из этого нового домена к уже созданным почтовым ящикам (в качестве альтернативного). Таким образом, если в присоединенном домене есть какой-то юзер, то он должен быть и в основном. А если, простите, это два разных человека (ну или "места", если на то пошло) - называются одинаково, но в разных доменах? А никак. Видимо, надо делать новую площадку и еще одну "Почту" заказывать.

Меня постигла в процессе еще одно удивительное открытие. Ящики бывают "Домашние" и "Рабочие"- названия весьма условные, можно было бы сразу "Халявные" и "Платные" - так хоть понятно, в чем разница. Так вот, по умолчанию система подсовывает при создании ящика именно "Рабочий", и... короче, не углядел я - при создании ящиков наплодил парочку "Рабочих" (просто ошибся). При этом мудрый GUI от Mirosoft никак и нигде не сообщает, сколько "Домашних" и "Рабочих" ящиков числится в услуге. И уведомление не приходит "внимание, вы только что увеличили стоимость услуги на XXX рублей".  Об этом можно узнать только через контрольную панель - если зайти в "Древо услуг" и дальше в "Почту". Но если мы этого не сделаем - то всё, со счета будет минусоваться столько, сколько задумано "Мастерхостом". Узнаете, когда средства на счету будут подходить к концу.

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

Ну и под финал перешел таки на новый тариф, полюбуйтесь, как это выглядит:



Ну и резюмируя все вышесказанное - я в тихом ужасе. 

2011-01-25

Caanoo

Перелистывал на досуге первый в 2011 году номер LXF и наткнулся на описание игровой консоли на Linux, называется Caanoo:

Технические характеристики следующие:

  • SoC (система на чипе): MagicEyes Pollux VR3520F
  • CPU: ARM926EJ 533 MHz, встроен в SoC (тег архитектуры - ARMv5TEJ)
  • GPU: аппаратный 3D engine, тоже встроен в SoC (поддерживается OpenGL ES 1.1)
  • производительность 3D: 133M треугольников/с и 1,33M полигонов в сек.
  • основная RAM: 128 МБайт DDR SDRAM 133 MHz (пиковая пропускная способность: 533 Мбайт/с)
  • видео буфер: около 16 Mbytes от основной RAM резервируется на видео и текстуры
  • ОС:GNU/Linux 
  • Flash-память: отсутствует (128 Мбайт зарезервировано для OS)
  • Подключение к PC: USB 2.0 High Speed через EXT порт
  • USB Host: USB 1.1 стандартный разъем
  • Поддерживает карты памяти SD / SDHC (до 32 Гигабайт)
  • G-сенсор/монитор вибрации
  • Аналоговый джойстик с высоким разрешением
  • Дисплей: 3.5" LCD 320×240 пикселов (резистивный тачскрин)
  • Встроенные микрофон и стерео-динамики
  • Питание: литий-полимерный аккумулятор 1850mAh (около 5-6 часов просмотра видео/игр)
  • Размеры : 146 × 70 × 18.5 мм
  • Вес : 136г
  • WiFi через адаптер (USB донгл - покупается дополнительно)
  • Цвета: Черный/Голубой/Белый

Собственно, устройство появилось не на пустом месте - у него были предшественники, сделанные славной фирмой Gamepark в Южной Корее (так сказать, южнокорейский ответ японским игровым консолям - почти нацпроект ;). Существует оно с осени 2010 года, так что уже успело достаточно насытить определенные круги ;)

Привлекло меня в этой железке два фактора: невысокая цена (около 5000 руб) и полная открытость. До такой степени, что можно на ней резвиться практически как угодно - например, модифицировать в рутовую файловую систему. Ну и писать программы, конечно же - существует полноценный SDK и toolchain, которые можно свободно скачать и установить.

Что потребуется для программирования под Ubuntu? Попросите apt-get установить следующее:
  • codeblocks ( весьма симпатичная IDE с плагинами );
  • g++
  • libgl1-mesa-glx
  • libfreetype6-devlibgl1-mesa-devlibglu1-mesa-dev, etc
Итак, скачайте и распакуйте в домашний каталог SDK (я для примера буду использовать /var/caanoo).  В зависимости от того, что у нас выступает в качестве хоста - Windows или Linux, делать надо немного разные вещи, но суть едина, поэтому я буду рассматривать только Linux. 

Обязательный пункт программы: скопируйте файлы для wizard-а из распакованного SDK в  Code::blocks:

sudo cp -r /var/caanoo/GPH_SDK/tools/codeblocks/wizard/* /usr/share/codeblocks/templates/wizard

После этого команда New|Project будет показывать возможность создать GP2X-проект:



Далее, надо зайти в настройки Settings|Compiler and debugger и выставить там на закладке Toolchain следующее:

Чтобы проверить правильность настройки, можно открыть любой из примеров, входящих в SDK и попробовать скомпилировать. Компиляция возможна либо в host, либо в target (выбирайте через Select|Build target) - в первом случае в каталоге проекта создается файл target.out, во втором - target.gpe, для запуска на вашем компьютере и на консоли соответственно. Во всех каталогах с примерами есть Makefile, они достаточно простые и помогут сориентироваться тем, кто с недоверием относится к GUI и предпочитает командную строку.

Если в процессе компиляции вы наблюдаете сообщения о ненайденных библиотеках, например GL или GLU - надо установить соответствующие пакеты, только с -dev на конце. Именно там находятся статические библиотеки типа libGL.a, которые требуются для линковки в проектах.

Продолжение обязательно следует

2010-12-09

Masterhost и Почта

Сейчас практически случайно узнал, что Мастерхост, похоже, прикрыл халяву с бесплатными почтовыми ящиками, которые давались в комплекте с хостингом. 

Раньше я обслуживался по тарифному плану "Эффективный", и успел наплодить энное число пересылок - для меня очень удобно, чтобы сортировать почту от разных источников. Хостинг был оплачен до января будущего года, на днях пришло напоминание о том, что надо продлевать. Но теперь мой тариф переехал в раздел "архив", и самым близким из действующих оказался "Доцент'11", который стоит тех же денег, при этом расширяет дисковое пространство в 4 раза (до 6000 Мб против 1500 ранее) и - внимание - не содержит ни одного упоминания про почту.

И тут я понял, что попал. Особенно наглядно это видно из сообщения в твиттере от службы поддержки: 


Будьте аккуратны со сменой старого тарифа на новый! Если текущую почту предварительно не мигрировать, она будет утрачена на нашем сервере!
3:59 AM Dec 7th via Twitter for iPad



Ура! Наша "Почта" - на сайте http://masterhost.ru. Новая, модная, гибкая и абсолютно безлимитная! Теперь это ОТДЕЛЬНАЯ услуга.
1:23 PM Dec 7th via Tweetie for Mac



У меня пересылок довольно много. Я решил разобраться, сколько мне теперь надо будет заплатить. В итоге, внимательно изучив приложение к договору оферты на почту (см. список), я пришел к выводу, что за 30 рублей в месяц я получаю всё тоже самое, что и было. Но вдобавок еще и какие-то новые фичи, а также возможность подвесить туда почту от нескольких доменов, при условии, что они хостятся у Мастерхоста (иначе надо платить 7р/мес).

Что касается дополнительных денег за почту, то Мастерхост предполагает их делать на допуслугах. Вводится различие - ящик может быть "домашний" и "рабочий". Рабочий - сильно платный, но зато:

  • поддержка MAPI (синхронизация с Microsoft Outlook);
  • поддержка ActiveSync, PushMail и доступ с мобильных устройств;
  • групповые календари, контакты и задачи.
Превратить "домашний" ящик в "рабочий" можно за 15 рублей в день (или даже 60 коп. в час), но в месячном исчислении получается уже сопоставимо с самой ценой хостинга - от 443 руб/месяц.

Самое обидное, что мне всех этих фич не надо совсем - я храню почту у себя на компьютере и в архиве GMail, причем в последнем я пользуюсь возможностью шарить календари. Решив взглянуть, сколько будет стоить платный ящик Google, ужаснулся - $50  в год на пользователя. Но это, скорее, предложение для предприятия: для меня, как частного владельца домена, явный перебор с фичами (см. подробнее). 

Поэтому, видимо, придется рассмотреть предложение о подорожании моего хостинга на 10%.

Или искать провайдера для обслуживания MX-а для моих доменов.

Или настроить самому MX (почтовый сервер).

Или перенести хостинг к другому провайдеру.

2010-11-30

Open Source!

Только что по работе пытались разобраться, почему не работает добытый на просторах интернета код, реализующий общение с модемом. Все, как обычно - бубен, метод научного тыка, мистика всякая. А помог в итоге исходник программы gtk-term. Так что даже при наличии доступа в инет,  Open Source - это круто.

2010-11-15

HTC Desire Z - скоро!

Вот уже больше месяца жду поступления в продажу HTC Desire Z - еще со времен Nokia N810 я прикипел к клавиатурным наладонникам - видимо сказалась еще более ранняя ненависть к экранным клавиатурам в PalmOS (по причине наличия в 100 раз более удобного граффити). Однако, время шло - PalmOS плавно загнулся вместе с его Граффити и Граффити2 (кстати, к ним был иск от патентодержателя - Xerox), а экранная клавиатура не имеет тактильной отдачи и привыкать к ней не хочется.

Я перечитал кучу обзоров по сходным устройствам, в том числе:


Нашел блог единомышленника по ожиданию его появления в продаже - Павла Старовойтова.

Пока что оно появилось в ассортименте OZON - там можно купить только HTC Desire HD, по стандартной цене. С одной стороны - "ожидаемая дата поступления" каждый день сдвигается вперед, с другой - за заказ уже можно платить ;) В онлайн-магазине htc-online.ru принимаются предзаказы еще и на HTC Desire Z, у обоих магазинов есть программы лояльности - так что можно прицениться и выбрать лучшее предложение.

Но, тем не менее - пока что "пощупать" девайс не получается, и я продолжаю ругаться на свой плавно подтормаживающий G1 ;)

2010-10-27

Льготная подписка заканчивается

Сегодня мне приехали сразу четыре номера LinuxFormat за этот год (по полугодовой подписка), и - я погрузился в чтение. И в тот момент, когда я с интересом изучал сравнение WebOS, Android и Maemo5, опубликованное в августовском номере, мой G1 изволил показать мне письмо о том, как же повысятся цены на подписку LinuxFormat с ноября:

  • Бумажная версия с DVD: было 150, стало 180;
  • Электронная версия в PDF: было 100, стало 120.
Пока читал статью, понял, что в первом полугодии 2010 года были выпуски со статьями про программирование под Android... Сделал себе пометку на будущее о том, что этот подписку на LinuxFormat прерывать нельзя. Льготная подписка будет действовать еще 4 дня.

2010-10-13

Книга про программирование для Android

Наконец-то нашел нормальную книгу по Android!


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

Базисам, включая установку среды, посвящено первые 23 страницы, никакой воды или занудного дублирования скриншотов диалоговых окон "Are you sure?". Затем пример простейшего приложения под Android с пояснениями. После всего этого глава-введение в логику приложения для Android - что такое Activity (в книге - Деятельность ;), жизненный цикл (по какому принципу система удаляет деятельности ;), что надо писать в манифесте. Ну а потом уже более подробно про расположение виджетов (Layout - типа контейнера), про сами виджеты - простые и с привязанными списками, про уведомления, меню и диалоговые окна.

Отдельная глава посвящена жизненным циклам Activity, описываются механизмы стека деятельностей, намерений (в том числе - широковещательных), кратко написано про службы.  Далее - про сохранение пользовательских настроек (ах, какая прелесть - совсем как Saved Preferences в PalmOS! :) и работа с SQLite. Последние главы посвящены ресурсам, локализации, отображению графики и даже примитивам для работы с анимацией.

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

В целом - еще раз убедился в том, что BHV издает только качественные книги. Был удивлен, что нет в Озоне, поэтому забирал из Линуксцентра самоходом. Это мое второе посещение - по ощущением, кризис их не коснулся, напротив - все завалено товарами, народу сидит больше, один чел по телефону суппортит пользователя, кажется по Linux. Наверное, сказывается наплыв заказов на льготную подписку LinuxFormat - в любом случае, я за них порадовался ;) 

2010-10-06

Linux Format возвращается

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

И вот - ура - времена меняются, и я снова оформляю подписку на 2 экземпляра, еще пока по старой цене - 150 руб. за номер. Чего, кстати, всем советую - еще ни один журнал не оказывал такого мощного воздействия на мои знания: взять, хотя бы, цикл статей про Arduino... Цена продержится недолго - только до конца октября :(

К слову сказать, пару месяцев назад начал покупать выпуски в "Первой полосе", прямо в метро. Это очень удобно и даже слегка дешевле. Сначала, конечно, тетеньки неадекватно реагировали на мой вопрос про журнал "Линуксформат", но потом - ничего, привыкли и больше не удивлялись. Так вот - свежий октябрьский выпуск в Линуксцентре стоит 250 руб, а в "первой полосе" 199 рублей. Правда, купить можно только номер за текущий месяц...

Вместе с тем, стоит заметить, что подписка на текущий год, даже на 6 номеров, обойдется все еще по 150 рублей, а некоторые книги не купить даже в Озон-е. Взять, например, книгу Голощапова про программирование под Android.

2010-07-23

Ubuntu: Not Authorized

Сегодня был возмущен наглостью системы: вставил флешку, а в ответ мне сказали, что я Not Authorized. И так вообще на любую попытку подмонтировать внешний носитель...  Да и автологин куда-то пропал - после перезагрузки приходится набирать пароль. В этом месте надо пояснить, что у меня пока еще Karmic, 9.04.

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

Первым делом, конечно же, советуют проверить привилегии пользователя:

sudo users-admin, затем выбираем свой аккаунт, жмем Properties (Свойства), Привилегии пользователя (User Privileges) и следим за галочной на пункте "Монтировать пользовательские файловые системы" / "Mount user-space filesystems (FUSE)". Дальше отлогиниться, залогиниться и типа будет счастье.

Однако, мне это не помогло - уж точно не помню, стояла ли галка - я их даже на всякий случай поставил все, все равно! Наконец, помаявшись с час, я нашел своё лекарство:

sudo apt-get install --reinstall policykit policykit-gnome && reboot

И сразу всё стало на место. Что характерно, про опцию --reinstall, увы, нигде не пишут - а она-то в данном случае ключевая...
Блогун - монетизируем блоги

2010-06-15

Your distro, your rules

По работе пришлось решать попутную задачу сборки собственного дистрибутива Devil Linux aka DL: так я познакомился с Linux From Scratch (существует онлайновая книга, где концепция LFS изложена довольно подробно). После apt-get и dpkg несколько непривычно, но что-то в этом есть. Основная идея: "твой дистрибутив - твои правила". Я бы добавил сюда "...и твои проблемы" ;) Конечно, если есть документация - просто следуйте ей и будет все ОК. На момент написания статьи документация на последнюю версию DL пребывала в состоянии дописывания, поэтому пришлось поразбираться самостоятельно, благо не очень сложно. Основными ресурсами, которыми пришлось запастись, оказались терпение и свободное место на жестком диске ;)



Хотя с сайта и скачивается дистрибутив 1.4RC4,  в CVS такого тэга я не обнаружил, и поэтому сначала ошибочно взял за основу своих экспериментов 1.4RC3. Однако, очень скоро я понял - при самостоятельной сборке надо брать всё самое последнее (более подробно об этом см. ниже) и собирать с самого начала.

Строим рабочее окружение

Выбираем какой-нибудь каталог (советуют /usr/src, но реально-то надо там, где хватит свободного места - после компиляции у меня оказалось занято около 8,5 Гиг).

Перво-наперво, убедитесь, что у вас есть утилита lftp - если нет, поставьте пакет (apt-get lftp) или качните исходники и скомпилируйте: ftp://ftp.devil-linux.org/pub/devel/sources/tools/. Наличие lftp - обязательный пункт программы.

Сначала качаем базовый архив бинарников Linux From Scratch для DL, он же lfssystem, который обитает в ftp://ftp.devil-linux.org/pub/devel/sources/ - заходите и выбрайте соответствующий каталог (например, lfssystem-for-DL-1.3.4_and_up), далее надо распаковать содержимое - можно сразу из-под рута. Не пугайтесь, просто в DL существует очень немного пользователей, и единственный с настоящей консоль - root, поэтому именно он является владельцем всех файлов в архиве:

sudo tar -xjf lfssystem-SVN-20070314-cleaned.tar.bz2

Далее качаем исходники базовой системы DL из CVS с анонимным доступом на чтение, складывая внутрь распакованного каталога:

cd lfssystem/data


сvs -d:pserver:anonymous@devil-linux.cvs.sourceforge.net:/cvsroot/devil-linux login


sudo cvs -z3 -d:pserver:anonymous@devil-linux.cvs.sourceforge.net:/cvsroot/devil-linux get build

Наконец, вынимаем архивы исходников-компонентов при помощи специального скрипта:

cd build/


sudo ./update_src

Это довольно длительный процесс, к тому же при использовании зеркал (а почти все они - неработающие), его надо сделать дважды - второй раз надо указать главный сервер №1, чтобы скачать самые распоследние  исходники компонентов.

Замечу, что из CVS вы только что получили сборочные скрипты последней версии. CVS хранит все ревизии исходных файлов для каждой версии дистрибутива DL, но вот беда - они логически привязаны к исходникам программ, которые лежат на ftp и, следовательно, имеют всего одну "версию". Поэтому собрать более ранние версии DL, обновите CVS по тегу и ищите файл md5sum.lst - там перечислены все имена файлов с исходным кодом. К счастью, основная их часть выложена на ftp в каталогах "0.5", "1.0", "1.2", "1.4", но как видите - это только основные ветки. Не исключено, что, например, для 1.2.5 придется добыть десяток-другой пакетов исходников. С другой стороны, надо еще поискать педанта, которому все это понадобится.   

Пока идет закачка, добавляем себе alias в ~/.bashrc или ~/.bash_alias:

alias cr='sudo chroot /полный/путь/к/рабочему/каталогу/lfssystem /usr/bin/env -i HOME=/root TERM=$TERM /bin/bash -login'

После выполнения будут подсчитаны md5 для скачанных файлов и после сравнения скрипт может выругаться на те, у которых она не сошлась. Не скажу, что это нормально, но попробовать собрать все-таки можно (на то она и девелоперская ветка). Мне надо было получить ядро 2.6, поэтому пришлось примириться с мелкими несостыковками и пожертвовать некоторыми ненужными программами. Надеюсь, к тому моменту, как вы прочтете эту статью, мэйнтейнеры уже все пофиксят ;)

Компилируем "с нуля"

Настало время расчехлить наш alias! Выполняем cr и попадаем в каталог /data/build с рутовыми привилегиями. Если набрать makе без параметров, он покажет возможные варианты запуска.

make unpack

Закаченные исходники сейчас покоятся в каталоге /data/build/src, по этой команде они все будут распакованы в /data/build/tmp.

make menuconfig 

Попадаем меню конфигурирования. Здесь конфигурится всё. Можно выбирать приложения, некоторые специфические драйвера, тип/количество процессоров, число параллельных процессов make.  Кстати, лично меня сразу же начала раздражать разговорчивость скрипта /data/build/scripts/settings, чтобы его успокоить, поставьте в последней строке перенаправление STDERR в никуда:

test -n "${PACKAGEDIR}" && cd ${PACKAGEDIR} 2> /dev/null

В конфигурации можно оставить все как есть, а можно повыкидывать лишнее - главное, не забудьте сохранить результат (файл .config). Для первого раза все-таки рекомендую оставить все.

После этого, по идее, все готово к сборке... ну разве что исправить в /root/.bash_profile определение временной зоны с EST на Europe/Moscow (надо перелогиниться, конечно же).

make prepare


Вывода вы не увидите, он будет аккуратно сложен в  /data/build/tmp/LOGS/prepare/*.

make build


Тоже самое, но логи будут складываться в /data/build/tmp/LOGS/build/*. Сборка происходит для всех пакетов, вне зависимости от того, что выбрано в конфигурации. Все пакеты должны собираться нормально, но у меня не смог завершиться ./confire для git, причина была в отсутствии в базовом бинарном пакете LFS /usr/bin/python. Чтобы избавиться от git можно зайти в Makefile.build и удалить оттуда эту цель. Так можно поступать с любыми проблемными пакетами, если от них не зависят другие пакеты. В противном случае придется предметно разобраться, в чем причина и сделать патч, чтобы пакет все-таки собирался.

make install

Происходит выполнение цели install у всех Makefile всех программ. Учтите, что для некоторых пакетов нельзя сделать make install повторно: он может неожиданно завершиться с претензией о том, что какой-то каталог/файл уже, видите ли, создан.

make iso

Происходит "стаскивание" всех компонентов в каталог tmp/ISO, формирование рутовой файловой системы, а затем все необходимые шаги для получения файла tmp/bootcd.iso.

ГОТОВО!

Я смог дойти до конечного результата только спустя сутки, что даже на моем не самом отсталом Duo T5550/1.83 - мучительно долго. Кроме того, приходилось начинать несколько раз заново: unpack-prepare-build-install-iso. Казалось бы, можно "переигрывать" тот или иной пункт сборки довольно просто - удалить флаг tmp/FLAGS/<фаза>/<программа> (например, после удаления tmp/FLAGS/build/linux make build должен по-новой запустить компиляцию ядра). Но на практике, надо знать некоторые зависимости и особенности, иначе - нас ждет unpack-prepare-build-install-iso.

Если Вам интересно прочитать о составе программ и про то, как работать с этой сборкой (так сказать, информация для пользователей) - рекомендую статьи Александра Деревянко - часть 1 и часть 2.

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

2010-06-03

Open Office

Недавно общался с коллегой и выслушал стандартное мнение по поводу того, что Microsoft Office надо покупать, потому что контрагенты все равно присылают информацию в .docx и, типа, не все документы Microsoft правильно открываются в Open Office. 

Да, это правда. Например, счет от конторы Platan.ru, который они засылают в справочном порядке, хоть и в формате .rtf, но сводит с ума и Google Docs, и Open Office.

Но пользоваться OpenOffice я и не подумаю бросать: ибо подготовленный в нем документ гораздо более вероятно будет открыт - и в Microsoft Office, и в OpenOffice.

А еще - на днях к моему коллеге приходил студент-дипломник и принес с собой материалы в формате .odt - который, конечно же, посмотреть не удалось - потому что мой коллега Open Office почему-то не установил.

Ну, тут каждый решает сам. 

2010-05-24

Sun vs Oracle

Обратил внимание, что при старте Ubuntu apt досадует, что какой-то из репозиториев стал недоступен. Полез проверять - это оказался VirtualBox

Во, думаю, приколисты какие - унесли куда-то URL репозитория. Вбил по-новой, ошибка не пропала.

И тут я догадался отскроллить страницу вниз - смотрю, а там сообщается, что репозиторий подписан теперь ключом от Oracle! Видимо, само сочетание из трех букв "Sun" скоро будет безжалостно и повсеместно изничтожено.

Но мы-то помним, мы гордимся (с).

2010-05-13

HTC Dream - начнем с начала

Итак, в руки мне попал самый настоящий HTC Dream, но - с модифицированной прошивкой и сотней с лишним  программ в придачу, добрые две трети которых трапалось (видимо, хозяин прямолинейно удалил пользовательские данные). Я всерьез задумался над тем, как вернуть всё в исходное состояние, и через некоторое время нашел внятный рецепт здесь.

Итак, ингредиенты:
  1. HTC Dream собственной персоной с полностью заряженным аккумулятором;
  2. SD-карточка, отформатированная в FAT32;
  3. Немного терпения и доступ в инет.
Первым делом качаем DREAMIMG.NBH - это совершенно официальная прошивка от HTC RC29 - та самая, в которой был обнаружен баг с получением рутовых  привилегий, позволивший теперь так веселиться всевозможным хакерам и создателям собственных ROM-ов. При необходимости распаковываем ее из .zip и помещаем в корневую директорию нашей SD-карты - это можно сделать либо при помощи "большого брата" с карт-ридером, либо через сам девайс, подключенный как Mass Storage - если, конечно, предыдущие эксперименты не привели его в "бессознательное" состояние.

Устанавливаем SD-карту в G1. Если устройство включено - выполняем стандартное выключение, обычно это достигается длительным удержанием красненькой Отбой/Power, далее во всплывающем меню - "Power Off".

Включаем, удерживая Power + Camera, вываливаемся в бутлоадер (он может выглядеть по-разному - хакнутый "беленький" и "радужный" заводской):



Если не дошли до вопроса о перепрошивке - еще раз проверьте, что карта отформатирована в FAT32, а в корне - правильный файл с правильным именем.

Запускаем загрузку имиджа нажатием на кнопку Power или Action (это трекболл). Произойдет распаковка имиджа и его проверка - где-то секунд 30. Дальше будет предложено ни в коем случае не обесточивать устройство:



По окончании - можно перегружаться.

Если что-то пошло не так - например, ошибка Unknown failed, нужно попробовать выполнить предварительное стирание через recovery. Для этого надо включить устройство кнопками Power + Home. Если на экране появился восклицательный знак:



 , то это - заводской, родной recovery - нажимайте Alt-L, чтобы попасть в текстовое меню. В других случаях этого делать не надо:



Но в обоих вариантах для стирания надо жать Alt-W - будут уничтожены разделы cache и data - это пользовательские данные. После этого надо опять перезагружаться Power + Camera и снова повторить шаги выше.

Что мы в итоге получили? HTC Dream с прошивкой, в которой еще не закрыта дыра безопасности для получения рута, оригинальный Android OS 1.5.



При первоначальном старте эта прошивка попросит ввести данные вашего аккаунта Google (так называемая "активизация").  Для этого, в свою очередь, потребуется услуга пакетной передачи данных с доступом в интернет, которая, скорее всего у вас не заработает.

Почему? Внутри родной прошивки по умолчанию установлена APN для T-Mobile! Чтобы ее изменить, нажмите Menu и добавьте в список своего оператора связи. Например, для Мегафона вводим Name: Megafon, APN: internet. Если все сделано верно, вверху слева от значка уровня сигнала сотовой сети появятся иконка со стрелочками обмена с сотовой сетью  - теперь можно смело вводить данные своего аккаунта Google и восхищаться девственностью системы ;)

Те, кто проделали всё это ради установки усовершенствованной прошивки на этом обычно не останавливаются - они неизбежно должны "получить рута":

1. Запускаем приложение Android Market, ищем и устанавливаем программу Telnet;
2. Выходим кнопкой Home на родной десктоп, открываем клавиатуру и нажимаем 2 раза Enter, потом набираем telnetd и еще раз Enter. Внешне это похоже на быстрый поиск контакта, но на самом деле вы только что запустили сервер telnet на телефоне.
3. Запускаем приложение telnet, соединяемся с сервером localhost по порту 23 - и, о чудо, нам выплевывается строчка мусора, завершающаяся решеткой.

Вот это оно и есть, root-доступ. Обычно, заменяют содержимое recovery-имиджа, который заранее сохраняют на SD-карту, например выполняют команду:

flash_image recovery /sdcard/cm-recovery-1.4.img

Дальше можно перезагрузиться в recovery (см.выше), чтобы произвести манипуляции по смене системной прошивки. Например, вот здесь описание как это сделать для CyanogenMod.