суббота, 19 ноября 2011 г.

Настройка терминала под StumpWM (FreeBSD)

То, как выглядит терминал (xterm) при использовании StumpWM - форменное издевательство. Для себя я его немного подстроил - создал файл ~/XTerm со следующим содержимым:


XTerm*rightScrollBar: True
XTerm*scrollBar: True
XTerm*saveLines: 1000
XTerm*foreground: grey
XTerm*cursorColor: grey
XTerm*background: black
XTerm*faceName: terminus
XTerm*faceSize: 12 
 
Получилось вполне себе неплохо.
 

понедельник, 7 ноября 2011 г.

Обновление данных из другой таблицы

UPDATE tb_dest
   SET code = s.code
FROM tb_dest d
INNER JOIN tb_source s
ON d.sid = s.sid
WHERE d.did = 100
 
Все время забываю, как это делается :) 

среда, 21 сентября 2011 г.


Потрясающая работа на барабанах!

вторник, 13 сентября 2011 г.

При попытке загрузить подсистему с помощью QuickLisp в SBCL получил ошибку следующего вида:
* (ql:quickload "chillax")

debugger invoked on a LOAD-SYSTEM-DEFINITION-ERROR in thread #
"initial thread" RUNNING
{1002928DA1}>:
Error while trying to load definition for system chillax from pathname
/home/user/quicklisp/dists/quicklisp/software/chillax-20110522-git/chillax.asd:

decoding error on stream
#
for "file /home/user/quicklisp/dists/quicklisp/software/chillax-20110522-git/chillax.asd"
{100386B081}>
(:EXTERNAL-FORMAT :ASCII):
the octet sequence (195) cannot be decoded.

Type HELP for debugger help, or (SB-EXT:QUIT) to exit from SBCL.

restarts (invokable by number or by possibly-abbreviated name):
0: [ATTEMPT-RESYNC ] Attempt to resync the stream at a character boundary
and continue.
1: [FORCE-END-OF-FILE] Force an end of file.
2: [INPUT-REPLACEMENT] Use string as replacement input, attempt to resync at
a character boundary and continue.
3: [ABORT ] Abort loading file "/home/user/quicklisp/dists/quicklisp/software/chillax-20110522-git/chillax.asd".
4: Give up on "chillax"
5: Exit debugger, returning to top level.

