Category: it

nepal

Фундаментальные проблемы парсинга df

Век живи, век учись[, дураком помрёшь].

Взгляните на вывод команды df:
$ df /
Filesystem                    1K-blocks     Used Available Use% Mounted on
/dev/mapper/vg_kirpad-lv_root  52765228 40972332   9105920  82% /

Казалось бы, чтобы отсюда узнать, сколько всего на файловой системе блоков, нужно взять второе поле из последней строки, например, вот так:
$ df / | awk 'END {print $2}'
52765228

Всё работает. Ан нет. В природе, оказываются, существуют хосты, которые печатают вот так:
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/mapper/volume3_part5
                     162693204    230624 148202134   2% /

И с использованием вышеприведённой конструкции мы получаем 230624 вместо 162693204.

Правильное решение -- вероятно, использовать stat -f /, надеясь, что он не оборудован такими выкрутасами, как df.

Костыль -- считать поля с конца, а не с начала, то есть
awk 'END {print $(NF-4)}'.
  • Current Mood
    какой уж тут муд
  • Tags
    ,
dark

Про паразитов, злобное

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

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

Например, openvz.


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

Читаю дальше.

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

Хмм. Не баг. Сокрушается отсутствием саппорт со стороны разработчиков и комьюнити. Причём тут стабильность вообще? Какая-то внезапная подмена зелёного на квадратное произошла.

Про разработчиков могу сказать, что у нас примерно 10 кернель дивелоперов плюс я. Если мы начнём посвящать своё рабочее время саппорту пользователей, OpenVZ очень быстро загнётся. Как говорил проф. Ф.Ф. Преображенский, "если я, вместо того, чтобы оперировать, каждый вечер начну у себя в квартире петь хором, у меня настанет разруха".

Про комьюнити -- по сути, автор поста сам себя критикует, он и есть часть комьюнити.

и вот ещё один пример - я несколько дней написал вопрос на форуме - vzmigrate without ssh or any encryption. 1160 просмотров темы и ни одного ответа за 5 дней. Что я могу сказать, всем на это просто положить.

Я посмотрел, у него 78 сообщений на forum.openvz.org, и это топики, начатые им, с его вопросами. Я не просмотрел все 78 постов, конечно, но я не смог найти ни одного, где бы он сам помогал другому пользователю. Зато увидел какое-то количество ответов наших дивелоперов -- и теперь мне жалко их времени, оно явно могло быть потрачено с бОльшим толком.

Опенсорс -- это симбиоз разработчиков и сообщества, где все друг другу помогают. А это -- паразит, нахлебник. Это и по его высказыванию видно, и по виду активности в форуме.

Что делать, в принципе ясно. Перестать всё это использовать.

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

К счастью, не всё комьюнити состоит из таких неприятных людей, что доказывают хотя бы комменты coolcold к тому посту.
nepal

OpenVZ, LXC, vanilla kernel и все-все-все

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

Здравствуйте! Я работаю в компании Parallels менеджером проекта OpenVZ. Хотел рассказать про то, что такое LXC (а также cgroups и namespaces), какое отношение всё это имеет к OpenVZ, и в целом о нашей работе с основным ядром. А то уже устал отвечать на одни и те же вопросы (и реплики) вроде таких:

* Планируется ли интеграция OpenVZ в ванильное ядро?
* Когда наконец OpenVZ начнёт использовать LXC?
* С тех пор, как в ванилле появились cgroups, OpenVZ можно выкидывать!
* Будущее за LXC, а OpenVZ отправляется на свалку истории.
* и т.п.

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

Collapse )
А у меня ещё вопрос!.. Постараюсь ответить, например, вот здесь.
nepal

CyanogenMod 7 on a B&N Nook Color

Вчера поставил CyanogenMod 7 (nightly build, 7.1pre) на свой Nook Color. Причём она стоит на карточке, поэтому если карточку вынуть, то будет грузиться то, что на нуке стоит во внутреннем флеше.

Оказалось всё довольно просто, инструкции и образы тут: [ROM][CM7] [v1.3] Size-agnostic SD Card image and CM7 installer for SD Cards

1. Берём microSD на 2, 4 или 8 гигов и кард-ридер (сам нук для этого использовать нельзя).

