Обновить

.NET unmanaged interop — более продвинутые техники

В этой статье я хотел бы дополнить и уточнить детали некоторых вопросов, описанных здесь

Создание COM out-proc сервера


В .NET все-таки существует такая возможность, хоть она и требует некоторых неочевидных действий. Рассмотрим, что нужно сделать в данном случае.
Читать дальше →

10 парадоксов дизайна. Перевод статьи с DesignObserver.com

Я сегодня утром наткнулся на изумительный текст в англоязычном блоге про дизайн. Называется «10 парадоксов графического дизайна». Текст настолько хорош, то я решил перевести и выложить сюда.



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



Читать дальше →

«Simple Login» или «мысли о вечном»

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

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

Дальше, собственно, сама история и концепция :-)
Читать дальше →

Использование WMI в .Net

Хотелось бы поделиться личным опытом использования WMI в .Net приложениях.
Для начала немного теории: WMI — Windows Management Instrumentation, набор интерфейсов для управления операционной системой. Так как данная технология позволяет управлять компонентами системы и приложениями удаленно, она полюбилась многим системным администраторам. В одном проекте заказчики выдвинули нам отдельное требование, что бы была реализована возможность мониторить работу серверной части приложения через WMI. И я хочу поделиться с вами способами этой самой реализации.

Читать дальше →

Практикум по XEN

Проброс PCI в гостевую ОС XEN

Постановка задачи.
В имеющейся структуре виртуализации организовать проброс PCI устройств в гостевую ОС. В нашем случае эти устройства — это контролеры USB. Дополнительные сведения:
* Имеющуяся инфраструктура развернута с использованием ОС SUSE Linux Enterprise Server 10 SP2 (x86_64).
* Гостевые ос работают в контейнере Xen 3.2 в режиме паравиртуализации.
* ОС как на domU так и на dom0 идентичны — SLES 10.2 2.6.16.60-0.21-xen #1 SMP x86_64
Оъяснение.
# Поскольку режим работы гипервизора — паравиртуализация — то задействовать параметр usb в дескрипторе VM не получиться.
# В связи с этим необходимо организовать передачу в гостевую ВМ целиком PCI устройства.
# Передача устройств (PciPassthrough) происходит при помощи пары драйверов pciback (в dom0) и pcifront (в domU).
# Политика Novell по поводу этих драйверов весьма сбаланисрована. pcifront скомпилирован в ядро, а pciback доступен в виде модуля.
# Устройства на dom0 не должны быть связанны с драйверами. В нашем случае необходимо запретить загрузу модулей для контроллеров USB, или в ручную перебиндить устройства как указано здесь
# На dom0 должен быть загружен драйвер pciback и ему указаны какие адреса слотов PCI будут изъяты — параметр hide. Уточнить номера слотов — команда lspci
# В дескрипторе ВМ должен быть указан параметр pci, который указывает какие слоты PCI будут проброшены в эту ос.
# На гостевой машине никаких настроек делать не надо. Поскольку pcifront уже в ядре то происходит автоматическое подключение устройств поключенных к указанным в пролом пункте слотам.
# При загрузке гостевой ОС не пугаемся сообщения PCI: System does not support PCI, поскольку например при пробросе USB контролера будет нечто подобное
PCI: setting up Xen PCI frontend stub
PCI: System does not support PCI
..............
pcifront pci-0: Installing PCI frontend
..............
PCI: Enabling device 0000:00:00.0 (0000 -> 0001)
PCI: Setting latency timer of device 0000:00:00.0 to 64
uhci_hcd 0000:00:00.0: UHCI Host Controller
uhci_hcd 0000:00:00.0: new USB bus registered, assigned bus number 1
uhci_hcd 0000:00:00.0: irq 16, io base 0x00001000
usb usb1: new device found, idVendor=0000, idProduct=0000
usb usb1: new device strings: Mfr=3, Product=2, SerialNumber=1
usb usb1: Product: UHCI Host Controller
usb usb1: Manufacturer: Linux 2.6.16.60-0.21-xen uhci_hcd
usb usb1: SerialNumber: 0000:00:00.0
usb usb1: configuration #1 chosen from 1 choice
hub 1-0:1.0: USB hub found


Настройка.

* создаем файл /etc/modprobe.d/usbpass
options pciback hide=(0000:00:1d.0)(0000:00:1d.1)(0000:00:1d.2)(0000:00:1d.7)
blacklist uhci_hcd
blacklist ehci_hcd


* файл /etc/sysconfig/kernel
MODULES_LOADED_ON_BOOT="... pciback"


* В дескриторе ВМ, в нашем примере /etc/xen/vm/r-hq5 добавляем
....
pci=['00:1d.0','00:1d.1','00:1d.2','00:1d.7']
....

Первоисточники

* [http://www.ibm.com/developerworks/ru/edu/l-lpic1101/section7.html]

* [http://archive.netbsd.se/?ml=xen-users&a=2008-01&t=6270605]

* [http://wiki.xensource.com/xenwiki/Assign_hardware_to_DomU_with_PCIBack_as_module]

* [http://www.wlug.org.nz/XenPciPassthrough]

Слушаем last.fm не пропуская музыкальный поток через прокси сервер.

Как сегодня стало известно, любимый многими сервсис last.fm стал платным.

В связи с этим многие мои друзья, которых я подсадил на last.fm замучали меня вопросом «А как же мне послушать мой любимый last.fm?», ответ «Заплатить денег.» не нашел понимания у людей.

Очевидным решением проблемы является использование прокси сервера, но тут возникает ряд проблем:

1) Использовать прокси сервер для хождения по всему интернету небезопасно и медленно.
3) На большинстве бесплатных прокси музыка время от времени заикается или вообще перестает проигрываться.
2) Идет большое количество трафика через сам прокси сервер, что тоже не хорошо, так как вызывает большую нагрузку на используемый сервер.

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

После небольшого исследования проблемы было найдено следующее решение.

Устанавливаем для firefox плагин foxyproxy он позволяет использовать прокси сервер только для определенных адресов.

В настройках добавляем прокси сервер который мы планируем использовать для доступа к last.fm ( я воспользовался сервисом toonel.net) переходим на вкладку шаблоны URL, тут можно добавить шаблоны двумя путями с использованием RegExp'ов и метасимволов.

В белый список с использованием метасимволов добавляем:
*://*.lastfm.ru/* - русский сайт last.fm
*.last.fm* - сайт last.fm

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

^http://play\.last.fm.*\.mp3
^http://s.*\.last.fm.*\.mp3 - URL с которых воспроизводится музыка
^http://ext\.last.fm.* URL к которым обращается браузер при добавлении трека в избранное или запрещении трека.


Переводим FoxyProxy в режим «Шаблоны Адресов» и пользуемся.

Хочу еще раз подчеркнуть, что, при возможности, я настоятельно рекомендую людям, использующим этот сервис, оформить подписку, я сам это сделал уже довольно давно.

Сервис GoogleCalendar2Twitter.

Пользуюсь календарём от Google. Храню там расписание занятий и прочие события. Пользуюсь Twitter-ом, но не очень активно. Возникла идея автоматической публикации событий, которые я запланировал, в мою twitter-ленту. Для решения этой небольшой задачки был создан сервис GoogleCalendar2Twitter на платформе Google AppEngine (темболее, она теперь поддерживает мою любимую Java). На данный момент нет поддержки OAuth, которую я одолеть пока не смог. Несомненно появиться в будущем. AppEngine оставил приятные ощущения от использования, хотя отсутствие плагина для NetBeans немного огорчает.

Еще раз о доказательствах лицензионности ПО Микрософт

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

Что нужно понимать (думаю, что это знают все посетители данного ресурса, но на всякий пожарный уточню): при покупке ПО приобретается не сам продукт. Приобретаются только права на использование продукта, причем в том объеме и границах, которые определил правообладатель (и законодательство РФ, это важно!). Т.е. ПО можно использовать только так, как указано в соглашении (лицензии).

Дальше очень много букоф.

Читать дальше →

Рейтинг TOP-100 ведущих студий рунета 2009 отжигает

В этом топике я приведу некоторые интересные моменты о «Рейтинге TOP-100 ведущих студий рунета 2009» и экспертной группе TagLine, которая его проводит. А выводы каждый сделает для себя сам, стоит ли доверять такому рейтингу и тем кто его проводит. Все самое интересное далее под катом
Читать дальше →

rdesktop — нормальная раскладка клавиатуры

В статье habrahabr.ru/blogs/ubuntu/28264 описывается как заставить нормально работать rdesktop с переключением раскладки клавиатуры.

Ни к чему такие танцы с бубнами, все есть в комплекте!
Достаточно в качестве опции -k указать common

т.е. rdesktop -k common server

и все! Раскладка у вас будет переключатся без проблем и все символы будут печататься так как должны!

Я думаю это стоит добавить в указанный выше пост, чтобы все знали!

Отлаживаем view-функции в CouchDB из любимого редактора.

Начав работать с CouchDB столкнулся с проблемой отладки view-функций. Пока они тривиальные, проблем нету. Как только что-то сложное и что-то начинает ломаться, отлаживать это — головная боль. Функция log даже на небольшом количестве документов (пара сотен) генерирует огромное количество трафика. Иногда хочется view-функцию тестировать на одном единственном документе. Хуки в коде типа if (doc._id == 'id интересуемого документа') — не лучший выход. Более того, хоть Futon и отличный интерфейс, редактор в браузере — неудобный. Табы, парные стрелки, подсветка синтаксиса — нет ничего. Кроме этого, браузер может в неподходящий момент упасть и похоронить ваш код.

В итоге плюнул и набросал за минуту пару файлов.

select, сокеты и большое количество клиентов

В начале была проблема...


На работе поддерживаю и разрабатываю приложение под Линукс, которое раздает клиентам некий контент. В целом работа каждого клиента выглядит обычно — подключился по TCP/IP и обменивается пакетами с текстовой информацией пока дисконнект не разлучит их. Сервер с своей стороны на каждого клиента создает тред и цикле вызывает select. Пока клиентом было немного — всё работало достаточно стабильно и красиво. Но клиентов становилось больше и было замечено, что количество активных клиентов на сервер застрягло в районе 500-520. При этом нагрузки на сервере особой не было. Увеличение количества серверов давало немного времени, но ведь это не может быть бесконечным. Паралельно была замечена другая проблема — в логе часто начала появляться ошибка "Bad file description" (он же EBADF) и клиента отключало, а они жаловались. Причины подобной ошибки не непонятны. А это уже плохо.


Читать дальше →

TARPIT без патча ядра или patch-o-matic в прошлом

Нередко приходится видеть в логах брутфорс ssh или ftp или не менее назойливый скан httpd-директории. Иногда атаки совершаются не только с внешних адресов, но и с хостов с домашней локальной сети, где куча виндовых пользователей, подхвативших вирусы.
Есть масса способов защититься от этого, и я использую fail2ban. В сравнении с аналогичными программами он обладает более широкой функциональностью и гибкостью — позволяет использовать регексы для нестандартных сервисов и менять правила блокировки. Но хочется не просто защитить свой сервер от атак, а еще и слегка проучить атакующего.
Стандартными средствами iptables этого не сделать, но в расширенном варианте patch-o-matic, патче для ядра linux, есть расширенная цепочка TARPIT, позволяющая создать «ловушку» для нежелательных tcp-соединений. Работает это следующим образом: при обращении к порту, на котором стоит правило TARPIT, атакующий получает в ответ SYN-ACK (биты подтверждения на установление соединения), а так же принудительное установление размера tcp-окна, равным нулю. Это приводит к тому, что атакующая сторона не может передать никаких данных, а все ее попытки разорвать соединение игнорируются. Таким образом, соединение находятся в подвисшем состоянии до истечения тайм-аута (12-24 минут), что расходует ресурсы атакующей машины, но не атакуемой.
Читать дальше →

Хабрапоиск + подсказки поиска (suggestions) в Mozilla Firefox

Навеяно статьей уважаемого logman'а. Решил исправить несправедливую ситуацию для пользователей родного FF. Итак, идея та же самая — реализация встроенных в SearchPlugins предложений поиска (suggestions) в FF по Хабрахабру.
Читать дальше

Поднимаем bluetooth в Ubuntu (до 9.04 версии включительно) на ноутбуке(ах) Toshiba Satelite a200-xxx

Может кому пригодится, этим же по моему и с wifi проблема (если она конечно есть, не было пока возможности проверить) решается:
$aptitude install subversion build-essential linux-source linux-headers-generic
$ cd ~
$ mkdir sources
$ mkdir sources/omnibook
$ cd sources/omnibook
$ svn co omnibook.svn.sourceforge.net
$ cd trunk

открываем файл заголовок в исходниках:
$ gksudo gedit laptop.h

ишем подобные строки (можно первые попавшиеся, там их много), и меняем на соответствующие вашей модели ноутбука, я менял для toshiba satelite a200:
{
.callback = dmi_matched,
.ident = "Toshiba Satellite A200",
.matches = {
DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"),
DMI_MATCH(DMI_PRODUCT_NAME, "Satellite A200"),
},
.driver_data = (void*) TSM70
},

дальше собираем и устанавливаем:
$ make
$ sudo make install
$sudo modprobe omnibook
загружаем собранный модуль:
$ sudo make load
блютуз уже должен заработать, появится значок в области уведомления.
Можно посмотреть тут, что подгрузилось:
$ ls /proc/omnibook
у меня так:
ac battery blank bluetooth cooling dmi hotkeys lcd temperature throttling touchpad version wifi
добавляем модуль в автозагрузку:
$gksudo gedit /etc/modules
добавить строку:
omnibook
Это решение подходит не только для Satelite A200, но и для многих других моделей ноутбуков toshiba и hp, смотрите файл laptop.h (кстати там не все поддерживаемые модели указаны, Satelite A200 как раз не было, поэтому пришлось дописывать самому)
Директорию sources, где мы все проделывали рекомендую не удалять, так как после обновления ядра, собранные драйвера/модули обычно приходится пересобирать:
$ cd sources/omnibook/trunk
$make clean
$make
$sudo make install
$sudo modprobe omnibook
$sudo make load

Mac OS. Создание iso образа диска для бытовых плееров.

Приветствую всех.
Я столкнулся с проблемой, мой DVD плеер не читает диски записанные из mac os.
Через дисковую утилиту(Disk Utility) можно создать только гибридный образ диска, который также не читается плеером.
Конечно можно скачать/купить платный Toast Titanium, но мне нужна только одна функция из всего этого медиакомбайна.
Собственно решение было честно заимствовано с unix систем. Для unix есть комплект консольных утилит cdrtools. Из этого комплекта мне нужна одна только mkisofs.
Ее можно поставить из macports или скачать с официального сайта и собрать самому.
Скачать уже скомпилированную утилиту можно тут (Intel)
Если вы скачали утилиту, ее надо скопировать в /usr/bin

копируем утилиту проставляем права на запуск:

sudo cp mkisofs /usr/bin
sudo chmod a+x /usr/bin/mkisofs

пример запуска:

mkisofs -J -R -V "Film-CD" -o forplayer.iso Films/

Результатом команды будет iso образ с именем forplayer.iso и меткой Film-CD, созданный из директории Films.
В директории Films должны лежать avi файлы с фильмами.

Если нужно сделать образ с DVD фильмом нужно к параметрам добавить опцию "-dvd-video".
Теперь этот образ можно записать стандартным способом.

PS. Если будет востребовано, напишу программу-GUI для mkisofs.

Грамматический трейсинг-сервис на Парсере

Надысь разбирался с дочей с основами английской грамматики, в части точных определений басурманских времен. И буквально попал в глупое положение — смысл английских фраз улавливаю на лету, а вот по точности определения той или иной категории английского времени (не путать со временем по Гринвичу): «фатер ис маст дай».

Школьные учебники наполнены такой избыточной информацией по этим делам, что не оставляют бедному программисту просто никаких шансов! Казалось бы нужна простая блок-схема, которая могла бы свести процесс отыскания точного ответа к минимуму — ан нет! Вместо этого, обычно приводится масса левой информации о том как каждый англичанин с детства пытается врубиться в смысл своих тупых действий, сравнивая и уточняя у своих не менее тупых предков. Каждый автор учебника имеет свои какие-то мысли и методы по вдалбливанию наизусть этих правил до автоматизма, возводя их до самых вершин спама, флуда и совершенно избыточной информации, мало относящейся к существу вопроса. Наиболее адекватным мне показалось объяснение у Драгункина, но и он грешен — НЛП-стсткие приемы (тоесть тоже избыточная информация).

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

В поле ввода вставляем скопированную предварительно фразу или фрагмент текста. Сервис берет только первую сверху из предложенного фрагмента, и распарсивает ее по своему уровню убого-машинного интеллекта. Надеюсь понятно теперь, почему именно Парсер взят рабочим агентом движка такого сервиса?

Напротив каждого «подозрительного» на глагол слова (сразу вместе со служебными глаголами) появляются галочки, которые можно чекать и унчекать. После фидбака валидный вариант распарсивается на предмет точного стандартного времени (не путать со временем по Гринвичу!), принятом у тупых потомков Шекспира и давших миру Пола Маккартни. Соответсвенно, можно давать и несколько релевантных вариантов. И самое главное в этом сервисе — давать характерные варианты для точного восприятия конкретного этого времени. Примеры можно взять опять же у авторов школьных учебников, чтобы их труд все-таки не пропал даром. Вмести с копирайтами и прочим ихним сопутствующим барахлом.

Не буду распространяться о пользе этого сервиса, так как она очевидна! Иначе зачем мне было тут писать? И не буду приводить как можно развить такой полезный штук в глубину и ширину, ибо без реализации описанного элемента в натуре, считаю такие инсинуации неприличными, не подобающими, а то и попросту недалекими :)

P. S. С Парсером я личных дел тоже не имел, но в этом вопросе я пока оптимист. Иначе тогда зачем он нужен?

ASP.NET MVC + Windows Azure + Providers

В данной статье я бы хотел рассказать, как запустить полноценное MVC приложение на Windows Azure.

Если вы не хотите проделывать все описанные ниже операции, вы можете скачать архив с готовым проектом по этой ссылке.

Читать дальше →

Идея стартапа Shopping Manager.

Доброго времени суток. Уже несколько недель мучает меня идея одного стартапа. Есть несколько заинтересованых людей. Основная идея моя, написал некотоый документ который распространил среди заинтересованых людей. Содержит в себе собраные идеи в кучу и все что можно, необходимо отбрать что и в каком порядке реализовавать. Сам я студент и не имею опыта ни руководства ни создания проектов, ничего такого. Что можете подсказать как сделать первые шаги и что делать не стоит. И пользовались бы вы таким сервисом? Жирным выделено то что я считаю наиболее важным. Город не столица, но большой.
Читать дальше →

Mozilla 2.0

Пользуюсь я много лет браузером mozilla много чего пережил — и смену имени на seamonkey и переименование в дебиане в iceape… и последующие выкидывание этого самого iceape из lenny — зачем ??? он ведь там вполне рабочий был…
и уже почти готов я был перейти на firefox, хотя он мне не нравится своей гламурностью, да еще плюс ко всему я почтовым клиентом mozilla привык пользоваться…
но зашел я на mozilla.org и увидел, что есть альфа seamonkey 2.0
список изменений оказался внушительным www.seamonkey-project.org/releases/seamonkey2.0a3/changes