((FLET #:LAMBDA1713) #)
0] 5

Решение, быть может, не очень красивое, зато надежное:


помещаем в .sbclrc строку

(setf sb-impl::*default-external-format* :utf-8)

воскресенье, 11 сентября 2011 г.

С удовольствием слушаю записи групп Nickelback и 3 Doors Down. Оказалось, что в работе над альбомами Nickelback — Dark Horse, Nickeback — All the Right Reasons и Three Doors Down — Seventeen Days принимал участие один и тот же ударник — Daniel Adair. Вот почему мне исполнение показалось очень похожим!

суббота, 3 сентября 2011 г.

Кто на свете всех быстрее?

http://shootout.alioth.debian.org/
Известный сайт, на котором проводятся бенчмарки разных языков программирования.
Можно использовать, чтобы понять, почему не стоить делать сайты на PHP и почему это можно нужно делать на Лиспе.

пятница, 2 сентября 2011 г.

Если бы языки программирования были религиозными учениями

Идея почерпнута из известного текста «Если бы языки программирования были автомобилями».

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

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

PHP — неформальное христианство (в оригинале Cafeteria Christianity — не нашёл перевода). Оно борется с Java за рынок веб-приложений. Заимствует некоторые концепции из C и Java, но только те, которые ему нравятся. Возможно, оно не настолько последовательно, как другие языки, но по крайней мере даёт много свободы и, ВРОДЕ КАК, сохраняет основную идею. Да, и ещё: понятие «goto hell» там отброшено.

С++ — ислам. Основан на C, но не только сохраняет все его запреты, а ещё и добавляет поверх них большую кучу собственных. Он настолько разнообразен, что из него может проистекать всё, что угодно — от чудовищных зверств до прекрасных произведений искусства. Последователи этой религии убеждены, что C++ — универсальный язык для всего, оптимальный в любой ситуации, и могут разозлиться, если вы не согласитесь. Наиболее радикальные адепты будут угрожать вам физической расправой, если вы нелестно выскажетесь о самом языке или его создателе.

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

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

Haskell (ну вот, добрались!) — таоизм (даосизм). Он настолько не похож на другие языки, что далеко не все понимают, как с его помощью вообще можно сделать что-то работающее. Его адепты верят, что в их руках — подлинный ключ к мудрости, но эта мудрость недоступна большинству смертных.

Эрланг — индуизм. Ещё один странный язык, непонятно как применимый на практике, но, в отличие от других современных языков, основан на идее большого числа одновременно существующих богов.

Perl — религия вуду. Беспорядочный набор невнятных заклинаний, которые требуют кровь козлёнка, необратимо разлагающих твою душу. Часто используется, если шеф приносит новую срочную работу в девять вечера в пятницу.

Lua — викканство. Пантеистический язык, который можно легко приспособить к особенностям местной культуры, где бы вы ни оказались. Он предоставляет много свободы, включая такие действия, которые в более традиционных религиях считались бы магическими. Сильно связан с луной. (Примечание переводчика: Lua — «луна» на португальском).

Ruby — неоязычество. Смесь разнородных представлений и верований, собранных в кучу, отдалённо напоминающую язык программирования. Число его адептов быстро растёт, и, хотя многие относятся к ним с подозрением, они, как правило, не хотят ничего дурного.

Python — атеизм. Прост, нетребователен, не нуждается в чём-либо кроме здравого смысла. Многие последователи утверждают, что освободились от давления других языков и снова открыли для себя удовольствие от программирования. Есть также мнение, что Python — что-то вроде псевдокода.

COBOL — язычество. Когда-то он был весьма распространён и существенен; сейчас — практически мёртв (и слава богу). Хотя его ритуалы порой пугающи, до сих пор находятся люди, настаивающие на его сохранении.

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

LOLCODE — пастафарианизм (примечание переводчика: вера в Летающего Макаронного Монстра). Искусственное образование, появившееся в Интернете, которое никто не принимает всерьёз, несмотря на попытки его развивать и пропагандировать.

Visual Basic — сатанизм. Единственное отличие в том, что быть сатанистом, не продавая свою душу, всё-таки можно.

среда, 17 августа 2011 г.

Гиперполиглот

Сайт http://hyperpolyglot.org/ содержит очень интересное сравнение языков программирования. На разных языках (по группам) выполнены некоторые задачи и очень наглядно видно, как проявляется различие языков.

вторник, 16 августа 2011 г.

Дураки у дороги

По делам оказался в славном городе Москве. Прилетел в Домодедово.

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

В хорошем расположении духа иду покупать билет на аэроэкспресс и вижу картину — толпа народа стоит в кассу к тетеньке, которая продает билеты, а рядом стоит пять или шесть автоматов по продаже билетов. Привычка? Бог его знает. Стало интересно, автоматы не работают что ли? Подошел, посмотрел — работают! Купил билет и пошел на перрон.

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

Ладно, думаю, куплю на вокзале. Ага, сейчас же!

Приезжаю на Павелецкий вокзал, вхожу в зал метрополитена и обалдеваю — народ стоит начиная от дверей! Дальше начинается самое смешное. Экспресс-касса, где можно купить один-два билета (очередь человека 4, движется быстро) закрылась перед носом на обед (в девять утра!). Автоматы по продаже билетов не принимают купюры более 100 рублей, а мелочь с завидной постоянностью «жрут» и не выдают билеты. В кассы к тетенькам стоять не стал — там по 30 человек в окошко, решил все же с автоматом «пообщаться». Народ тупит, автомат тупит. Скормил автомату 150 рублей, получил заветный билетик и пошел.

К чему я это все? Да к тому, что автоматы по продаже билетов на метро должны стоять на каждом углу, уж по крайней мере в аэропорту должен быть. Кроме того, что мешает договориться метрополитену с авиакомпаниями, которые летают в Москву и предлагать купить билеты на метро? Или вообще, распространять билеты по авиакомпаниям? Это же не скоропортящийся продукт, могут и полежать.

О людях никто не думает...

суббота, 2 июля 2011 г.

Перевернутая изображение в Skype под FreeBSD на Asus K52J

Камера на Asus K52J заработала не вверх ногами в Skype вот при таком вызове:

#!/bin/sh
LIBV4LCONTROL_FLAGS=3 LD_PRELOAD=/usr/lib/libv4l/v4l2convert.so /usr/local/share/skype/skype --resources=/usr/local/share/skype

LIBV4LCONTROL_FLAGS=3 отвечает за зеркалирование по вертикали и горизонтали, v4l2convert.so за выполнение зеркалирования (см. исходники v4l-utils).
Еще помогла загрузка sysvshm.ko, прописанная в /boot/loader.conf, хотя kldload sysvshm завершался до этого с ошибкой.

среда, 1 июня 2011 г.

четверг, 26 мая 2011 г.

Разработчики — гады

Есть разработчики, которые про пользователей не думают совсем.
Учебные курсы, в которых из окошка не скопировать текст, само окошко не разворачивается на экран и не масштабируется (причем некоторые картинки в эту «бойницу» не помещаются), да еще отваливается по таймауту — форменное издевательство.

Я тоже разработчик, кстати. Ко мне это тоже применимо.

вторник, 10 мая 2011 г.

Flash в Firefox 4 на FreeBSD 8.2

Открываем /etc/make.conf и добавляем следующие строки в конец файла:
OVERRIDE_LINUX_BASE_PORT=f10
OVERRIDE_LINUX_NONBASE_PORTS=f10
Сохраняем и выходим. Далее если у вас уже установлен linux_base любой версии, то переименовываем его директорию
# mv /usr/compat/linux/ /usr/compat/linuxold1
Затем, обновляем linux_base до последней версии, если он уже стоит или устанавливаемпереуснавливаем linux_base-f10.
# cd /usr/ports/emulators/linux_base-f10/ && make deinstall install clean
Далее устанавливаем официальный Flash Player от Adobe:
# cd /usr/ports/www/linux-f10-flashplugin10/ && make install clean
Добавляем в /etc/fstab следующие строки:
linproc /usr/compat/linux/proc linprocfs rw 0 0
linsys /usr/compat/linux/sys linsysfs rw 0 0
Далее устанавливаем nspluginwrapper:
# pkg_add -r nspluginwrapper
и монтируем наши linprocfs и linprocsys:
# mount /usr/compat/linux/proc
# mount /usr/compat/linux/sys
Затем добавляем в /etc/rc.conf строку linux_enable=»YES» и проверяем загружен ли linux.ko модуль
# kldstat | grep linux
если не загружен то загружаем:
# kldload linux
Дале запускаем некоторые дополнительные linux сервисы:
# /etc/rc.d/abi start
# /etc/rc.d/sysctl start
Затем:
# rehash
и выполняем уже под своим пользователем
% nspluginwrapper -v -i /usr/local/lib/npapi/linux-f10-flashplugin/libflashplayer.so
чтобы посмотреть подключенные плагины набираем
% nspluginwrapper -l


От себя добавлю, что если Firefox загружен, надо рестартовать. Кроме того, мне манипуляции с make.conf не потребовались, я ставил сразу /usr/ports/www/linux-f10-flashplugin10/

Оригинал

среда, 4 мая 2011 г.

Рисование путей в Qt

Странное дело, при рисовании путей в Qt при помощи scene.addPath(QPainterPath) путь, нарисованный по часовой стрелке отличается визуально от пути, нарисованному против часовой стрелки. С чем это связано, пока непонятно, однако есть подозрение, что это связано с antialiasing.

вторник, 12 апреля 2011 г.

Проблема с сетью в Ubuntu

Инсталлирую на ноутбуке Ubuntu 9.10. Сеть не хотела подниматься ни в какую.
Два вечера провел в поисках, поэтому сделаю запись.

Задача:
Имеется wi-fi роутер, к которому коннектится ноутбук. FreeBSD с этого же самого ноутбука прицепилась с первого раза (даже удивительно было).
На Ubuntu вручную прописаны настройки сети (т.е. в /etc/network/interfaces), как, например, в этом материале.
Нужно добиться работоспособности сети.

Симптомы:
ping идет нормально, страницы размером менее 1 кб (примерно) грузятся, больше – нет. Начинается загрузка, появляется заголовок и все. Как будто DNS на пол-дороге отваливается.
apt-get не может определить имена сайтов, куда стучаться надо и ничего не сгружает.

Решение:

объяснение проблемы:
линуксовые системы сначала пытаются получить ipv6 адрес, а железка вместо ответа «я тебя не понял», как должна бы по стандарту (после этого линукс попросит ipv4 адрес и всё благополучно завершится), отдаёт 1.0.0.0. ping работает, потому что он никогда не просит ipv6 адрес (для этого есть ping6). после удачного пинга некоторое время будет работать всё остальное, т.к. ответ dns кешируется.

итак, существует два способа пофиксить баг, пока linux-сообщество не включит фикс в следующие релизы:

проверенно, работает:
1. вручную прописать dns-серверы провайдера в /etc/resolv.conf
2. запретить изменения dns-конфигурации командой: chattr +i /etc/resolv.conf

сам не проверял, но видимо работает:
1. sudo apt-get install bind9
2. в файле /etc/dhcp3/dhclient.conf раскомментировать строчку "prepend domain-name-servers 127.0.0.1;"

всем спасибо.
Я сделал вариант «проверено, работает». Действительно, работает.
Спасибо http://cybotoy11.livejournal.com/.

Windows и FreeBSD нормально работали потому, что у них нет IPv6.


понедельник, 11 апреля 2011 г.

Взгляд на безопасность

Почему в Windows в обязательном порядке надо использовать антивирус и не нужно этого делать в *nix системах?
Ответ прост – в этих системах разные подходы к обеспечению безопасности.

В Windows доминирует подход «разрешили все, потом что-то ограничили». В *nix используется другой подход – «все запрещено, то что нужно – откроем».
Когда вы работает в свежеустановленной Windows, да еще и с правами администратора, то у вас в системе много мест, которые легко повредить. Понятно, что существуют условности в виде предустановленных политик, которые меняются от дистрибутива к дистрибутиву, понятно, что можно всех пользователей загнать в группу гости и т.д. Речь не об этом. Простой пользователь Windows может нанести системе очень серьезный урон даже не обладая администраторскими правами. А учитывая наличие брешей в системе (хоть и оперативно закрываемых, но кто держит WSUS или Automatic updates включенным?), часто даже администраторскими правами обладать не надо.
В *nix все ровно наоборот. Создаваемый пользователь настолько бесправен, что надо сильно постараться, чтобы как-то навредить системе. Для того, чтобы пользователь мог нанести ощутимый урон системе, его надо или внести в большое количество групп, или сделать суперпользователем. Да, работая под root'ом, можно сильно дров наломать. Система рута не переспрашивает. Сказал том удалить, значит удалить. А то, что это была живая база данных или файловое хранилище, ну так это не проблемы системы, это проблемы пользователя.
Строго говоря, и в Windows, и в *nix можно обеспечить очень высокий уровень безопасности. Для этого есть множество технических и организационных способов. Но уровень безопасности «из коробки» в *nix намного выше, чем в Windows.
Поэтому-то и нет необходимости держать антивирус для *nix систем.

Бонус: статья Криса Касперски о том, как можно жить без антивируса на Windows.

понедельник, 4 апреля 2011 г.

iPhone в качестве usb-модема на FreeBSD

Оригинальная статья (англ.)

FreeBSD 8.2

iPhone в качестве usb-модема использовать можно.
Порядок действий такой (предполагается, что iPhone умеет выходить в интернет по 3G или Edge):
  • На FreeBSD устанавливаете из портов comms/libimobiledevice, по зависимостям ставится также comms/usbmuxd.
  • Строите программу сцепки:
git clone git://github.com/dgiagio/ipheth.git
$ cd ipheth/ipheth-pair
$ cc -Wall -O2 ipheth-pair.c -o ipheth-pair -L/usr/local/lib -I/usr/local/include -limobiledevice
  • Включаете режим модема на iPhone (Настройки-Основные-Сеть-Режим модема, при запросе выбрать USB).
  • Подключаете iPhone к usb.
  • Выполняете последовательность команд (от root):
kldload if_ipheth
usbmuxd -U root
./ipheth-pair
dhclient ue0
Первая команда загружает модуль ядра, создающий интерфейс ue0, вторая запускает мультиплексор, связывающий ОС с iУстройствами. ipheth-pair отвечает за использование режима модема (собственно, после запуска этой программки на экране iPhone начинает плавно мигать синяя надпись "Режим модема"). Ну а последняя назначает IP-адрес на интерфейс ue0.

Если все сделано, то сразу после этого появляется интернет-соединение.

Заметка, собственно, сделана через iPhone.

вторник, 29 марта 2011 г.

Чего мне на Windows не сидится?

Windows, если кто не в курсе, денег стоит. Это, конечно, для многих людей не является принципиальным вопросом: при покупке компьютера он должен работать (в интернет ходить, кино показывать, музыку играть). Тем более, что в цене компьютера стоимость операционной системы неочень заметна.

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



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

Это способ мышления. Если твой инструмент похож на молоток, то все твои задачи похожи на гвозди. Я не ярый противник Windows (в конце концов эта система меня пока кормит), но Windows навязывает пути решения проблем. Не спорю, многие задачи в Windows решаются легко и непринужденно, но отход от колеи часто становиться болезненным. И приходится либо выдумывать, либо покупать.

Это сложно. Честное (легальное) пользование Windows весьма проблематично. Правда!

Кто-нибудь читал лицензионные соглашения? Я читал. Лицензия на Windows написана так, чтобы можно было сойти с ума до того, как ты минуешь середину текста. И после покупки ты обязан это соблюдать. Любое нарушение влечет за собой потерю лицензии, как следствие, копия становится нелегальной. Домашнему пользователю с одной-одвумя инсталляциями это, быть может, не очень заметно, а вот когда счет на лицензии идет сотнями, да еще и пересортица, тогда поддерживать банк лицензий ой как не просто. И это только Windows. А ведь еще и другие программы используются. Антивирус, бухгалтерии всевозможные с CADами.

Это дорого. Стоимость честного владения Windows высока. Постоянно меняются версии операционных систем, выводятся одни, вводятся другие (не устаревая, как это утверждают маркетологи, морально!) Хроническая необходимость upgrade у меня вызывает неприязнь. Нет, конечно, поначалу эффект новизны интересен. Но когда производишь обновление парка компьютеров да переписываешь внутреннюю документацию только потому, что Win2k не работает на новом железе, это знаете ли, утомляет. Другие ОС тоже надо обновлять, но за это, по крайней мере, не платишь! Мне еще не доводилось обновлять парк техники под Linux или BSD (надеюсь, что пока). Но я знаю, что проблем с покупкой уж точно не будет.


И, наконец, последнее.

Может несколько пафосно, но операционная система — это еще и философия.

За Windows стоит философия торговца. Это ни хорошо, ни плохо — это факт. Все в Windows прямо или косвенно крутится вокруг денег.

За *nix системами стоит философия свободы кода. Свобода доступа к коду, свобода использования кода, свобода изменения кода. Именно из-за своей философии есть сторонники у обеих систем. У Windows пока больше. Подозреваю, что так будет и дальше, но буду надеяться, что это не будет продолжаться вечно.