Попался компьютер (с Intel Atom), в котором, не смотря на все установки в BIOS, LPT-порт не попадал в EPP-моду. Симптоматика стандартная — EPP-timeout не сбрасывается. Оказалось, что контроллер W83627D, несмотря на все установки BIOS, оставался в ECP-моде, либо сбрасывался туда по какой-то причине.
Данный контроллер имеет служебный режим и его можно переключать в нужную моду прямо на ходу. Ничего не взломав, не сломав и не испортив, в интернете можно даже найти его полное описание, где все нужные команды содержатся. Кроме того, полезной подсказкой является кусок исходников ядра Linux, а именно parport_pc.c.
Запуск enable_epp добавляется например в udev.
Книги по C++
За последний месяц уже два человека спросили какие книжки читать чтобы изучить C++.
Обращение к незнакомцу.
Если вы владеете C++ в совершенстве, данный пост может глубоко задеть ваши религиозные или иные чувства. Мне бы этого очень не хотелось, поэтому чтобы избежать этого — не стоит продолжать чтение. Спасибо за внимание.
Во-первых, новый стандарт (C++11) выпустили, а книжек по новому стандарту пока еще мало написали. Но в этом поможет краткий справочник на странице Страуструпа.
Во-вторых, есть такой двухтомник:
В-третьих, конечно же есть:
В-четвертых:
В-пятых:
Обновление, в-шестых:
Все книжки есть (или были) в магазинах или в библиотеке.
Обращение к незнакомцу.
Если вы владеете C++ в совершенстве, данный пост может глубоко задеть ваши религиозные или иные чувства. Мне бы этого очень не хотелось, поэтому чтобы избежать этого — не стоит продолжать чтение. Спасибо за внимание.
Во-первых, новый стандарт (C++11) выпустили, а книжек по новому стандарту пока еще мало написали. Но в этом поможет краткий справочник на странице Страуструпа.
Во-вторых, есть такой двухтомник:
- Брюс Эккель — Философия С++. Введение в стандартный С++
- Брюс Эккель, Чарльз Эллисон — Философия С++. Практическое программирование
В-третьих, конечно же есть:
- Бьерн Страуструп — Язык программирования С++
- Николай Джосьютис — C++. Стандартная библиотека
В-четвертых:
- Андрей Александреску — Современное проектирование на С++
В-пятых:
- Дэвид Вандевурд, Николай Джосьютис — Шаблоны C++. Справочник разработчика
- Герб Саттер — Решение сложных задач на С++
- Герб Саттер — Новые сложные задачи на C++
- Герб Саттер, Андрей Александреску — Стандарты программирования на С++
- Эрих Гамма, Ричард Хельм, Ральф Джонсон и Джон Влисседс — Приемы объектно-ориентированного проектирования
Обновление, в-шестых:
- Стивен Прата - Язык программирования C++. Лекции и упражнения, 6-е издание — перевод оригинального названия "C++ Primer Plus" весьма спорен. Вы где видели конспект лекций на 1200 страниц печатного текста? Тем не менее, в новом издании автор не только рассказал о почти всех нововведениях C++11, но и еще постарался объяснить зачем все это надо и как этим пользоваться.
Все книжки есть (или были) в магазинах или в библиотеке.
ESO Midas 11SEP1.2
Отправил собираться новую версию.
Заодно осилил source service для build service. Первый приз получает сервис под названием download_files (надо в файл _service в проекте воткнуть вот это):
Он не просто прочитает spec-файл и попытается скачать все файлы для которых там есть полный url в строчке Source, он к тому-же (это же чудо!) перепакует их сам в нужный формат и сам разберется что скачивать. Например, допустим, Source0 указан вот так: ftp://ftp.eso.org/pub/midaspub/11SEP/sources/%{version}.tar.bz2, при этом на самом сервере нет архива tar.bz2, там есть только tar.gz. Так вот, умный сервис скачает такой архив, который там физически есть, и перепакует его в такой, который нужен.
Документации (как и во всем opensuse) нет, поэтому предлагается смотреть в /usr/lib/obs/service и там можно прочитать в исходниках какие сервисы есть, какие у них параметры и что делают.
p.s. Вообще, считаю, следующий гениальный шаг будет когда build service научится сам автоматически отслеживать хранилища типа PyPi, CPAN, etc и автоматом собирать новые пакеты и пересобирать обновленные. Закоммитил ты свой модуль новый питонный в PyPi, а он через 15 минут уже есть для opensuse в виде пакета. Красота.
Заодно осилил source service для build service. Первый приз получает сервис под названием download_files (надо в файл _service в проекте воткнуть вот это):
<services> <service name="download_files"> <param name="recompress">yes</param> </service> </services>
Он не просто прочитает spec-файл и попытается скачать все файлы для которых там есть полный url в строчке Source, он к тому-же (это же чудо!) перепакует их сам в нужный формат и сам разберется что скачивать. Например, допустим, Source0 указан вот так: ftp://ftp.eso.org/pub/midaspub/11SEP/sources/%{version}.tar.bz2, при этом на самом сервере нет архива tar.bz2, там есть только tar.gz. Так вот, умный сервис скачает такой архив, который там физически есть, и перепакует его в такой, который нужен.
Документации (как и во всем opensuse) нет, поэтому предлагается смотреть в /usr/lib/obs/service и там можно прочитать в исходниках какие сервисы есть, какие у них параметры и что делают.
p.s. Вообще, считаю, следующий гениальный шаг будет когда build service научится сам автоматически отслеживать хранилища типа PyPi, CPAN, etc и автоматом собирать новые пакеты и пересобирать обновленные. Закоммитил ты свой модуль новый питонный в PyPi, а он через 15 минут уже есть для opensuse в виде пакета. Красота.
PAM и ssh-agent
Захотелось, чтобы можно было входить в систему, используя пароль от ssh-ключа, и при этом чтобы ssh-agent запускался и больше пароль никогда не спрашивал. Все это можно сделать используя модуль pam_ssh для PAM (Pluggable Authentication Modules for Linux).
Настроить его очень просто: надо воткнуть в auth
В PAM модули работают как и везде: динамически загружается .so-файл, и запускаются у него функции с наперед известными именами, куда передаются разные параметры, с которыми модуль знает что делать. Первая строчка, таким образом, ответственна за проверку пароля к ssh-ключу, вторая строчка — запуск правильного процесса ssh-agent.
Запуская ssh-agent, pam_ssh.so делает в ~/.ssh файл с именем в духе agent-$HOSTNAME и содержанием вида:
Вообще говоря, после этого можно в .profile или .bashrc просто выполнить этот файл как кусок скрипта. После этого нужные переменные среды окружения будут иметь нужные значения и ssh правильно подцепит свой агент. Однако, в PAM предусмотрен модуль pam_env ответственный за установку переменных среды окружения. Автоматом почему-то ничего не заработало, но заработало после добавления в /etc/security/pam_env.conf строчек:
Настроить его очень просто: надо воткнуть в auth
auth sufficient pam_ssh.soа в session, соответственно
session sufficient pam_ssh.so
В PAM модули работают как и везде: динамически загружается .so-файл, и запускаются у него функции с наперед известными именами, куда передаются разные параметры, с которыми модуль знает что делать. Первая строчка, таким образом, ответственна за проверку пароля к ssh-ключу, вторая строчка — запуск правильного процесса ssh-agent.
Запуская ssh-agent, pam_ssh.so делает в ~/.ssh файл с именем в духе agent-$HOSTNAME и содержанием вида:
SSH_AUTH_SOCK=/tmp/ssh-qjtjCQkp2852/agent.2852; export SSH_AUTH_SOCK; SSH_AGENT_PID=2853; export SSH_AGENT_PID; echo Agent pid 2853;
Вообще говоря, после этого можно в .profile или .bashrc просто выполнить этот файл как кусок скрипта. После этого нужные переменные среды окружения будут иметь нужные значения и ssh правильно подцепит свой агент. Однако, в PAM предусмотрен модуль pam_env ответственный за установку переменных среды окружения. Автоматом почему-то ничего не заработало, но заработало после добавления в /etc/security/pam_env.conf строчек:
SSH_AUTH_SOCK DEFAULT="" OVERRIDE=@{SSH_AUTH_SOCK}
SSH_AGENT_PID DEFAULT="" OVERRIDE=@{SSH_AGENT_PID}
GNU R: график плотности числа точек
Иногда бывает нужно построить то, что называется диаграммой рассеяния (scatter-plot). Когда число точек на графике превышает некоторый предел, график становится почти бесполезен потому-что на нем появляется гигантская клякса (это точки (или другие символы, которые изображаются) многократно налезают друг на друга). В таких случаях предлагается строить график плотности числа точек. Сначала нужно вычислить её (хоть каким-нибудь образом), в GNU R для этого предусмотрена функция kde2d из пакета MASS. Потом полученный объект можно рисовать через contour.
Пример который рисует отличную разноцветную диаграмму:
Пример который рисует отличную разноцветную диаграмму:
density <- kde2d(x1,x2,lims=c(lower1,upper1,lower2,upper2)) mycol <- function(n) gray((n+1):0/(n+1)) filled.contour(density,color.palette=mycol)filled.contour понимает title и все остальное.
smtp_bind_address
Параметр smtp_bind_address для postfix позволяет привязать ip-адрес для соединений. Бывает полезно, когда на одном интерфейсе привязано несколько(много) ip-адресов, при этом одинаково доступный relayhost предпочитает один определенный (либо явно, либо по причине что один из адресов не резолвится в обе стороны).
udev и video4linux
Оказывается, /lib/udev/rules.d/60-persistent-v4l.rules делает символические ссылки на устройства video4linux (/dev/videoN): /dev/v4l/by-id и /dev/v4l/by-path.
Очень удобно оказалось использовать, например, /dev/v4l/by-id/usb-0471_0329_01690000A6480288-video-index0 вместо /dev/video0 (или /dev/video1), когда камер много.
Очень удобно оказалось использовать, например, /dev/v4l/by-id/usb-0471_0329_01690000A6480288-video-index0 вместо /dev/video0 (или /dev/video1), когда камер много.
Подписаться на:
Сообщения (Atom)