особенно порадовало:
1. Использование общего с FF тулкита;
2. наличие сессий;
3. новый Gecko;
4. ну и то чего нет в списке, но о чем так долго говорили аналитики с ЛОР исправлен вековой баг с неработающими хоткеями при включенной русской раскладке :)

решил я попробовать это чудо — но путь оказался тернистым, в связи со сменой cvs на mercurial многая документация по сборке не совсем актуальна… да и на счет где, как и что писать в .mozconfig не всё понятно.

инструкции по сборке в debian lenny amd64:
1. получаем код:
hg clone hg.mozilla.org/comm-central commsrc
cd commsrc
python client.py checkout #это запускаем периодически для обновление дерева исходников.

2. получаем русский перевод:
hg clone hg.mozilla.org/releases/l10n-mozilla-1.9.1/ru
hg pull -u #это запускаем периодически для обновление дерева исходников.

3. пишем .mozconfig:
export CFLAGS="-gstabs+ -march=native -O3 -pipe"
export CXXFLAGS="-gstabs+ -march=native -O3 -pipe"
export MOZILLA_OFFICIAL=1
export MOZ_MAPINFO=1
mk_add_options MOZ_MAKE_FLAGS="-j4"
mk_add_options MOZ_OBJDIR=@TOPSRCDIR@/seamonkey
mk_add_options MOZ_CO_PROJECT=suite
mk_add_options MOZ_CO_LOCALES=ru
mk_add_options PROFILE_GEN_SCRIPT=@TOPSRCDIR@/build/profile_pageloader.pl
mk_add_options MOZ_CO_MODULE=«mozilla/tools/update-packaging mozilla/tools/codesighs»
ac_add_options --enable-application=suite
ac_add_options --enable-optimize
ac_add_options --disable-debug
ac_add_options --disable-tests
ac_add_options --enable-strip
ac_add_options --enable-strip-libs
ac_add_options --with-pthreads
ac_add_options --enable-update-channel=nightly
ac_add_options --enable-update-packaging
ac_add_options --enable-codesighs
ac_add_options --with-l10n-base=…
ac_add_options --enable-ui-locale=ru
#ac_add_options --disable-composer
ac_add_options --disable-dtd-debug
ac_add_options --disable-ldap
ac_add_options --disable-postscript
ac_add_options --disable-gnomevfs
ac_add_options --disable-gnomeui
ac_add_options --disable-dbus
ac_add_options --disable-installer
ac_add_options --enable-extensions=«default -venkman -irc»
ac_add_options --enable-pango
ac_add_options --enable-xft
#ac_add_options --disable-freetype2
#ac_add_options --enable-system-cairo
#ac_add_options --with-system-png
ac_add_options --with-system-jpeg
ac_add_options --with-system-zlib
ac_add_options --enable-xinerama
ac_add_options --enable-svg
ac_add_options --enable-svg-renderer=cairo
ac_add_options --enable-mathml
ac_add_options --disable-pedantic

4. Компилим:
make -f client.mk build

5. собираем tar.bz2
cd seamokey
make package

6. берем готовый seamonkey-2.0b1pre.ru.linux-x86_64.tar.bz2 из commsrc/seamonkey/mozilla/dist, распаковываем и пользуемся.

итог:
+ внешне красив;
+ вполне стабилен;
+ работает быстро;
+ сохранение сессий;
+ работают хоткеи в русской раскладке;
± пароли и прочая информация хранится в sqlite, лично мне в тексте удобней было...;
— хоткеи в русской раскладке работают только в браузере, не работают в почтовике;
— почему то не работают некоторые js-ссылки, например теперь не работает веб-интерфейс чуда технической мысли рязанского производства (adsl-модем интеркросс 5633 Realtek);
— присутствую мелкие баги, например не работает Download manager.

Заключение: переход на Firefox откладывается — надеюсь навсегда :)