среда, 17 ноября 2010 г.

View repaint workaround

I need hide footer in my Android application when soft keyboard appears.
Also I need show footer when soft keyboard disappears.

I create my own MyRelativeLayout and extend it from regular RelativeLayout.
Then I redefine one method:



@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);

final LinearLayout footer = (LinearLayout) findViewById(R.id.footer);
if (oldh>h) {
footer.setVisibility(RelativeLayout.GONE);
} else {
footer.setVisibility(RelativeLayout.VISIBLE);
}

//This is workaround for repaint footer
//It seems there are no another ways for repaint footer
final Handler handler = new Handler(new Callback() {

@Override
public boolean handleMessage(Message msg) {
footer.invalidate();
footer.requestLayout();
return true;
}
});
handler.sendEmptyMessage(0);

}

пятница, 22 октября 2010 г.

Siberia. Rope Jumping.

Abandoned derrick. 45 meters (about 25 floors) :










суббота, 26 июня 2010 г.

Раздаем WiFi c линукса!

Купить WiFi роутер - это конечно самое простое решение.
Но если не хочется тратить лишние 700-1000 руб, или WiFi карточка уже простаивает на десктопе - этот ман для вас ))

Предварительно полазив по просторам интернета выбор пал на карточку DLink DWA-510.
Карта дешевая, на опробованном чипе ralink и умеет все, что нам нужно.
Хотелось бы конечно еще стандарт N, но на ноуте(ради которого все затевается) все равно карта держит только G. Поэтому рисковать не стал, хотя сильно подмывало приобрести dwa-525...

Итак! К делу )
Устанавливаем то, что нам понадобится:
sudo aptitude install bridge-utils, hostapd, dhcp3-server, firmware-ralink, wireless-tools

Кстати, ядрышко я пользую 2.6.32. Если у Вас меньше 2.6.30 - вам обязательно нужно обновиться.

Половина дела сделана. )) Дальше конфиги
Конфигурим сетку: /etc/network/interfaces
Добавляем в конце следующее:
auto wlan1
iface wlan1 inet manual
up ifconfig $IFACE 0.0.0.0 up
up ip link set $IFACE promisc on
down ip link set $IFACE promisc off
down ifconfig $IFACE down

#Bridge interface
auto br0
iface br0 inet static
address 10.8.0.1
network 10.8.0.0
netmask 255.255.255.0
broadcast 10.8.0.255
bridge-ports wlan1
bridge_maxwait 0

Очень вероятно, что "wlan1" вам придется изменить, например, на "wlan0"
Понять, как система назвала конкретно вашу карту, можно по выводу
sudo ifconfig -a

Конфигурим dpcp(раздача ip): /etc/dpcp3/dhcpd.conf
Все содержимое моего файла:
ddns-update-style none;
option domain-name "LexemNetwork";
option domain-name-servers 217.117.80.1, 208.67.222.222;
default-lease-time 42300;
max-lease-time 84600;
log-facility local7;
subnet 10.8.0.0 netmask 255.255.255.0 {
range 10.8.0.100 10.8.0.200;
option routers 10.8.0.1;
}
Конфигурим hostap: /etc/hostapd/hostapd.conf
Все содержимое моего файла:
interface=wlan1
driver=nl80211
bridge=br0
ssid=LexemWiFi

hw_mode=g
channel=1
macaddr_acl=0
ignore_broadcast_ssid=0
auth_algs=1
wpa=2 # WPA2-Personal/AES or WPA2-PSK/AES
wpa_passphrase=change_your_pass
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
eap_server=0
eapol_key_index_workaround=0

logger_syslog=-1
logger_syslog_level=2
logger_stdout=-1
logger_stdout_level=2
dump_file=/tmp/hostapd.dump
ctrl_interface=/var/run/hostapd
ctrl_interface_group=0
beacon_int=100
dtim_period=2
max_num_sta=255
rts_threshold=2347
fragm_threshold=2346
own_ip_addr=127.0.0.1
Меняем "wlan1", на тот который указан в
/etc/network/interfaces
Меняем "change_your_pass" на тот пароль, который хотели бы вводить на ноуте.
Меняем "LexemWifi" на название, которое хотели бы видеть на ноуте при поиске сетей.

