Habracleaner для Google Chrome и Mozilla Firefox

Написал расширение для фаерфокса и хрома, которое скрывает неугодные топики на хабре. Ссылки:

Habracleaner для Firefox
Habracleaner для Chrome

Про всякие GTD

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

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

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

Хотя, мой пост вряд ли поможет тем, кто готов следовать чужим идеям. А кто не готов — для них это прописные истины.

У кряков тоже есть свои пасхалки

:)

Появляется при запуске Windows Loader 2.0.4 (популярный активатор Win7) под Wine'ом.

Размеры стандартных типов Си в Linux/Windows

Отличия показаны красным.

Тип Linux Windows
x86 (32-bit) x86_64 aka amd64 (64-bit) x86 (32-bit) x86_64 aka amd64 (64-bit)
char 1 1 1 1
int 4 4 4 4
long 4 8 4 4
size_t 4 8 4 8
long long 8 8 8 8
float 4 4 4 4
double 8 8 8 8
void * 4 8 4 8

Собрал Wine64 (Wine с поддержкой win64)...

В официальных репозиториях дебиана/убунты (как впрочем и в Wine PPA) есть только Wine с поддержкой запуска бинарников для win32, даже если у Вас 64-битный дистрибутив. При попытке запуска exe'шника для 64-битной винды он ругнётся примерно вот так:

err:process:create_process starting 64-bit process L"F:\\src\\sandbox\\test.exe" not supported in 32-bit wineprefix

Причём из этого сообщения не понятно, что для этого нужен Wine64. Он говорит, мол, у тебя текущий префикс (тот, что в ~/.wine по умолчанию) 32-битный, а ему нужен 64-битный. Как же создать 64-битный префикс? Да никак. По крайней мере в обычном wine, собранным без ключа --enable-win64. Вот здесь, — Wine64, — немного описывается текущее состояние Wine64. Пока он в стадии беты, судя по всему.

Мне пришлось собрать Wine64 самому, а чтобы другим не пришлось этого делать, я создал ppa — https://launchpad.net/~vvladxx/+archive/wine64. Там есть пакет только для 64-битных дистрибутивов (amd64), т.к. на 32-битных Wine64 работать не будет.

Кстати, чтобы Wine64 не конфликтовал с уже установленным Wine'ом, я установил его в /opt/wine64. Вам нужно будет запускать его как-то так:

export PATH="/opt/wine64/bin:$PATH"
export WINEPREFIX="~/.wine64"
wine64 my_program.exe

Вторая строчка нужна для того, чтобы Wine64 использовал отдельный 64-битный префикс.

Pulseaudio и качество звука в наушниках

Как только я перешёл с Gnome 3 (новый гном мне совсем не понравился) на KDE 4.6, сразу же полезли проблемы со звуком. Оказалось, что Phonon не очень-то и дружит с pulseaudio и мне пришлось снести её. Но у меня к ней был прикручен суперский эквалайзер из ladspa, который мне захотелось вернуть. С гуглом я быстро нашёл способ прикрутить этот самый эквалайзер непосредственно к ALSA. После первого прослушивания я сильно удивился качеству звучания из наушников (Sennheiser 215) — разница просто колоссальная. Не знаю как pulseaudio удавалось так похерить звук, но то, что я услышал, это как глоток чистого воздуха. Звук стал заметно громче (с pulseaudio на таком же уровне громкости уже появлялся треск) и чище.

Pthread spinlock vs Pthread mutex

Наткнулся на интересную статью про сравнение spinlock'ов и mutex'ов — http://www.alexonlinux.com/pthread-mutex-vs-pthread-spinlock
первые оказались быстрее в 3 раза. А я то думал wait-lock на уровне ядра быстрее тупого while на user-level и по глупости везде использовал мьютексы. Видимо постоянное переключение контекста так сказывается на скорости (спинлоки не в ядре выполняются, так ведь?). Вообще, для тех, кому лень читать статью и комментарии к ней, могу сформулировать общие тезисы:

  • Использовать spinlock в тривиальных случаях, таких как, например, доступ к разделяемым данным и глобальным переменным, где код между *_lock () и *_unlock () выполняется быстро и затраты на выполнение этого кода много меньше затрат на переключение контекста, но синхронизация между потоками всё же требуется. Вообще, в таких случаях лучше перепроектировать приложение так, чтобы такие синхронизации вообще не требовались, ибо чем их меньше, тем лучше для Вашего приложения.
  • Использовать мьютексы во всех остальных, более сложных случаях.

Note: На одноядерных процессорах выигрыша от Spinlock'ов нет, т.к. приводит к 100% загрузке CPU (ядро некоторое время не делает переключение контекста и остаётся в этом бесконечном цикле). Мьютексы для одноядерных CPU предпочтительнее.

Быстрое восстановление пароля по MD5-хешу методом брутфорса

См. http://habrahabr.ru/blogs/hi/110809/