2. Скачиваем generic-sdcard-v1.3.img.gz и записываем на карту (не на раздел, а на карту целиком):
wget http://nook.handhelds.ru/sdimage/generic-sdcard-v1.3.img.gz
gzip -d generic-sdcard-v1.3.img.gz
dd if=generic-sdcard-v1.3.img of=/dev/sde bs=1M
sync
sync


3. Вынимаем карту, ставим обратно. Видим, что появился раздел boot.

4. Скачиваем образ цианогена вот отсюда, копируем его на карту. Синкаем, отмонтируем...

5. Ставим карту в нук, включаем нук. С карты запускается инсталлятор, который переразмечает карту и распаковывает на неё цианоген, рисуя строчки на нуке. Когда процедура закончится, нук выключится.

6. Включаем нук, он грузит с карты цианоген. Настраиваем вай-фай и выключаемся.

7. Вынимаем карту, ставим в кард-ридер. Скачиваем google apps отсюда (сейчас это gapps-gb-20110613-signed.zip) и кладём файлик на карту (на первый раздел, который boot).

8. Ставим карту в нук. Удерживая кнопку "нук" (перевёрнутую U), нажимаем на power и ждём, пока на экране не появится надпись, а потом пропадёт. Отпускаем power (продолжая удерживать "нук"), нажимаем снова и держим ещё несколько секунд. Снова что-то появляется на экране, отпускаем power, ждём, пока экран погаснет, отпускаем "нук".

Альтернативно, просто грузимся в цианоген, нажимаем power, выбираем "перезагрузиться" и далее "перезагрузиться в рекавери".

Прошиваются gapps, нук перезагружается.

9. Получаем картинку "первый запуск" -- надо ввести логин в гугле и т.п. У меня почему-то с первого раза этого "первого запуска" не получилось, перезагрузился, всё починилось.

10. Enjoy.

PS у девайса нет GPS, GSM (GPRS/EDGE/HSPDA/3G), камеры, микрофона. Всё остальное вроде бы есть. С cyanogenmod добавляется bluetooth, так что микрофон можно в теории получить внешний.
nepal

vim + cscope quick howto & tips

Если вы не программируете на Си и не используете для этого vim, дальше можно не читать.

Если вы пользуетесь тегами (ctags) в vim, то вы, конечно, знаете, что с их помощью можно по Ctrl-] прыгать с места, где вызывается функция, на место, где она определена (и по Ctrl-T прыгать обратно). Это удобно и здорово, и не только для функций работает, но и, скажем, для структур.

Иногда, однако, хочется прыгать в другую сторону -- в место (места), где эта функция используется (вызывается). Для этого ctags не подходит, а подходит cscope. vim тоже умеет интегрироваться с cscope, но есть нюансы.

Например, не нашлось комбинации клавиш для "прыганья", и читать базу cscope (файлик cscope.out) при настройках по умолчанию (vim-7.3, Fedora 14) vim хочет только из текущего каталога (а хочется ещё и из каталога этажом выше, или двумя этажами выше). Что касается комбинации клавиш, я не придумал ничего лучше, как использовать соседнюю с Ctrl-], а именно Ctrl-\. Они рядом, в этом есть логика. Обратно прыгаем точно так же, как и с тегами, по Ctrl-T.

Решить обе вышеописанные проблемы получилось вот таким кусочком заклинаний для ~/.vimrc:

" CScope
if has("cscope")
        " Ctrl-\ does reverse search (i.e. "who calls this function")
        nmap  :cscope find c <c-r>=expand("<cword>")<cr><cr>

        set nocsverb
        if filereadable("../cscope.out")
                cs add ../cscope.out ..
        elseif filereadable("../../cscope.out")
                cs add ../../cscope.out ../..
        endif
        set csverb
endif


Что ещё? Базу для cscope можно сгенерить командой cscope -R -b, находясь в корне исходников проекта. В общем, больше ничего и не надо.
nepal

cm7 nightlies gapps trouble