Конфигурим nat: /etc/rc.local
Добавляем в конец файла, но перед строкой "exit 0"
/sbin/iptables -A FORWARD -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmt
/sbin/iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -j MASQUERADE
Финиш!
Здесь можно перезагрузить комп и все заработает. ))
Если же перезагружаться не хочется, можно рестартануть только необходимое:
sudo /etc/init.d/networking restart
sudo /etc/init.d/dhcp3-server restart
sudo /etc/init.d/hostapd restart


PS. Инструкции практически не затрагивают железо. Если у вас другая карта, то скорее всего нужно будет просто установить, что-нибудь другое вместо пакета firmware-ralink. Или как-то еще добиться работоспособности карты, а дальше уже действителен этот ман )

пятница, 25 июня 2010 г.

Установка skype на debian amd64

Зачем нужен skype все знают. Звонилка, IM, даже видеозвонки.

Но на моем debian 64-bit оно отказалось вставать, потому что скайповцы делают нормально только для 32 разрядных систем. Кстати юзаю на данный момент кеды kde-plasma-desktop версии 4.3 и ядрышко 2.6.32-15 x86_64

Итак танцы с бубном, чтобы запустить 32 битную версию.

#ставим 32х битные либы
sudo aptitude install ia32-libs ia32-libs-gtk libasound2-plugins

#вот это ставить не пришлось, но в оригинальном мане есть
sudo aptitude install libqt4-core libqt4-gui

#Качаем любым удобным способом 32х битный deb c офф сайта
wget -O skype-install.deb http://www.skype.com/go/getskype-linux-beta-deb

#Насильно устанавливаем 32х битный пакет =)
sudo dpkg -i --force-architecture skype-install.deb

