?

Log in

No account? Create an account

Entries by category: it

Фундаментальные проблемы парсинга df
nepal
k001
Век живи, век учись[, дураком помрёшь].

Взгляните на вывод команды 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)}'.
Tags: ,

CyanogenMod 7 on a B&N Nook Color
nepal
k001
Вчера поставил 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, так что микрофон можно в теории получить внешний.
Tags: ,

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

Насколько я понял, реализация мобильных Яндекс.Карт на Андроиде отстаёт от аналогичных решений на, скажем, Симбиане. В частности, вносимые пользователем метки хранятся локально в базе 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


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

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

и снова иНЖАЛИД ДЕЖИЦЕ
nepal
k001
Про иНЖАЛИД ДЕЖИЦЕ я уже писал. Про то, как перекодировать кракозябры -- тоже.

Теперь для ностальгирующих советских инженеров-программистов -- как получить слова типа иНЖАЛИД ДЕЖИЦЕ. Довольно просто:

$ echo Invalid device | iconv -f KOI-7
иНЖАЛИД ДЕЖИЦЕ
$ echo Hello, world! | iconv -f KOI-7
хЕЛЛО, ВОРЛД!
$ echo Bad command or file name | iconv -f KOI-7
бАД ЦОММАНД ОР ФИЛЕ НАМЕ

Вот не помню, какие там были ещё ошибки. А вот, нагуглил:
АРЕ ЫОУ СУРЕ?

Кто-нибудь ещё что-нибудь помнит?
Tags: , ,

mkdir/chdir эксплойт
nepal
k001
Update: сей пост был как-то неправильно опубликован и посему не попал, похоже, во френдленты. Посему выкладываю его вновь.

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

  1. Привести его текст полностью.
  2. Устроить что-то вроде викторины.
текст программкиCollapse )

Вопросы будут такие:

  1. Что и почему произойдёт в Линукс-системе, где такое запустят?
  2. Почему OpenVZ от этого помогает?

Комменты скринятся. Сам отвечу в понедельник после обеда.

Tags: , ,

смерть оракла
nepal
k001
Сегодня shams мучала инсталлятор Oracle. Вываливается с SIGSEGV и всё тут. Уже несколько дней они его пинают... Сегодня допинали!

Оказалось, что в файле /proc/swaps, которое инсталлятор читает с помощью /bin/cat (у нас /proc/swaps внутри контейнера в старом ядре нет, поэтому мы подложили наш /bin/cat), в первой строчке (где заголовки) поля разделены табами, а во второй строчке (где, собственно, своп-девайс и всякие его характеристики) -- пробелами! Вот так вот примерно выглядит /proc/swaps, чтобы вы представляли, о чём речь:

$ cat /proc/swaps 
Filename                                Type            Size    Used    Priority <-- тут табы
/dev/sda3                               partition       2031608 80      -1       <-- тут пробелы

Ну вот, а у нас во второй строчке были табы. Оракловый инсталлятор не смог этого перенести!

Вероятно, его писали ну очень малогабаритныебюджетные индусы.

ALTLinux, 1C, OpenVZ
nepal
k001
О как! C ЛОРа:

В декабре 2007 года компанией ООО «НЕВОД» (http://www.nevod.ru) для ЗАО «Уралалмаз» (http://almaz.perm.ru) произвела установку и настройку системы 1С на серверах компании с использованием ALT Linux 4.0 Server.

Развёрнутая система обеспечивает одновременную работу до 50 пользователей в локальной сети предприятия и работу 10 пользователей на удаленных объектах, объединенных с центральным офисом низкоскоростными каналами связи.

ALT Linux 4.0 Server обеспечивает поддержку следующих сервисов для данного решения:
- сервер 1С 8.1;
- сервер базы данных PostgreSQL 8.2;
- сервер лицензий;
- терминальный сервер, обеспечивающий выполнение приложений 1С в рамках рабочей среды KDE по протоколу NX (nomachine, freeNX).

Для повышения надёжности и простоты миграции использовались технологии openVZ-контейнеров.

Успешное внедрение делает возможным в первом полугодии 2008 года заменить на клиентских местах, пользователей 1С:Предприятия, операционную систему Windows XP на ALT Linux 4.0 Desktop.
Tags:

горизонтальный скроллинг в firefox
nepal
k001
Если у кого есть устройство ввода с горизонтальным скроллером (например, мыша с двумя колёсами, мыша с колесом, которое можно наклонять влево-вправо, мыша с шариком вместо колеса, тачпад и т.п.), то он наверняка сталкивался со странным поведением Firefox -- горизонтальный скроллинг приводит к хождению взад-вперёд по истории (то есть эффект такой, как будто бы вы нажимаете кнопки браузера Back и Forward. Возможно, такое поведение более-менее катит, если у вас мыша с наклоняемым колесом, но лично мне это кажется ужасным и отвратительным.

К счастью, это излечимо, вот вам детальный рецепт. Открываем браузер, в строчке, куда вы обычно вводите URL (адрес странички), вписываем about:config и нажимаем Enter. Далее в поле ввода Filter: пишем mousewheel.horizscroll.withnokey и видим три параметра. На каждом из них нужно сделать двойной клик мышкой (ну или встать мышкой и нажать Enter) и (для тех, где цифры) в открывшемся окне написать новое значение. В результате должно получиться вот что:

mousewheel.horizscroll.withnokey.action = 0
mousewheel.horizscroll.withnokey.numlines = 1
mousewheel.horizscroll.withnokey.sysnumlines = true


(Изменения сохраняются сразу, можно просто закрыть это окошко или вкладку).

Теперь по событиям "горизонтальный скроллинг" мы имеем то, что надо -- горизонтальный скроллинг. Если горизонтально скроллить, нажав Shift, Ctrl, Alt или Winkey -- будет старое поведение, то есть хождение по истории. Если нужно, можно и это поправить, изменив остальные значения из группы mousewheel.horizscroll.

цискофон
nepal
k001
Вот же ж блин. IP адрес, Ethernet порт и встроенный веб-сервер у телефона (на столе который стоит) есть, а условно перенаправлять вызовы (к примеру, в режиме "если не поднимают трубку") он не умеет. Умеет только безусловно.

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

ОК, я понял, номер можно вколотить в "быстрый доступ" (кстати, там почему-то всего 4 номера, не больше), так будет быстрее выставлять перенаправление. Но почему, блин, почему я должен руками всякий раз это делать, вместо того, чтобы один раз выставить "если не поднимают трубку -- перекинь на мобилу" и забыть? Я не понимаю.

Телефон Cisco 7912, софт Cisco CallManager. Почему так тупо-то всё?