Решил, раз не сплю, накатить в свой телефон свежий CM7 (билд #12 от 3 марта -- новее почему-то нет). До этого там стояло что-то с датой в середине февраля. Накатил (благо с ROM Manager это делается на раз-два, то есть в несколько кликов). После апдейта перестали работать market, gmail, gtalk.

Почистил (отформатировал, через CWM recovery menu) /cache. Не помогло.

Выполнил fix permissions (там у каждого приложения свой uid/gid и файлы данных должны принадлежать ему -- иногда, почему-то, это сбивается) -- тоже с помощью ROM Manager. Не помогло.

Перенакатил gapps. Помогло лишь отчасти -- маркет открылся, но gmail и youtube продолжали делать FC (force close, что-то вроде SEGFAULT).

И тут я сделал гениальную по своей простоте вещь -- деинсталлировал gmail и youtube и поставил их заново. Помогло!

PS я знаю, что помогает сделать wipe /data, но уж очень не хотелось прибегать к таким радикальным мерам.
PPS я знаю, что это напоминает войну с неработающим Линуксом, но надо учесть, что это nightly build неофициального форка Андроида -- нормальные люди такой bleeding edge себе не ставят, конечно, и у них всё работает.
nepal

Сохранение и работа с метками Яндекс.Карт на Андроиде

Насколько я понял, реализация мобильных Яндекс.Карт на Андроиде отстаёт от аналогичных решений на, скажем, Симбиане. В частности, вносимые пользователем метки хранятся локально в базе sqlite3, причём хранятся не на SD карточке, а в памяти телефона (на /data).

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

Приходится заботу о метках брать в свои руки. Последующий текст предполагает, что у вас есть компьютер, на котором стоит ADB, а телефон присоединён к компьютеру через USB. Возможно, всё это работает только на рутованном телефоне!

Чтобы скачать метки с телефона на компьютер:
adb -d pull /data/data/ru.yandex.yandexmaps/databases/labels.db

В случае, если вы используете модифицированные Яндекс.Карты' от Александра Хохлова:
adb -d pull /data/data/ru.yandex.yandexmaps.khokhlov/databases/labels.db

Метки можно редактировать с помощью командной строки sqlite, если вы знаете SQL:

sqlite3 labels.db
SQLite version 3.6.23.1
Enter ".help" for instructions
Enter SQL statements terminated with a ";"

sqlite> .mode line

sqlite> SELECT * from sqlite_master;
    type = table
    name = android_metadata
tbl_name = android_metadata
rootpage = 3
     sql = CREATE TABLE android_metadata (locale TEXT)

    type = table
    name = mylabels
tbl_name = mylabels
rootpage = 4
     sql = CREATE TABLE mylabels (_id INTEGER PRIMARY KEY,label_name TEXT,label_name_tolower TEXT,lat LONG,lon LONG,geocode TEXT,date LONG)

sqlite> SELECT * FROM mylabels LIMIT 1;
               _id = 1
        label_name = Офис
label_name_tolower = офис
               lat = 55.8746625377941
               lon = 37.5884219154757
           geocode = Россия, Москва, Алтуфьевское шоссе, 44
              date = 1292572012292

Обратно в телефон labels.db запихиваются тоже через adb, только вместо pull говорим push:
adb -d push labels.db /data/data/ru.yandex.yandexmaps/databases/labels.db
или для карт от Хохлова:
adb -d push labels.db /data/data/ru.yandex.yandexmaps.khokhlov/databases/labels.db

nepal

Storopia

Нашёл наконец-то шрифт, которым в Android нарисованы часы на экране блокировки, и ещё местами кое-что (например, в маркете предпоследней версии). Называется Storopia.

Поставил, попробовал использовать в GKrellM, скриншот (108x572 px) под катом.
Collapse )

Сам фонт можно найти внутри архива Vending.apk.
nepal

Android 2.2: adb; install to SD card

Разобрался, почему приложения не хотят ставиться на SD-карточку. Оказалось, что просто пока таких приложений ещё пока нет, но ставить их на карточку всё равно уже можно, только с небольшим вывертом. Перенёс несколько штук из телефона на карту. Расскажу, как.

I. Получение доступа к шеллу от телефона.
Collapse )
II. Инсталляция на SD card.
Collapse )

Деньги, как всегда, шлите мне по почте конвертами и бандеролями.
nepal

asus m2n-mx se wtf

Ядра от RHEL 5 (и от CentOS 5, и стабильное от OpenVZ) не грузятся на машине с материнской платой asus m2n-mx se с вот такой ошибкой:

Kernel panic - not syncing: IO-APIC + timer doesn't work
Collapse )
Решение нашлось вот тут. Выключаем в БИОСе опцию Chipset-> SouthBridge-> MCP61 ACPI HPET TABLE, и всё взлетает и работает без всяких флажков.