MySQL: Single row lock implementation
Рубрика: Development, MySQL | 24 June 2009, 16:01 | Vadim Voituk
При разработке приложений с использованием баз данных, часто возникает сценарий “insert if not exists”:
if ( <row exists in table> )
then <insert new record into table>
Из-за того, что данный блок псевдо-кода не выполяняется атомано, может возникнуть ситуация, когда между проверкой <row exists in table> и выполнением действия <insert new record> паралельный поток (клиент) выполнит добавление новой записи и в итоге в БД окажется 2 одинаковых записи (или произойдет ошибка “duplicate key”).
Такой, не самый приятный case, в книгах по паралельному программированию называют race condition и обходят путем создания синхронизирующих блокировок , использованием “выпрямителей” и тд.
[Далее...]
Using iptables to prevent SSH brute force
Рубрика: Development | 21 June 2009, 16:34 | Vadim Voituk
Себе на заметку, дабы потом опять не гуглить.
Эти 2 простых iptables-правила спасают сервер от brute force перебора пароля от SSH:
iptables -I INPUT -i eth0 -p tcp -m tcp --dport 22 -m state --state NEW -m recent --set --name DEFAULT --rsourceiptables -I INPUT -i eth0 -p tcp -m tcp --dport 22 -m state --state NEW -m recent --update --seconds 180 --hitcount 5 --name DEFAULT --rsource -j DROP
В результате те, кто делает более 5-ти попыток SSH-подключений за последние 3 минуты – блокируются на 3 минуты.
Для того, чтоб эти правила запускались при старте системы делаем dump rules-файла:
iptables-save > /etc/sysconfig/iptables
Mac OS X: Few Usefull Max OS hints
Рубрика: Mac OS X | 11 June 2009, 09:54 | Vadim Voituk
За почти 2 месяца иcпользования MacBook и Mac OS X скопилось несколько полезных советиков, коими и спешу поделиться. Все tips&tricks были честно найдены в глобальной сети и опробованы на себе.
- Nokia E50 Не хочет коннектиться по Bluetooth (точнее коннектится, но быстро отваливается).
Удаляем файл, в котором хранятся bluetooth-профайлы устройств
rm /Library/Preferences/com.apple.Bluetooth.plistи перенастраиваем коннект с мобильным гаджетом заново.
Лично у меня 2-ждый такой трюк провернуть не удалось – проблема первый раз решилаcь, а повторно -уже не помогло.
- Когда-то я жаловался на отсутствие hotkey-я для максимизации/оптимизации текущего окна. Так вот действие для “зеленой кнопки максимизации” в большинстве Mac OS приложениях называется “Zoom” и находится в меню View.
Чтоб назначить горячую клавишу на это действие открываем:
System Preferences → Keyboard and Mouse → Keyboard ShortcutsДалее в разделе"Application Keyboard Shortcuts → All Applications"добавляем такую запись:

(в данном случае, я выбрал shortcut Command+Shift+M ) - В Finder в “Column mode” по дефолту колонки очень узкие, а после изменения и закрытия окна – их размеры не сохраняются.
Решается просто: Если изменить ширину колонки при этом зажав “Option” – новый размер станет стандартным.
Как сделать ширину auto-adjustable – я так и не нашел. - Для того чтоб в заголовке окон Finder показывать полный путь к открытой директории (например “/home/vadim/Desktop” вместо простого “Desktop”), нужно в терминале выполнить:
defaults write com.apple.finder _FXShowPosixPathInTitle -bool YES; killall Finder
ну и соответственно заменить YES на NO чтоб показывать “короткий” путь.
Выглядит это так:

- При коннекте по SSH на Ubuntu/Debian линуксы, в оболочке screen не работает BackSpace (и мапинг Ctrl+H не спасает)
Решение: Необходимо перед запуском установить переменную окружения TERM=screeen.
В приниципе можно в .bashrc назначить alias:
alias screen='TERM=screen screen' - И еще несколько мелких советов, которые я почерпнул с твиттера @okertanov
- Shift-Minimize button – нууууу очень медленнноооое сворачивание окна в док
- Смена дефолтного браузера на Маке происходит через
Safari → Preferences → Default Web Browser - Alt-Shift-K = “символ яблочко”
- Чтоб сменить unix-имя пользователя Max OS X (ну и заодно имя home-директории) нужно
- Включить root-пользователя, залогиниться под ним
- Переименовать home-директорию (For ex: $ mv /Users/admin /Users/vadim)
- Через System Preferences → Accounts создать пользователя с желаемым именем, совпадающим с новым именем home-директории
- Согласиться с предупреждением, что существующая home-директория будет назначена новому пользователю.
- Залогиниться под новым пользователем, проверить все ли ок, удалить старого пользователя
- Отключить root-а
В прицнипе пока все, по мере возможности буду пополнять список.
