Простой способ защиты от HTTP DDoS — включить syn-cookies и заблокировать подонков. Но что делать если атакует 5к-10к хостов да еще и с динамическими IP? Тут нам на помощь придет frontend-backend архитектура c промежуточным кэшированием! Почему с промежуточным кэшированием? А потому что в моем случае от шквала запросов от frontend'а backend умирал унося за собой систему.
Шевченко Андрей @Helsq
Пользователь
Создание документации в .NET
12 min
57K
Предположим, что у нас готова или почти готова некоторая .NET библиотека для разработчиков (они же конечные пользователи). API библиотеки безупречен, количество багов впечатляюще мало, да и вообще это не библиотека, а просто кладезь совершенного кода. Дело за малым – объяснить пользователям, как работать с этим замечательным продуктом.
Есть разные подходы к написанию документации. Некоторые команды предпочитают начинать создание документации в момент начала создания продукта. Другие откладывают написание мануалов на окончание работ. В некоторых командах документацию пишут специальные люди, которые ходят от разработчика к разработчику и от менеджера к менеджеру, аккумулируя знания о продукте. Во многих небольших командах таких специальных людей нет, а потому документацию часто пишет разработчик или разработчики. Кто-то использует сторонние средства вроде Help & Manual, в которых, как в заправском текстовом редакторе, можно создавать очень сложную верстку и на выходе получать документацию в многообразии форматов. Многие используют другой подход, широко пропагандируемый в последнее время – написание документации прямо в коде программы/библиотеки.
+69
Windows-компьютер без антивирусов
6 min
64KПредупреждение: Описанное в статье несколько устарело, т.к. я забросил винды в эпоху Windows 2003.
Каждый раз, когда меня знакомые спрашивают: «какой антивирус лучше?», я могу сказать только одно: «антивирус — как придворный шаман. Бывают лучше, бывают хуже, но определить, кто лучше камлает, не получится». Антивирус не гарантирует защиту от вирусов, более того, у него есть полное моральное право пропустить новую заразу и начать её детектить дня через 2-3 после «инцидента». Т.е. как основное средство защиты он годится не очень.
Ниже описывается настройка windows, которая позволит защититься от любых реальных (т.е. встречающихся в природе) вирусов без использования антивирусов. Данная конфигурация уже 3 с половиной года работает на терминальном сервере, где пользователи (в лучшие времена до 70 человек) совсем не стесняются притаскивать на флешках всяких засранцев, лазать по сети где попало и т.д.
Любой уважающий себя вирус, оказавшись запущенным, тем или иным методом стремится в системе закрепиться, т.е. создаёт исполняемый файл или библиотеку, которая прописывается тем или иным образом в запуск. «Авто» запуск или в форме «дополнения» к другим исполняемым файлам (debugger, hander, плагин, и т.д.) — не важно. Важно: существует барьер под названием «запуск кода». Даже старые-добрые вирусы, дописывающие себя в исполняемые файлы, всё равно должны иметь возможность писать в файлы, которые предполагается запускать.
Безусловно, есть вирусы, размножающиеся без создания файлов (например, мс-бласт). Но условием появления этого вируса должна быть доступность сервера для обращений с носителей вируса или запуск кода через эксплоит в браузере\сетевой компоненте. В случае дыры в браузере дальнейшее размножение не возможно (т.к. нужно обращаться к браузерам на других машинах, а это требует поднятия сервера, куда будут ходить другие пользователи и мотивации пользователям ходить именно на этот узел). В случае дыры в сетевой компоненте и размножения без сохранения на диск, описанная мною методика с большой вероятностью работать не будет и возможна эпидемия. Однако, я не уверен, что антивирусы поймают такой 0day эксплоит, плюс, их (дыры) довольно резво фиксят, так что этот сценарий я откладываю как маловероятный. Наличие же файрволов ещё более уменьшает их опасность. От не-0day вполне же спасает своевременная (автоматизированная) установка обновлений.
Итак, основную бытовую опасность представляют вирусы, запускающиеся «из файла» (хотя бы потому, что они переживают перезагрузку компьютера). Если мы запретим каким-то образом запуск «неправильных» файлов, то проблема будет решена (т.к. несохраняющийся в файле вирус не сможет пережить перезагрузку, а в случае запуска с правами пользователя, даже банального релогина).
В Windows существует технология — политика ограниченного запуска приложений. Её можно активировать в режиме «запрещать всё, что не разрешено». Если поставить запрет полный — для всех, включая администраторов, все файлы, включая библиотеки, то мы получим точную гарантию того, что посторонний (не входящий в список разрешённых) файл не будет запущен. По-крайней мере я пока не слышал, чтобы в этой технологии были дыры. Обращаю внимание, нужно запрещать и библиотеки тоже, потому что печально известный конфикер запускается с флешек именно с помощью запуска библиотеки обманом rundll32.
Однако, запреты и разрешения не будут иметь смысла, если не сформулировать правила, которые запретят запуск «чужаков».
Перед тем, как описать подробно конфигурацию, сформулирую теоретические принципы её организации:
1. То, куда пользователь может писать закрыто для запуска.
2. То, что пользователь может запускать, закрыто для записи.
Каждый раз, когда меня знакомые спрашивают: «какой антивирус лучше?», я могу сказать только одно: «антивирус — как придворный шаман. Бывают лучше, бывают хуже, но определить, кто лучше камлает, не получится». Антивирус не гарантирует защиту от вирусов, более того, у него есть полное моральное право пропустить новую заразу и начать её детектить дня через 2-3 после «инцидента». Т.е. как основное средство защиты он годится не очень.
Ниже описывается настройка windows, которая позволит защититься от любых реальных (т.е. встречающихся в природе) вирусов без использования антивирусов. Данная конфигурация уже 3 с половиной года работает на терминальном сервере, где пользователи (в лучшие времена до 70 человек) совсем не стесняются притаскивать на флешках всяких засранцев, лазать по сети где попало и т.д.
Теория
Любой уважающий себя вирус, оказавшись запущенным, тем или иным методом стремится в системе закрепиться, т.е. создаёт исполняемый файл или библиотеку, которая прописывается тем или иным образом в запуск. «Авто» запуск или в форме «дополнения» к другим исполняемым файлам (debugger, hander, плагин, и т.д.) — не важно. Важно: существует барьер под названием «запуск кода». Даже старые-добрые вирусы, дописывающие себя в исполняемые файлы, всё равно должны иметь возможность писать в файлы, которые предполагается запускать.
Безусловно, есть вирусы, размножающиеся без создания файлов (например, мс-бласт). Но условием появления этого вируса должна быть доступность сервера для обращений с носителей вируса или запуск кода через эксплоит в браузере\сетевой компоненте. В случае дыры в браузере дальнейшее размножение не возможно (т.к. нужно обращаться к браузерам на других машинах, а это требует поднятия сервера, куда будут ходить другие пользователи и мотивации пользователям ходить именно на этот узел). В случае дыры в сетевой компоненте и размножения без сохранения на диск, описанная мною методика с большой вероятностью работать не будет и возможна эпидемия. Однако, я не уверен, что антивирусы поймают такой 0day эксплоит, плюс, их (дыры) довольно резво фиксят, так что этот сценарий я откладываю как маловероятный. Наличие же файрволов ещё более уменьшает их опасность. От не-0day вполне же спасает своевременная (автоматизированная) установка обновлений.
Итак, основную бытовую опасность представляют вирусы, запускающиеся «из файла» (хотя бы потому, что они переживают перезагрузку компьютера). Если мы запретим каким-то образом запуск «неправильных» файлов, то проблема будет решена (т.к. несохраняющийся в файле вирус не сможет пережить перезагрузку, а в случае запуска с правами пользователя, даже банального релогина).
В Windows существует технология — политика ограниченного запуска приложений. Её можно активировать в режиме «запрещать всё, что не разрешено». Если поставить запрет полный — для всех, включая администраторов, все файлы, включая библиотеки, то мы получим точную гарантию того, что посторонний (не входящий в список разрешённых) файл не будет запущен. По-крайней мере я пока не слышал, чтобы в этой технологии были дыры. Обращаю внимание, нужно запрещать и библиотеки тоже, потому что печально известный конфикер запускается с флешек именно с помощью запуска библиотеки обманом rundll32.
Однако, запреты и разрешения не будут иметь смысла, если не сформулировать правила, которые запретят запуск «чужаков».
Модель безопасности
Перед тем, как описать подробно конфигурацию, сформулирую теоретические принципы её организации:
1. То, куда пользователь может писать закрыто для запуска.
2. То, что пользователь может запускать, закрыто для записи.
+79
Shutter — почти идеальная программа для создания скриншотов
2 min
41K
После моего тотального перехода на Ubuntu, однажды мне понадобилось сделать скриншот сайта целиком. Я, наивный, открыв FireFox, стал искать свой привычный плагин FireShot, и к глубокому своему разочарованию обнаружил что сие не работает под Linux. Самое удивительное, что я не нашел и достойного аналога этого плагина ни в FireFox, ни в Chromium. Несколькими днями позже я наткнулся на Shutter, программу для снятия скриншотов, и я приступил к изучению этого средства.
+68
Заказывая оптимизацию сервера у хостера — держи ухо востро
3 min
3.1K
Это была бы рядовая и унылая статья про nginx и opcode-кеширование, если бы сервер не был до этого «прооптимизирован» техподдержкой хостера :-)
О том, что я обнаружил в процессе оптимизации, я и пишу эту небольшую заметку, дабы уберечь других от подобных фокусов хостеров. :-)
+137
Qt & Ubuntu. Настраиваем среду для компиляции win32-приложений
3 min
28K
Эта мини-статья рассказывает об одном из способов осуществления кросс-компиляции приложений Qt для платформы win32.
+64
Дополнительные 24 часа в сутках. Игры со временем
8 min
17KМечта многих моих друзей и знакомых, чтобы у них было больше времени. На что, вопрос второй. Кому-то время нужно на семью, кому-то на любимую работу, кому-то на отдых. Но время, это тот ресурс, которого не хватает у нас всех. Мне удалось спрессовать время и получить в сутках, вначале лишние десять минут, потом час, потом еще несколько часов. За десять лет, время спрессовалось так, что в моих сутках около 48 часов. За неделю я успеваю сделать столько, сколько многие люди за две, три, а то и месяц. Без ущерба личной жизни, качеству работы, не с помощью бессонных ночей и постоянных авралов. В небольшой заметке постараюсь изложить основные положения той системы, которой придерживаюсь, чем она помогает мне, какие слабые и сильные стороны в ней есть. Чтобы изложить все приемы и уловки, понадобится не один материал, рассматривайте эту заметку, как вводную. Если вам понравится, и вы скажете, что желаете прочитать продолжение, то оно появится.
В момент написания понял, что текст получается огромным, поэтому пока даю первый кусочек. Иначе, будет тяжело читать.
Время это не только физическая величина, но и психологическая
У каждого из нас есть часы и мы привыкли, что время окружает нас в повседневной жизни. Мы встаем по будильнику к определенному времени, сетка телепередач привязана к конкретным часам, даже магазины работают в определенные часы. И с детства большинство из нас начинает считать время величиной неизменяемой. Однако, время это еще и психологический параметр. Одни и те же события могут занимать в нашем сознании разные отрезки времени, а в реальной жизни они же займут ровно минуту. Время в каждом из нас течет с различной скоростью и зависит от нашего психологического восприятия. Мы подгоняем наше восприятие времени под внешние ориентиры (часовую сетку), но с разной степенью успешности.
В момент написания понял, что текст получается огромным, поэтому пока даю первый кусочек. Иначе, будет тяжело читать.
Время это не только физическая величина, но и психологическая
У каждого из нас есть часы и мы привыкли, что время окружает нас в повседневной жизни. Мы встаем по будильнику к определенному времени, сетка телепередач привязана к конкретным часам, даже магазины работают в определенные часы. И с детства большинство из нас начинает считать время величиной неизменяемой. Однако, время это еще и психологический параметр. Одни и те же события могут занимать в нашем сознании разные отрезки времени, а в реальной жизни они же займут ровно минуту. Время в каждом из нас течет с различной скоростью и зависит от нашего психологического восприятия. Мы подгоняем наше восприятие времени под внешние ориентиры (часовую сетку), но с разной степенью успешности.
+145
Illuminated Keyboard Hack
1 min
5.9KНе у всех есть возможность покупать дорогие клавиатуры с подсветкой (aka logitech illuminated keyboard), не все дорогие клавиатуры подходят людям по моральным, эстетическим, или практических соображений. В этом видео мануале показано как за ~5$ сделать подсветку для клавиатуры, которая включается/выключается при нажатии не используемой кнопки Scroll. Пособие чисто практическое и не претендует на визуальный Вау эффект, но при желании оформление может быть сделано более красивым образом.


