среда, 22 февраля 2012 г.

Префикс протокола в адресной строке браузера

Последние оптимизации адресной строки в современных браузерах привело к скрытию идентификатора протокола. Раньше было: http://www.site.com, а сейчас стало www.site.com. В принципе ничего страшного, если бы при копировании из адресной строки, не копировался этот префикс.

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

  • Firefox (about:config)

    browser.urlbar.trimURLs = false
     
  • Opera (about:config)

    Отметить пункт "Show Full URL"
И теперь строка адреса ведет себя как и раньше.

вторник, 21 февраля 2012 г.

Отключение подсветки синтаксиса в Vim для больших файлов

Каждый раз, открывая большой файл, ругаюсь, что не запретил подсветку синтаксиса в VIM. Переполнив чашу своего терпения, я полез в гугл за ответом. В моем случае подсветка синтаксиса еще не разу не была востребована на файлах больше 512kB, поэтому я отключаю ее на файлах большего размера:

~/.vimrc

"Disable syntax highlight on files bigger than 512kB
:au BufReadPost * if getfsize(bufname("%")) > 524288 | set syntax= | endif

UPDATE: Решил выкладывать свои dot файлы на сервер.

понедельник, 20 февраля 2012 г.

Выбор телевизора или монитора для просмотра в MythTV

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

Поскольку чаще всего нужно запускать просмотр на телевизоре, то по-умолчанию скрипт предлагает именно эту опцию. Если пользователь соглашается, то MythTV запускается на телевизоре (DISPLAY=:0.1). При этом вывод звука идет через HDMI.

Если же при запуске был выбран монитор, то используются дефолтные настройки (DISPLAY=:0.0) и вывод звука на колонки.

Содержимое ~/bin/launch-mythtv

#!/bin/bash

zenity --question --title="MythTV" --text="Запустить MythTV на телевизоре?"
case $? in
  0)
    exec mythfrontend -display :0.1 -O AudioOutputDevice=ALSA:hdmi0 > /dev/null 2>&1 &
    ;;
  1)
    exec mythfrontend > /dev/null 2>&1 &
    ;;
esac

Содержимое ~/.asoundrc

ctl.hdmi0 {
  type hw
  card 1
}

pcm.hdmi0 {
  type plug
  slave.pcm "dmixed"
}

pcm.dmixed {
  type dmix
  ipc_key 1000
  max_periods 0
  slave.pcm "hw:1,9"
}

среда, 15 февраля 2012 г.

Запись звука в linux с выхода звуковой карты

Понадобилось записать звук из браузера (точнее его флеш плагина). Самый простой и надежный способ - соединить выход и линейный вход кабелем и записать звук. Под рукой у меня не оказалось такого кабеля. Поиски в гугле привели меня на страницу, где подробно описаны разные способы организовать loopback для записи звука. Получилось:

$ cat ~/.asoundrc
pcm.teewav {
   type empty
   slave.pcm "tee:default,'/home/andrey/tmp/alsa-out.wav',wav"
}

Чтобы флеш плагин начал использовать вывод звука через этот PCM нужно экспортировать переменную окружения

$ env FLASH_ALSA_DEVICE=teewav iceweasel

NOTE: Результат будет окончательно записан только после закрытия программы, которая использовала teewav для вывода звука.

Интересные ссылки по теме: 

понедельник, 13 февраля 2012 г.

Отопительное

За всю зиму только один день в офисе был приятным. Это было когда завоздушились батареи центрального отопления. Правда их быстро починили и теперь мы снова изнываем от жары.

Температура: ~28°C, относительная влажность: ~14%
Скорее бы закончился отопительный сезон...

четверг, 9 февраля 2012 г.

Первый блин комом

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

В результате поездки на радиорынок неделей ранее, были закуплены недостающие компоненты и расходные материалы. На замену своему старенькому ЭПСН-25 я обзавелся паяльной станцией (специально не стал брать станцию с феном, вместо этого взял простой и недорогой Lukey 936A). Позже попользовавшись его дефолтным жалом (похоже на шило), докупил жало в виде скошенного клина.

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

