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.

2010-05-11

Google Chrome для Linux

Я использую нестабильную ветку Google Chrome для Linux вот уже как скоро год, и никаких проблем не замечал - до последнего времени. При старте он стал писать Не удалось корректно загрузить ваш профиль, и чуть ниже - некоторые функции могут работать некорректно. Поскольку я заметил лишь один эффект - пропадание иконок в закладках, я забивал на это довольно долго (месяц).

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

Настройки живут в каталоге ~/.config/google-chrome/, и если не жаль содержимого - можно удалять. Еще можно установить гуманную опцию --user-data-dir на другой каталог и "начать новую жизнь". Но тогда плакали мои несохраненные закладки и сохраненные пароли :(

В итоге все вылечилось довольно просто - в каталоге ~/.config/google-chrome/ надо снести все файлы истории (особое удовольствие прибить файлы с цифрой 1970 в названии), т.е. файлы ~/.config/google-chrome/History*.

Наверное, получилась косячная база SQLite (именно в ней хранится история), когда переполнился home-раздел...