+15
Собираем установочные пакеты из Qt проектов по-взрослому
21 min
22KМетодом проб и ошибок я изобрел очередной велосипед, о котором и собираюсь рассказать Вам ниже.Речь пойдет о сборке пакетов из проектов Qt для Debian и Rpm based систем, Windows из под Ubuntu/Debian. В принципе метод весьма прост, поэтому, думаю, что при небольших изменениях он подойдет и для rpb based дистрибтивов, а для Windows систем потребуется установка cygwin.Кроме того эта тема очень мало обсуждается в интернете, хотя я бы не назвал сборку кроссплатформенных приложений в инсталяционные пакеты простой задачей.Кому будет интересен данный материал:
- в первую очередь начинающим разработчикам Qt, которые хотят распространять свои приложения в удобном для пользователей виде;
- разработчикам, использующих другие языки программирования (при небольших изменениях можно получить.
+29
Брокеры событий, часть 1
7 min
7.7K
Вообще в сложных, динамических системах очень сложно угнаться за меняющейся организацией компонентов, и если мы еще кое-как (это в 21-м то веке!) разурлили проблему создания компонентов с помощью специализированных контейнеров, то взаимодействие из между собой нам все еще полностью не подвластно. Например, реагирование на события в .Net (да и в других языках наверное) сделано на каком-то уж очень несерьезном уровне. И естественным образом в этой задаче появляются всякие инфраструктурные решения, о которых мы и поговорим.
+32
Советы программисту-дизайнеру интерфейсов
5 min
11K
Проблема
Программист часто выполняет роль дизайнера пользовательских интерфейсов. Можно поспорить, хорошо ли это. Однако, особенно в небольших компаниях, это реальность, которую не изменить.
Я верю, что программист может сделать очень приличный интерфейс. В этом посте я бы хотел собрать несколько советов, которые помогут программисту более или менее успешно погрузиться в иррациональный мир пользователей и проектировать неплохие интерфейсы.
Оговорюсь, что эти советы скорее подходят программистам, которые вынуждены заниматься разработкой пользовательского интерфейса. То есть по каким-либо причинам в компании нет дизайнера, регулярных юзабилити тестирований, процесса проектирования интерфейсов и т. п.
+222
Домашний linux сервер своими руками
5 min
191KХочется поделиться с хабросооществом информацией о том как я собирал домашний сервер.

Из софта на домашнем сервере будет «крутиться» следующий набор:

Из софта на домашнем сервере будет «крутиться» следующий набор:
- torrent клиент с web-мордой
- DHCP — раздаем ip адреса и сетевые настройки
- TFTP — для сетевой загрузки
- OpenVPN — для хождения в сеть с нетбука из недоверенных сетей
- FTP/Samba/NFS — сетевые шары для доступа с домашних машин
- Radius — для WPA2 авторизации
- DigiTemp — мониторинг домашней температуры
+77
Быстрая реализация резервного копирования в Amazon S3
3 min
25KЯ устал испытывать определённые опасения за сохранность данных на выделенном сервере, наблюдая за происходящим у хостеров последнее время… 3FN, Agava, Hosting.UA, МакХост — тенденция получается очень нехорошая.
В итоге, МакХост стал последней каплей, и, чтобы не оказаться в числе тех, кто «уже делает бекапы», я перевёл систему бекапов своего сервера на Amazon S3. Получилось вполне себе быстро и прозрачно.
Хочу поделиться с общественностью простейшей реализацией.
В итоге, МакХост стал последней каплей, и, чтобы не оказаться в числе тех, кто «уже делает бекапы», я перевёл систему бекапов своего сервера на Amazon S3. Получилось вполне себе быстро и прозрачно.
Хочу поделиться с общественностью простейшей реализацией.
+164
Extend Grid — делаем жизнь верстальщика немного проще
3 min
4.3KСамо понятие модульной сетки, за последние несколько лет стало чрезвычайно модным. В первую очередь у дизайнеров. И во-вторую очередь у верстальщиков.
В принципе это и неплохо. Верстальщик исходя из специфики своей профессии должен любить порядок и модульные сетки при их грамотном применении, довольно значительно упрощают жизнь и вносят приятную гармонию при верстке макета.
Немного про модульные сетки
Модульная система вёрстки — система вёрстки, при которой основой композиции полос и разворотов становится модульная сетка с определенным шагом (модулем), одинаковым или разным по горизонтали и вертикали. По мотивам Википедии.
В принципе это и неплохо. Верстальщик исходя из специфики своей профессии должен любить порядок и модульные сетки при их грамотном применении, довольно значительно упрощают жизнь и вносят приятную гармонию при верстке макета.
Немного про модульные сетки
Модульная система вёрстки — система вёрстки, при которой основой композиции полос и разворотов становится модульная сетка с определенным шагом (модулем), одинаковым или разным по горизонтали и вертикали. По мотивам Википедии.
+29
Плагин Хабратулз для Firefox 3.6
2 min
1KОбнаружил плагин Firefox в статье "Хабратулз: теперь и под FF 3.5+". С ним можно в 2 клика и без промежуточных страниц переходить на все основные страницы Хабра и вставлять теги HTML через контекстное меню, что особенно полезно для комментариев, для которых на сайте кнопок вставки тегов нет.
Надо понимать, что автору так и не удалось запустить вторую половину плагина — хабраредактор — как раз то, что часто востребовано для писания тегов комментариев. Дело поправимое, сделано. (В FF 3.0+ должен везде работать, но проверено на FF3.6 WinXP.)
Брать отсюда: habratools092.xpi [16.9 кб], версия 0.92.
Мне не очень понравилась в плагине необходимость держать кнопку на панели инструментов и сам 2-уровневый вид кнопки, поэтому переделал меню в почти одноуровневое и добавил его как альтернативу в контекстное меню. Теперь кнопку в панель инструментов ставить не обязательно, но если есть желание, то как её ставить, написано в habrahabr.ru/info/help/widgets.
Надо понимать, что автору так и не удалось запустить вторую половину плагина — хабраредактор — как раз то, что часто востребовано для писания тегов комментариев. Дело поправимое, сделано. (В FF 3.0+ должен везде работать, но проверено на FF3.6 WinXP.)
Брать отсюда: habratools092.xpi [16.9 кб], версия 0.92.
Мне не очень понравилась в плагине необходимость держать кнопку на панели инструментов и сам 2-уровневый вид кнопки, поэтому переделал меню в почти одноуровневое и добавил его как альтернативу в контекстное меню. Теперь кнопку в панель инструментов ставить не обязательно, но если есть желание, то как её ставить, написано в habrahabr.ru/info/help/widgets.
+28
Dropbox — простейший минихостинг сайтов
2 min
41KКак показали комментарии к моему хабратопику, где я упомянул о способе хостинга сайта, используя только Dropbox, знают далеко не все. То есть все знают, что это один из самых неплохих продуктов для синхронизации файлов (более того, его используют как механизм синхронизации для приложений), что с помощью Dropbox легко опубликовать свой файл, положив его в папку Dropbox/Public, а потом скопировав на него ссылку (public link).
Однако кроме всего этого, Dropbox может выступать как простейший хостинг для ваших минипроектов.
Однако кроме всего этого, Dropbox может выступать как простейший хостинг для ваших минипроектов.
+93
А ты готов сдать ЕГЭ по информатике?
3 min
15KГод назад я уже писал о заданиях ЕГЭ по информатике. Они были сложные, местами не-айтишные, вызвали неоднозначную реакцию и довольно интересные дискуссии.
Информатика преподается в объеме 1 урок в неделю, на задание отводится 7,5 минут. Основная масса школьников имеет очень поверхностные знания, а об алгоритмическом мышлении, it-кругозоре и практическом опыте применения информационных технологий говорить вообще сложно.
Новый год, новые задания, новые вопросы к ним.
Информатика преподается в объеме 1 урок в неделю, на задание отводится 7,5 минут. Основная масса школьников имеет очень поверхностные знания, а об алгоритмическом мышлении, it-кругозоре и практическом опыте применения информационных технологий говорить вообще сложно.
Новый год, новые задания, новые вопросы к ним.
+125
Якорная навигация на jQuery (graceful degradation)
2 min
5.4KНедавно я наткнулся на интересный плагин для jQuery: BBQ — Back Button & Query Library.
И решил на ее основе сделать свой плагин для навигации на основе якорей. Задачи, которые я себе ставил:
Результат можно посмотреть здесь. А еще можно почитать чуть подробнее.
UPD: дамы и господа, некоторые жалуются на недоступность странички (403 Forbidden), однако, я ничего такого не вижу. В комментах привели ссылку на рабочий вариант, который можно попробовать, если моя ссылка у вас не заработала: http://vbolshov.org.ru.nyud.net/anchornav/.
И решил на ее основе сделать свой плагин для навигации на основе якорей. Задачи, которые я себе ставил:
- нормальная работа ссылок в условиях выключенного javascript (читай — нормальная индексация страниц поисковиками)
- поддержка обычных anchor-ссылок безо всяких дополнительных запросов
- поддержка отображения подгруженного контента в разных областях страницы
Результат можно посмотреть здесь. А еще можно почитать чуть подробнее.
UPD: дамы и господа, некоторые жалуются на недоступность странички (403 Forbidden), однако, я ничего такого не вижу. В комментах привели ссылку на рабочий вариант, который можно попробовать, если моя ссылка у вас не заработала: http://vbolshov.org.ru.nyud.net/anchornav/.
+37
Software Configuration Management // Контроль версий
12 min
20KИ снова здравствуйте.
Продолжаю публиковать цикл статей о SCM — управлении конфигурацией ПО.
3 предыдущие заметки можно прочитать в этом же блоге.
Сегодня расскажу о том, с чем работает большинство читателей — о контроле версий.
Далее будут описаны основные техники, реализованные в подавляющем большинстве систем контроля версий. Как они реализуются в приложениях, которые использует читатель, оставим на откуп многочисленным руководствам пользователя, how-to, FAQ и прочим документам, коих можно найти без труда. Главное – понять, по каким принципам и зачем оно работает именно так.
Продолжаю публиковать цикл статей о SCM — управлении конфигурацией ПО.
3 предыдущие заметки можно прочитать в этом же блоге.
Сегодня расскажу о том, с чем работает большинство читателей — о контроле версий.
Disclaimer
Далее будут описаны основные техники, реализованные в подавляющем большинстве систем контроля версий. Как они реализуются в приложениях, которые использует читатель, оставим на откуп многочисленным руководствам пользователя, how-to, FAQ и прочим документам, коих можно найти без труда. Главное – понять, по каким принципам и зачем оно работает именно так.
+26
Виды тестирования и подходы к их применению
5 min
272KИз институтского курса по технологиям программирования я вынес следующую классификацию видов тестирования (критерий — степень изолированности кода). Тестирование бывает:
- Блочное (Unit testing) — тестирование одного модуля в изоляции.
- Интеграционное (Integration Testing) — тестирование группы взаимодействующих модулей.
- Системное (System Testing) — тестирование системы в целом.
+41
Information
- Rating
- Does not participate
- Location
- Новосибирск, Новосибирская обл., Россия
- Date of birth
- Registered
- Activity