Схема
Плата
Для изготовления печатной платы был выбран метод ЛУТ, а для травления - раствор хлорного железа. В качестве бумаги для ЛУТ подвернулся один из номеров "Популярной механики". К этому времени заготовка из текстолита уже была вырезана, зачищена до блеска наждачкой нулевкой и обезжирена растворителем.

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

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

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

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

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

Пока остывала печатная плата, я подготовил самодельную микродрель. Проблема этой дрели в том, что ее цанговый патрон хорошо зажимает сверло диаметром 1,2 мм, а остальные либо прокручиваются, либо просто выпадают. Чтобы как-то обойти эту проблему я намотал на сверло 0,8 мм виток к витку проволоку диаметром 0,2мм. Тем самым итоговый диаметр стал 1,2мм который уже можно зажать в цанге.

Подобного хака хватило ровно на одну дырку, на второй сверло вылетело размотав при этом проволоку. Остаток отверстий пришлось сверлить диаметром 1,2мм., что попортило мелкие площадки. На этом мое свободное время в выходные закончилось. Всего от резки текстолита, до окончания сверловки прошло около 3 часов, что в принципе неплохо для первого раза.

В понедельник я запаял на плату все элементы, кроме резистора R5, который задает время разряда конденсатора C1. Перед запаиванием я сделал пару замеров на макетной плате и изменил номинал R5 на 18кОм. После этого резистор был запаян и настал момент первый раз подключить питание на плату. Так устройство выглядит со стороны элементов (снимок сделан уже после попытки оживить плату, так что диода возле реле уже нет):

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

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

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

Макет печатной платы в Eagle CAD (вид сверху)
Готовая печатная плата (вид снизу)
 Тут до меня доходит, что рисунки макета и платы одинаковы, а должны быть зеркально отражены (поскольку вид сверху и снизу), а значит вся разводка платы неверна, как и положение элементов на ней. Следовательно как минимум на активных элементах переполюсовка. На этой ноте я закончил свои полуночные бдения и отправился спать.

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

среда, 8 февраля 2012 г.

Маленькие полезности

VIM


  • подсветка части строки, превышающей длину 80 символов.
    :au BufWinEnter * let w:m2=matchadd('ErrorMsg', '\%>80v.\+', -1)
  • подсветка "trailing spaces".
    :au BufNewFile,BufRead * let b:mtrailingws=matchadd('ErrorMsg', '\s\+$', -1)
  • подсветка символов табуляции среди пробелов.
    :au BufNewFile,BufRead * let b:mtabbeforesp=matchadd('ErrorMsg', '\v(\t+)\ze( +)', -1)
    :au BufNewFile,BufRead * let b:mtabaftersp=matchadd('ErrorMsg', '\v( +)\zs(\t+)', -1)

Так выглядит VIM после добавления вышеперечисленных опций.


SSH


Мне часто приходится заходить на домашний компьютер, SSH которого смотрит только в локальную сеть и недоступен из интернета. Для захода на домашнюю машину используется промежуточный сервер. Для этого сначала лонинюсь на шлюз, а уже с него на домашний комп. Это терпимо ровно до тех пор пока не потребуется передавать файлы.

Один из вариантов - открыть вспомогательное SSH соединение и использовать его для проброса портов домашней машины на компьютер в интернете. Что-то вроде:
laptop $ ssh -N -L 2222:internal:22 gateway
laptop $ scp -P 2222 -r something localhost:

Однако есть более простой способ, который позволяет исключить рутинную операцию. Он заключается в использовании опции ProxyCommand, например для хоста home.local:
Host home.local
HostName your-gateway-hostname-or-ip
ProxyCommand ssh your-gateway-hostname-or-ip nc -q 0 home.local 22
StrictHostKeyChecking no
User your-username

Теперь копирование выполняется также, как и в локальной сети:
 laptop $ scp -r something home.local:

UPDATE: Для использования netcat в ProxyCommand нужно добавить опцию -q 0, иначе netcat остается висеть в процессах после закрытия сессии.

среда, 1 февраля 2012 г.

Scrolling in GNU Screen

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

Скроллинг включается комбинацией Ctrl + a [ . Навигация - стрелки + PgUp/PgDown. Чтобы выйти из режима прокрутки - нажать Esc.

UPD: Тут есть более подробная информация по работе с прокруткой в screen.