Как и обещал ман, skype запустился, но упал со следующей ошибкой:
If you get error like this Inconsistency detected by ld.so: dl-open.c: 643: _dl_open: Assertion `_dl_debug_initialize (0, args.nsid)->r_state == RT_CONSISTENT' failed!

Но слава богу это лечится простой выдачей прав:
sudo chmod a-r /usr/lib32/libpulse{-simple.so.0.0.2,.so.0.8.0,common-0.9.15.so}

запускаем и радуемся жизни ))
linux32 skype

Видео и принимает и передает отлично. Звук принимает тоже отлично.
А вот с микрофоном нужно еще немного поприседать.

Нужно зайти в Kmix.
Настройка > настроить каналы. Ищем "Input source" и включаем отображение.
После возвращаемся и выбираем микрофон. У ноутов обычно встроенный это "Front mic", а втыкаемый в разьем 3.5 - просто "Mic".
Заодно удостоверьтесь, что нужный микрофон включен и громкость у него не выкручена на 0.

Подобные действия можно повторить запустив alsamixer. Жмем F5 и пролистываем направо. Там тоже можно настроить "Input Source"

Ну и напоследок, вот оригинал magic'a ))

среда, 8 июля 2009 г.

Anyremote - установка, настройка

Сидишь под linux, мобилка с bluetooth? Ну тогда тебе просто необходимо слегка потратиться на USB-bluetooth девайсину и наслаждаться пультом. Практически из любой мобилки можно сделать пульт для твоего командного линукс-цента ))) Достаточно, чтобы она умела исполнять java приложения и имела bluetooth.

Чем можно управлять? Всем, что можно стартануть из командной строки!!! Т.е. практически всем. У меня настроены только звук, амарок, mplayer и выключение монитора. В чем прелесть, скрипты пишутся самостоятельно. Один вечер позаморачиваться и вуаля - музыку на 100 ваттных колонках можно выбирать прямо из туалета =) К тому же есть куча готовых примеров скриптов.

Помимо блютуса можно пользовать инфракрасник, WiFi, или через сеть по HTTP. Но здесь речь будет только о bluetooth.

К делу!

Сразу определимся с религией. Я сижу под Debian testing ветки. На данный момент это squeeze.

Принцип действия довольно прост.
На компе запускаем anyremote. Он ждет команду.
На телефон заливаем спец программку, она будет посылать эти команды.
Грубо говоря, телефон посылает, что нажата кнопочка "5".
Сервер смотрит в скрипт, что соответствует этой кнопочке, и исполняет. Например включает amarok.

Бывает и немного сложнее алгоритм, например после команды "8", высылаем на телефон список файлов. Пользователь выбирает один из них. Телефон передает имя файла обратно в комп. После этого, к примеру, amarok начинает проигрывать выбранный файл.
Возможностей куча. Все их можно будет понять из дефолтных скриптов-примеров(кстати вполне юзабельных) на все случаи жизни.

Воткни bluetooth в комп и погнали!

Anyremote (на компе)

sudo aptitude update
sudo aptitude install anyremote

Теперь узнаем MAC адрес твоего bluetooth.
sudo hciconfig

Видим много много непонятных буков:
hci0: Type: USB
BD Address: 00:02:72:0C:DC:D5 ACL MTU: 1017:8 SCO MTU: 64:8
UP RUNNING PSCAN
RX bytes:63719 acl:2731 sco:0 events:1496 errors:0
TX bytes:956019 acl:4756 sco:0 commands:111 errors:0

Запомни цифры "BD Address". В моем случае это "0002720CDCD5"

Запуск
Вообще предполагается, что ты напишешь\накопипастишь свой собственный мега скрипт и разместишь его по адресу
~/.anyremote.cfg
Тогда можно будет стартовать прогу просто командой
anyremote

Но мы для начала поступим попроще! Стартанем любезно заготовленный пример.
anyremote -f /usr/share/anyremote/cfg-data/Server-mode/all-in-one.cfg

Фактически, это довольно сложный скрипт. Он является загрузчиком других скриптов, попроще. Как правило, простой скрипт управляет одной программой(видеопроигрывателем например). Этот all-in-one позволяет выбрать какой программой управлять.

Anyremote (на телефоне)

Для телефона нам нужна обычная java программка.
Например качнуть по этой ссылке http://sourceforge.net/projects/anyremote/files/
Находим секцию "anyremote-j2me-client" и качаем клиент последней версии. Будет несколько вариаций с различным размером иконок. Качай 32 или 64 - смотря какой у твой мобилки размер экрана.

После того, как найдешь и загрузишь нужный jar файл в телефон, запусти программу в телефоне, найди пункт "enter BT address". И введи следующее

btspp://0002720CDCD5:19

Естественно, что в этой строке будет нужно заменить MAC адрес на свой. Жмем коннект по введенному адресу и вуаля, ты можешь уже управлять компом.


Размышления около темы.

1. Будь осторожен! Если ты будешь переписывать под себя стандартные скрипты и оставишь их в стандартном месте, то при очередном обновлении система заменит их на те, что находятся в обновлении.

2. Есть еще kanyremote... Это небольшой пакетик, фактически ничегошеньки не делает, просто красивенький фронт-енд.
Вообще умеет менять текущий скрип и моргать в трее, наверное бывает полезен, но меня только путал поначалу, а потом только раздражал.

3. Офф сайт программы http://anyremote.sourceforge.net/
Там есть вполне внятная документация, на английском. Особенно пригодится, если нужно будет вникать в тонкости скриптописания для anyremote.

4. Если вдруг что-то незаладится, возможно проблема в том, что ты используешь последнюю версию клиента, но не последнюю серверную версию.
Версию проги на компе(серверная) можно глянуть командой
aptitude show anyremote
После этого качнуть наиболее близкую версию клиента, возможно тебе это поможет. Однако я пока не натыкался на несовместимые версии.

5. Клиентская часть тестилась на Sony Ericsson W700i (полный аналог сверхпопулярного SE K750).
Что еще более важно, jar файлик замечательно установился и работал на Nokia 5530 (под управлением Symbian 9.4 touch)

6. Мои скрипты (mplayer и amarok2) можно найти по адресу:
Сразу предупреждаю, ничего выдающегося... Просто удален лишний мусор и слегка подтюнены стандартные скрипты.

Удачного полеживания с пультом ))