Вариант 1:
Вариант 2:
Opentube Logo Draft
Habracleaner для Google Chrome и Mozilla Firefox
Написал расширение для фаерфокса и хрома, которое скрывает неугодные топики на хабре. Ссылки:
Про всякие 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-битный префикс.
Нарисовал логотип для OpenTube Engine...
Появился свободный часик и я решил нарисовать логотип к моему будущему движку на Си — OpenTube Engine. Вот что получилось:
Похож на ютубовский логотип, но подчёркнута открытость.
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 предпочтительнее.
WebMoney: