RSS
Pages: 1 ... 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 ... 133
[>] Натягиваем ФП на ООП
habra.16
habrabot(difrex,1) — All
2017-01-02 20:30:03


Некоторое время назад, вернувшись после полугодового отпуска в функциональном мире, назад в ООП, я в который раз наступил на привычные грабли: случайно изменил состояние.


private double fBm(Vector2D v, int y)
{
double result = 0f;
double freq = Frequency;

for (int i = 0; i < Octaves; ++i)
{
result += NoiseFn(permutation, v * freq) * Amplitude;
freq *= Lacunarity;
Amplitude *= Gain; // <-- Вот тут.
}

return result;
}

В ФП нужно особо постараться чтобы получить такой баг, а в некоторый языках невозможно в принципе. Салат из полезной работы и состояния класса не радовал, простор для ошибок даже в этой четверке строк слишком широк. Я стал думать как можно уменьшить площадь этих грабель и вывел следующее:

[Читать дальше →][1]

[1]: https://habrahabr.ru/post/318908/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut

[>] [Перевод] Slow Cooker: нагрузочное тестирование сетевых сервисов
habra.16
habrabot(difrex,1) — All
2017-01-03 11:00:04


![][1]

_Linkerd_, наша [сервисная сетка (service mesh)][2] для облачных приложений, по долгу службы обязана на протяжении длительного времени справляться с большими объемами сетевого трафика. Перед выпуском очередного релиза соответствие этому требованию необходимо тщательно проверять. В этой статье мы опишем стратегии нагрузочного тестирования и использованные нами инструменты, а также рассмотрим несколько обнаруженных проблем. В итоге будет представлен **slow\_cooker** — написанный на Go инструмент нагрузочного тестирования с открытым исходным кодом, который был создан для выполнения длительных нагрузочных тестов и выявления проблем жизненного цикла (lifecycle issue identification).

[Читать дальше →][3]

[1]: https://habrastorage.org/files/4af/3b4/4b8/4af3b44b822c482083cdd2781bd0d3be.jpg
[2]: https://blog.buoyant.io/2016/10/04/a-service-mesh-for-kubernetes-part-i-top-line-service-metrics/
[3]: https://habrahabr.ru/post/318158/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut

[>] Обзор self-hosted continuous integration систем
habra.16
habrabot(difrex,1) — All
2017-01-03 11:30:04


### Введение



Сложно представить современную разработку без Continuous Integration. Многие компании выпускают по нескольку релизов в день и прогоняют тысячи тестов. Со времен [Jenkins][1] и [Travis CI][2] на рынке появилось много самых [разнообразных инструментов][3]. Большинство из них работают по модели SaaS — вы платите фиксированную плату за использование сервиса, или за количество пользователей.



Но использование hosted платформ не всегда возможно, например, если нельзя передавать код приложения, или не хочется зависеть от внешних сервисов. В таком случае выручают системы, которые можно установить на своих серверах (self-hosted). Бонусом вы имеете полный контроль над ресурсами и можете масштабировать их согласно вашим потребностям используя, к примеру, [amazon ec2][4].



В этой статье представлен обзор нескольких opensource self-hosted continuous integration систем, а также личные впечатления от их использования.


[Читать дальше →][5]

[1]: https://jenkins.io/
[2]: https://travis-ci.org/
[3]: https://github.com/ciandcd/awesome-ciandcd
[4]: https://aws.amazon.com/ru/ec2/
[5]: https://habrahabr.ru/post/318524/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut

[>] Опыт использования self-hosted continuous integration систем
habra.16
habrabot(difrex,1) — All
2017-01-03 16:30:04


### Введение



Сложно представить современную разработку без Continuous Integration. Многие компании выпускают по нескольку релизов в день и прогоняют тысячи тестов. Со времен [Jenkins][1] и [Travis CI][2] на рынке появилось много самых [разнообразных инструментов][3]. Большинство из них работают по модели SaaS — вы платите фиксированную плату за использование сервиса, или за количество пользователей.



Но использование hosted платформ не всегда возможно, например, если нельзя передавать код приложения, или не хочется зависеть от внешних сервисов. В таком случае выручают системы, которые можно установить на своих серверах (self-hosted). Бонусом вы имеете полный контроль над ресурсами и можете масштабировать их согласно вашим потребностям используя, к примеру, [amazon ec2][4].



В этой статье представлен личный опыт использования нескольких opensource self-hosted continuous integration систем. Если вы использовали другие системы, расскажите об этом в комментариях.


[Читать дальше →][5]

[1]: https://jenkins.io/
[2]: https://travis-ci.org/
[3]: https://github.com/ciandcd/awesome-ciandcd
[4]: https://aws.amazon.com/ru/ec2/
[5]: https://habrahabr.ru/post/318524/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut

[>] [Перевод] Вышел GitLab 8.15
habra.16
habrabot(difrex,1) — All
2017-01-03 17:00:03


В последнем релизе уходящего года мы завершаем наш [Мастер-план][1] и хотим показать вам кое-что интересное из того, над чем мы работали.




В GitLab 8.15 появилась фича Auto Deploy – автоматизированная настройка развертывания и приложений для ревью (Review Apps). Для проекта на Ruby on Rails такая настройка займёт меньше минуты. Посмотрите, как это работает, в видео на [1:42][2].



Вдобавок, доступ к вашим средам (environments) стал быстрее и проще: через терминал непосредственно в GitLab (там же на [5:18][3])



Мы хотим дать каждому возможность использовать всю мощь контейнеров (containers), непрерывной интеграции и развертывания (continuous integration and deployment, сокращенно CD/CI), приложений для ревью (review apps) и планировщиков контейнеров (container schedulers). В GitLab 8.15 мы взяли на себя всю сложную работу по настройке, и вся она происходит совершенно прозрачно. В демонстрационном видео мы настраиваем и разворачиваем Ruby-приложение с review apps, несколькими средами и чатопсом (chatops, управление инфраструктурой через интеграцию с чатом) на кластер Kubernetes примерно за 12 минут. Без GitLab такая задача обычно занимает дни, если не недели.



Для большинства из нас декабрь — месяц праздников и подарков. GitLab тоже получил в подарок много новых фич.


[Читать дальше →][4]

[1]: https://about.gitlab.com/2016/09/14/gitlab-live-event-recap/
[2]: https://youtu.be/m0nYHPue5RU?t=102
[3]: https://youtu.be/m0nYHPue5RU?t=318
[4]: https://habrahabr.ru/post/318926/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut

[>] Абстрагируемся от горячих клавиш в десктопных приложениях, или как отлаживаться в любом IDE одними и теми же кнопками
habra.16
habrabot(difrex,1) — All
2017-01-03 19:00:04


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

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

Это хорошо, однако у данного интерфейса пользовательского ввода есть проблемы.
[Читать дальше →][1]

[1]: https://habrahabr.ru/post/318934/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut

[>] [Перевод] Современный подход к сборке мусора
habra.16
habrabot(difrex,1) — All
2017-01-03 22:00:04


![][1]

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

Вот [первичный анонс][2] о внедрении нового сборщика, датированный августом 2015-го:

> В Go создаётся сборщик мусора (GC) **не только для 2015 года, но и для 2025-го, и ещё дальше… Сборщик в Go 1.5 возвещает о наступлении будущего, в котором паузы на сборку больше не являются барьером для перехода на безопасный язык.** Это будущее, в котором приложения без труда масштабируются вместе с оборудованием, и по мере роста мощности оборудования сборщик мусора больше не является сдерживающим фактором при создании более качественного, масштабируемого ПО. Go — хороший язык для использования как минимум в ближайший десяток лет.
Создатели утверждают, что они не просто решили проблему пауз на сборку мусора, а пошли куда дальше:

> Одним из высокоуровневых способов решения проблем с производительностью является добавление GC-настроек (knobs), по одной на каждую проблему. Программист может менять их, подбирая наилучшую комбинацию для своего приложения. Недостатком этого подхода является то, что при внедрении каждый год одной-двух новых настроек через десять лет придётся законодательно регулировать труд людей, которые будут менять эти настройки. Go не пошёл по этому пути. Вместо кучи настроек мы оставили одну и назвали её GOGC.
>
> Более того, освободившись от бремени поддержки десятков настроек, разработчики могут сосредоточиться на улучшении runtime’а приложения.
Не сомневаюсь, что многие пользователи Go были просто счастливы получить новый подход к runtime’у в Go. Но у меня есть претензии к этим заявлениям: они выглядят как недостоверный маркетинговый булшит. А поскольку они раз за разом воспроизводятся в Сети, пришло время подробно с ними разобраться.
[Читать дальше →][3]

[1]: https://habrastorage.org/files/a1d/d6b/f42/a1dd6bf42c2f491caf1fa02bc574fbf3.jpg
[2]: https://blog.golang.org/go15gc
[3]: https://habrahabr.ru/post/318504/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut

[>] Как искать путь к победе на Russian AI Cup 2016, но не в том направлении
habra.16
habrabot(difrex,1) — All
2017-01-03 22:00:04



После не сильно долгих уговоров, меня убедили, что 30 место не так уж и плохо, и написать статью стоит. Я – участник с ником [Stef][1], и занял в песочнице около 30 места.
Картинка нарисованная рядом, имеет глубокий смысл – вместо того чтобы уделить достаточное время и быть призером соревнования, я пошел другим путем — потратил одну треть времени на то, что делать было не обязательно. Если быть точнее, то я занялся алгоритмом поиска пути в пространстве, где нет непробиваемых стен, а есть лишь деревья которые можно или рубить или проходить рядом с ними.
Что из этого получилось, можно посмотреть в [видео][2], а желающих познать все тайны леса прошу под кат.
[Читать дальше →][3]

[1]: http://russianaicup.ru/profile/Stef
[2]: https://www.youtube.com/watch?v=VUH_yNDKNXw
[3]: https://habrahabr.ru/post/318946/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut

[>] Методы оптимизации нейронных сетей
habra.16
habrabot(difrex,1) — All
2017-01-04 16:30:04


В подавляющем большинстве источников информации о нейронных сетях под «а теперь давайте обучим нашу сеть» понимается «скормим целевую функцию оптимизатору» лишь с минимальной настройкой скорости обучения. Иногда говорится, что обновлять веса сети можно не только стохастическим градиентным спуском, но безо всякого объяснения, чем же примечательны другие алгоритмы и что означают загадочные ![\inline \beta][1] и ![\inline \gamma][2] в их параметрах. Даже преподаватели на курсах машинного обучения зачастую не заостряют на этом внимание. Я бы хотел исправить недостаток информации в рунете о различных оптимизаторах, которые могут встретиться вам в современных [пакетах машинного обучения][3]. Надеюсь, моя статья будет полезна людям, которые хотят углубить своё понимание машинного обучения или даже изобрести что-то своё.



![image][4]



Под катом много картинок, в том числе анимированных gif.

[Читать дальше →][5]

[1]: https://tex.s2cms.ru/svg/%5Cinline%20%5Cbeta
[2]: https://tex.s2cms.ru/svg/%5Cinline%20%5Cgamma
[3]: http://lasagne.readthedocs.io/en/latest/modules/updates.html
[4]: https://habrastorage.org/files/93c/2ee/e3f/93c2eee3fad440a8b8204befec4b06bf.jpg
[5]: https://habrahabr.ru/post/318970/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut

[>] [Перевод] Безопасность в IoT: Архитектура системы безопасности
habra.16
habrabot(difrex,1) — All
2017-01-04 19:00:03


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

![][1]
[Читать дальше →][2]

[1]: https://habrastorage.org/files/6b7/05f/99d/6b705f99db6a4e498ea03910442be328.jpg
[2]: https://habrahabr.ru/post/318968/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut

[>] История одного бага (#1653967)
habra.16
habrabot(difrex,1) — All
2017-01-04 20:00:03


**Abstract**: Реальная история из жизни реальных администраторов по отлову идиотского бага.
Поучительная часть: Никогда недооценивай зависимости зависимостей.


## Вступление


Рядовой апгрейд в лаборатории с Openstack Mitaka до Openstack Newton (более новая версия). Несколько deprecated options в файлах конфигурации, keystone переехал с eventlet на WSGI и поломал существующую конфигурацию с haproxy; из-за типового «ipv6 listen» apache не стал конфликтовать с haproxy за одинаковые используемые порты на звезде (один слушал ipv6, другой ipv4 only), так что запросы уходили в haproxy вместо апача, где умирали с 503, т.к. апстрима не было… Впрочем, история не об этом.

После того, как основные проблемы были пофишкены, Nova (одна из компонент Openstack) при запуске начала падать с ошибкой: `ConfigFileValueError: Value for option url is not valid: invalid URI: 'http://neutron-server.example.com:21345'.`. Это было очень странно. С учётом, что в конфиге поменялось 100500 опций, возникло подозрение, что мы используем устаревшую опцию, которую больше не надо использовать. Однако, документация говорила, что пример опции — `url = http://controller:9696`.


## Отладка


Очевидные шаги отладки:
* Закомментировать опцию — не падает
* Повторить опцию из примера — не падает
* Заменить в опции порт на «наш» — возможно, нельзя использовать слишком большой номер порта — не падает
* Заменить в опции url на наш — падает
* Вернуть «controller» на место — не падает
* Подозрение: не умеет fqdn: заменить controller на controller.dns — не падает
* Подозрение: слишком много точек (у нас в реальном коде было 8 точек в url) — controller.dns1.dns2.dns3.dns4 — не падает
* Оставить из нашего имени только первую часть: `http://neutron-server:9696` — падает! гипотеза уже понятна.
* Проверка1: `http://neutronserver:9696` — не падает
* Проверка2: `http://with-dashes:9696` — падает!
[Читать дальше →][1]

[1]: https://habrahabr.ru/post/318982/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut

[>] Особенности использования сертификатов от Let's Encrypt и способ настройки nginx
habra.16
habrabot(difrex,1) — All
2017-01-05 11:00:03


![image][1]



Если вдруг вся эта история прошла мимо вас, [Let's Encrypt][2] — центр сертификации от некоммерческой организации ISRG, существующий [при поддержке EFF][3] и многих компаний, взявшей на себя миссию дать людям бесплатные SSL/TLS сертификаты для сайтов и серверов. Сертификаты от Let's Encrypt уже используются [на более чем 10 миллионах доменов][4].



Кроме очевидной бесплатности у сертификатов от Let's Encrypt есть особое, отсутствующее у любых других коммерческих сертификационных центров, достоинство: если вы однажды получили сертификат от Let's Encrypt, то, при прочих равных, это навсегда. Не нужно раз в год-два вручную обновлять сертификаты. Не нужно вообще вспоминать что сертификаты где-то есть. Получил, настроил и забыл!



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



Организации автоматического обновления сертификатов в статье уделено пристальное внимание, с тем чтобы вы могли в полной мере оценить это принципиальное преимущество Let's Encrypt.

[Читать дальше →][5]

[1]: https://habrastorage.org/files/2a7/3ca/80c/2a73ca80c919473da68bd5ed0d205d83.png
[2]: https://letsencrypt.org/
[3]: https://www.eff.org/ru/deeplinks/2014/11/certificate-authority-encrypt-entire-web
[4]: https://letsencrypt.org/stats/
[5]: https://habrahabr.ru/post/318952/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut

[>] [recovery mode] Ханойские башни — теоретическое решение без рекурсии
habra.16
habrabot(difrex,1) — All
2017-01-05 11:00:03


Задача Ханойских башен — одна из самых первых задач, которые предлагаются начинающим программистам, в основном, чтобы проиллюстрировать концепцию рекурсивных решений. В этой статье приводится метод, который позволяет теоретическим путем, без рекурсии, указывать оптимальное решение для текущего хода.
![image][1]

[Читать дальше →][2]

[1]: https://lh3.googleusercontent.com/v9kYFJghQXa7AOf1vm5KwfqB6p4luPgpdnIl_go-dBbqAr7-SexpbFbS7YTjFEm5R74=h310
[2]: https://habrahabr.ru/post/318964/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut

[>] end-to-end шифрование файлов в dropbox
habra.16
habrabot(difrex,1) — All
2017-01-05 17:30:04


![image][1]


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

[Читать дальше →][2]

[1]: https://habrastorage.org/files/cee/269/4b1/cee2694b1733421fac89e20b3dbdacb5.jpg
[2]: https://habrahabr.ru/post/319004/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut

[>] Как понять, что происходит на сервере
habra.16
habrabot(difrex,1) — All
2017-01-06 00:00:04


![][1]


## Александр Крижановский ([NatSys Lab.][2])


По Сети уже давно бегает эта картинка, по крайней мере, я ее часто видел на Фейсбуке, и появилась идея рассказать про нее:

![][3]
[Читать дальше →][4]

[1]: https://habrastorage.org/getpro/habr/post_images/f25/68a/fd1/f2568afd19938fea74632c813345163e.jpg
[2]: http://natsys-lab.com/
[3]: https://habrastorage.org/getpro/habr/post_images/7b7/92e/6eb/7b792e6eb1f66aebd11340aca1b40484.png
[4]: https://habrahabr.ru/post/319020/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut

[>] Создание и тестирование Firewall в Linux, Часть 2.2. Таблицы Firewall. Доступ к TCP\IP структурам
habra.16
habrabot(difrex,1) — All
2017-01-06 15:00:04


**Содержание первой части:**

**Создание лаборатории, архитектура Netfilter, char device, sysfs**
[**1\.1** — Создание виртуальной лаборатории (чтобы нам было, где работать, я покажу, как создать виртуальную сеть на вашем компьютере. Сеть будет состоять из 3х машин Linux ubuntu).][1]
[**1\.2** – Написание простого модуля в Linux. Введение в Netfilter и перехват трафика с его помощью. Объединяем все вместе, тестируем.][2]
[**1\.3** – Написание простого char device. Добавление виртуальной файловой системы — sysfs. Написание user interface. Объединяем все вместе, тестируем.][3]

**Содержание второй части:**

[**2\.1** — Введение во вторую часть. Смотрим на сеть и протоколы. Wireshark.][4]
****2\.2** — Таблицы Firewall. Transport Layer. Структуры TCP, UDP. Расширяем Firewall.**
**2\.3** — Расширяем функциональность. Обрабатываем данные в user space. libnetfilter\_queue.
**2\.4** — Бонус. Изучаем реальную Buffer Overflow атаку и предотвращаем с помощью нашего Firewall'а.
[Читать дальше →][5]

[1]: https://habrahabr.ru/post/315340/
[2]: https://habrahabr.ru/post/315350/
[3]: https://habrahabr.ru/post/315454/
[4]: https://habrahabr.ru/post/316086/
[5]: https://habrahabr.ru/post/316756/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut

[>] Распознавание чеков в Google Docs с помощью ABBYY OCR SDK
habra.16
habrabot(difrex,1) — All
2017-01-07 01:30:05


В северном полушарии нынче зима, а это значит что пора на лыжи! Мы с друзьями поддались этому течению и приступили к подготовке нашего совместного зимнего отдыха. Детали всего процесса планирования раскрывать не буду, скажу лишь только, что мне выпала ответственная роль сбора магазинных чеков наших совместных трат.
[Читать дальше →][1]

[1]: https://habrahabr.ru/post/319042/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut

[>] Спектроскоп Салтана: лапласианы для фана
habra.16
habrabot(difrex,1) — All
2017-01-07 09:30:03


Рождественские дни — время отложить привычные дела и вспомнить забавы — калейдоскопы, мозаики, снежинки… Кто нарисует самую красивую звезду?
![][1]
Симметрия радует глаз. Создать красоту нам помогли математика лапласианов, язык Питон и его библиотеки — математический [numpy][2] и графический [matplotlib][3].


## Спектры невозможных решеток


КДПВ получена визуализацией значений собственных векторов некой симметричной матрицы.
В основе — спектры регулярных решеток. Мы уже рассматривали некоторые их свойства [ранее][4]. Здесь мы попытаемся формулами не злоупотреблять, а заставить их поработать на эстетику.
[Далее еще будут картинки...][5]

[1]: https://habrastorage.org/files/c20/ecf/fa1/c20ecffa12c74c49b3ede917eff785b0.png
[2]: http://www.numpy.org/
[3]: http://matplotlib.org/index.html
[4]: https://habrahabr.ru/post/262703/
[5]: https://habrahabr.ru/post/319060/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut

[>] Сравнение Lock-free алгоритмов — CAS и FAA на примере JDK 7 и 8
habra.16
habrabot(difrex,1) — All
2017-01-07 19:00:04


### Много ядер не бывает


_Атомарные операции_ (atomics), например, _Compare-and-Swap _(CAS) или _Fetch-and-Add_ (FAA) широко распространены в параллельном программировании.

Мульти- или многоядерные архитектуры установлены одинаково как в продуктах настольных и серверных компьютеров, так и в крупных центрах обработки данных и суперкомпьютерах. Примеры конструкций включают Intel Xeon Phi с 61 ядрами на чипе, который установлен в Tianhe-2, или AMD Bulldozer с 32 ядрами на узле, развернутых в Cray XE6. Кроме того, количество ядер на кристалле неуклонно растет и процессоры с сотнями ядер, по прогнозам, будут изготовлены в обозримом будущем. Общей чертой всех этих архитектур является растущая сложность подсистем памяти, характеризующаяся несколькими уровнями кэш-памяти с разными политиками включения, различными протоколами когерентности кэш-памяти, а также различными сетевыми топологиями на чипе, соединяющими ядра и кэш-память.
Практически все такие архитектуры обеспечивают атомарные операции, которые имеют многочисленные применения в параллельном коде. Многие из них (например, _Test-and-Set_) могут быть использованы для реализации блокировок и других механизмов синхронизации. Другие, например, _Fetch-and-Add_ и _Compare-and-Swap_ позволяют строить разные lock-free и wait-free алгоритмы и структуры данных, которые имеют более прочные гарантии прогресса, чем блокировки на основе кода. Несмотря на их важность и повсеместное употребление, выполнение атомарных операций полностью не проанализировано до сих пор. Например, по общему мнению, _Compare-and-Swap_ идет медленнее, чем _Fetch-and-Add_. Тем не менее, это всего лишь показывает, что семантика _Compare-and-Swap_ вводит понятие «wasted work», в результате – более низкая производительность некоторого кода. [Читать дальше][1]

[1]: https://habrahabr.ru/post/319036/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut

[>] Настройка SPICE-консоли виртуальных машин в OpenStack
habra.16
habrabot(difrex,1) — All
2017-01-08 15:30:03


Эта статья будет интересна администраторам облачной платформы OpenStack. Речь пойдет об отображении консоли виртуальных машин в дашборде. Дело в том, что по умолчанию в OpenStack используется noVNC консоль, которая с приемлемой скоростью работает в рамках локальной сети, но плохо подходит для работы с виртуалками, запущенными в удаленном датацентре. В этом случае отзывчивость консоли, мягко говоря, удручает.
В данном статье речь пойдет о том, как настроить в своей инсталляции Опенстека гораздо более быструю [SPICE-консоль][1].
[Читать дальше →][2]

[1]: https://www.spice-space.org/
[2]: https://habrahabr.ru/post/319072/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut

[>] О сравнении объектов по значению — 5: Structure Equality Problematic
habra.16
habrabot(difrex,1) — All
2017-01-08 15:30:03


#### В [предыдущей публикации][1] мы вывели наиболее полный и корректный способ реализации сравнения по значению объектов — экземпляров [классов][2] (являющихся [ссылочными типами — Reference Types][3]) для платформы [.NET][4]. {#v-predyduschey-publikaciihttpshabrahabrrupost315258-my-vyveli-naibolee-polnyy-i-korrektnyy-sposob-realizacii-sravneniya-po-znacheniyu-obektov---ekzemplyarov-klassovhttpsmsdnmicrosoftcomlibrary0b0thcktaspx-yavlyayuschihsya-ssylochnymi-tipami---reference-typeshttpsmsdnmicrosoftcomlibrary490f96s2aspx-dlya-platformy-nethttpswwwmicrosoftcomnet}



#### Каким образом нужно модифицировать предложенный способ для корректной реализации сравнения по значению объектов — экземпляров [структур][5] (являющихся ["типами по значению" — Value Types][6])? {#kakim-obrazom-nuzhno-modificirovat-predlozhennyy-sposob-dlya-korrektnoy--realizacii-sravneniya-po-znacheniyu-obektov---ekzemplyarov-strukturhttpsmsdnmicrosoftcomlibraryah19swz4aspx-yavlyayuschihsya-tipami-po-znacheniyu---value-typeshttpsmsdnmicrosoftcomlibrarys1ax56chaspx}



Экземпляры [структур][7], в силу своей природы, всегда сравниваются по значению.



Для предопределенных типов, таких как [Boolean][8] или [Int32][9], под сравнением по значению понимается сравнение непосредственно значений экземпляров структур.



Если структура определена разработчиком — пользователем платформы, то сравнение по умолчанию автоматически реализуется как сравнение значений полей экземпляров структур.
(Подробности см. в описании метода [ValueType.Equals(Object)][10] и операторов [==][11] и [!=][12])
Также при этом автоматически определенным образом реализуется метод [ValueType.GetHashCode()][13], перекрывающий метод [Object.GetHashCode()][14].



#### И в этом случае есть несколько существенных подводных камней: {#i-v-etom-sluchae-est-neskolko-suschestvennyh-podvodnyh-kamney}

[Читать дальше →][15]

[1]: https://habrahabr.ru/post/315258/
[2]: https://msdn.microsoft.com/library/0b0thckt.aspx
[3]: https://msdn.microsoft.com/library/490f96s2.aspx
[4]: https://www.microsoft.com/net
[5]: https://msdn.microsoft.com/library/ah19swz4.aspx
[6]: https://msdn.microsoft.com/library/s1ax56ch.aspx
[7]: https://msdn.microsoft.com/library/ah19swz4.aspx
[8]: https://msdn.microsoft.com/library/system.boolean.aspx
[9]: https://msdn.microsoft.com/library/system.int32.aspx
[10]: https://msdn.microsoft.com/library/2dts52z7.aspx
[11]: https://msdn.microsoft.com/library/53k8ybth.aspx
[12]: https://msdn.microsoft.com/library/3tz250sf.aspx
[13]: https://msdn.microsoft.com/library/system.valuetype.gethashcode.aspx
[14]: https://msdn.microsoft.com/library/system.object.gethashcode.aspx
[15]: https://habrahabr.ru/post/315622/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut

[>] One Core API чтоб править Windows
habra.16
habrabot(difrex,1) — All
2017-01-08 17:30:03


"Если Microsoft не обеспечивает совместимость —
сообщество обеспечивает совместимость".
Aceler



![][1]

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

Представляем вашему вниманию проект **One Core API** — слой совместимости с открытым исходным кодом для Windows XP/2003, который позволяет запускать на этих системах программы для более поздних ОС. По сути это враппер функций NT6. Путем дополнительных ухищрений обеспечивается поддержка DirectX 10. One Core API создан на основе исходников Wine и ReactOS, но его разработкой занимается другая команда.
Всех желающих приглашаем присоединится к разработке: [github.com/Skulltrail192/One-Core-Api][2]

[под катом - демонстрация возможностей][3]

[1]: https://habrastorage.org/files/b67/152/534/b67152534585452ebf0e1eedf25294bb.jpg
[2]: https://github.com/Skulltrail192/One-Core-Api
[3]: https://habrahabr.ru/post/319110/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut

[>] VZ7 vs VZ6: есть ли повод обновляться?
habra.16
habrabot(difrex,1) — All
2017-01-08 18:30:03


В уходящем году вышла новая версия нашего основного продукта – системы виртуализации Virtuozzo. С тех пор мы постоянно получаем вопросы: «Стоит ли обновляться?», «Чем 7ка лучше 6ки?» и так далее. Поэтому на праздниках возникло желание расставить точки над i и в одном посте рассказать об отличиях Virtuozzo последней версии от предыдущих.

![image][1]

[Читать дальше →][2]

[1]: https://habrastorage.org/getpro/habr/post_images/8b7/bf1/b97/8b7bf1b9781cf961d7cfae3b7c8954cc.jpg
[2]: https://habrahabr.ru/post/319112/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut

[>] Хаос внутри судоку
habra.16
habrabot(difrex,1) — All
2017-01-08 21:30:03


![][1]Многие из вас наверняка знакомы с такой головоломкой, как судоку. Возможно, даже реализовывали программу для автоматического решения. На хабре тема судоку обсуждалась уже множество раз, и, как показывает практика, практически любой способ автоматического нахождения ответа в итоге сводится к направленному перебору. И это вполне естественно, ведь даже ручные решения придерживаются тех же принципов. Но что, если поступить иначе?
В данной статье я рассмотрю один очень занятный метод, предложенный в 2012 году, основанный на строго математическом подходе. Программная реализация прилагается.


[Осторожно, тут много формул][2]

[1]: https://habrastorage.org/files/2b5/155/1d8/2b51551d8e2c42f8b856583da47ef39e.png
[2]: https://habrahabr.ru/post/311948/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut

[>] Обещания Google начали сбыватся — теперь сайты https помечаются как надёжные
habra.16
habrabot(difrex,1) — All
2017-01-08 22:00:03


![][1]

Пару месяцев назад Google решила перевести весь интернет на HTTPS, стимулируя пользователей браузера Chrome посещать только HTTPS сайты.

Сейчас начался первый этап — пометка сайтов с https как безопасные.

Что там будет дальше?
[Читать дальше →][2]

[1]: https://habrastorage.org/files/bfc/c51/c16/bfcc51c16de94f40a79541a773cd33dc.png
[2]: https://habrahabr.ru/post/319084/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut

[>] Обещания Google начали сбываться — теперь сайты https помечаются как надёжные
habra.16
habrabot(difrex,1) — All
2017-01-08 23:00:04


![][1]
_(Разница между HTTPS и HTTP к которой идет Google)_

Пару месяцев назад Google решила перевести весь интернет на HTTPS, стимулируя пользователей браузера Chrome посещать только HTTPS сайты.

Сейчас начался первый этап — пометка сайтов с https как безопасные.

Что там будет дальше?
[Читать дальше →][2]

[1]: https://habrastorage.org/files/608/b0d/f0a/608b0df0a31a46488538069075a0d1c9.png
[2]: https://habrahabr.ru/post/319084/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut

[>] Про Z-оrder и R-дерево
habra.16
habrabot(difrex,1) — All
2017-01-09 11:00:05


![image][1]
Индекс на основе [Z-order][2] кривой в сравнении с [R-деревом][3] имеет массу преимуществ, он:
* реализован как обычное B-дерево, а мы знаем что
* страницы B-дерева имеют лучшую заполняемость, кроме того,
* Z-ключи сами по себе более компактны
* B-дерево имеет естественный порядок обхода, в отличие от R-дерева
* B-дерево быстрее строится
* B-дерево лучше сбалансировано
* B-дерево понятнее, не зависит от эвристики расщепления/слияния страниц
* B-дерево не деградирует при постоянных изменениях
* ...Впрочем, у индексов на основе Z-order есть и недостаток — сравнительно низкая производительность :). Под катом мы попробуем разобраться с чем связан этот недостаток и можно ли что-то с этим сделать.
[Читать дальше →][4]

[1]: https://habrastorage.org/files/3a9/cf4/f19/3a9cf4f195fe4a4fb743a640588a1c6f.png
[2]: https://en.wikipedia.org/wiki/Z-order_curve
[3]: https://en.wikipedia.org/wiki/R-tree
[4]: https://habrahabr.ru/post/319096/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut

[>] Особенности использования сертификатов от Let's Encrypt и способ настройки nginx в Debian и Ubuntu
habra.16
habrabot(difrex,1) — All
2017-01-09 12:00:04


![image][1]



Если вдруг вся эта история прошла мимо вас, [Let's Encrypt][2] — центр сертификации от некоммерческой организации ISRG, существующий [при поддержке EFF][3] и многих компаний, взявшей на себя миссию дать людям бесплатные SSL/TLS сертификаты для сайтов и серверов. Сертификаты от Let's Encrypt уже используются [на более чем 10 миллионах доменов][4].



Кроме очевидной бесплатности у сертификатов от Let's Encrypt есть особое, отсутствующее у любых других коммерческих сертификационных центров, достоинство: если вы однажды получили сертификат от Let's Encrypt, то, при прочих равных, это навсегда. Не нужно раз в год-два вручную обновлять сертификаты. Не нужно вообще вспоминать что сертификаты где-то есть. Получил, настроил и забыл!



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



Организации автоматического обновления сертификатов в статье уделено пристальное внимание, с тем чтобы вы могли в полной мере оценить это принципиальное преимущество Let's Encrypt.

[Читать дальше →][5]

[1]: https://habrastorage.org/files/2a7/3ca/80c/2a73ca80c919473da68bd5ed0d205d83.png
[2]: https://letsencrypt.org/
[3]: https://www.eff.org/ru/deeplinks/2014/11/certificate-authority-encrypt-entire-web
[4]: https://letsencrypt.org/stats/
[5]: https://habrahabr.ru/post/318952/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut

[>] VulnHub: Слепая эксплуатация и Брайнфак в DC416 Basement
habra.16
habrabot(difrex,1) — All
2017-01-09 12:30:07


![][1]
Продолжаем разбор CTF с конференции [DefCon Toronto's][2]. Задания предоставлены командой [VulnHub][3], за что им огромное спасибо. А мы рассмотрим [DC416 Basement][4].
Ниже, вы можете ознакомиться с предыдущим райтапом:
* [DC416 Dick Dastardly][5][Читать дальше →][6]

[1]: https://habrastorage.org/files/ece/eae/75f/eceeae75face42b2ab237d6974a25eda.png
[2]: https://dc416.com/
[3]: https://www.vulnhub.com/
[4]: https://www.vulnhub.com/entry/dc416-2016,168/
[5]: https://habrahabr.ru/post/318372/
[6]: https://habrahabr.ru/post/318998/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut

[>] Чистая архитектура в Python: пошаговая демонстрация (часть 1)
habra.16
habrabot(difrex,1) — All
2017-01-09 13:30:03


**Примечание переводчика**

Данная статья является [переводом][1]. Дословный перевод занял 35 страниц А4 в ворде. Планирую разбить её на 5-6 частей. Думаю, данная тема должна быть полезна многим программистам, желающим писать свои web-приложения лучше и чище. Так же статья полезна тем, кто хочет научиться писать web-приложения с методологией TDD с применением именно модульных тестов, а не интеграционных, как это обычно делалось в тех статьях, что попадались мне на глаза. Если где-то использованы неверные термины или перевод кажется слишком машинным — напишите мне в личку, вряд ли это гугл-транслятор, скорее всего дело в моей косноязычности и посредственном знанием английского языка.



Год назад мой друг [Roberto Ciatti][2] познакомил меня с концепцией, которую Роберт Мартиным называет чистой архитектуры. Дядя Боб много говорит об этой концепции на конференциях и написал о ней очень интересные статьи. «Чистая архитектура» представляет собой способ структурирования системы программного обеспечения, набор соглашений (нечто большее чем строгие правила) о различных слоях и ролях их участников.



Как он ясно выражается в посте, метко названным [«Чистая архитектура»][3] ([перевод ][4]на хабре), идея этого подхода не нова, строится на множестве концепций, которые проталкивались многими разработчиками программного обеспечения в течение последних 3-х десяти лет.

[Читать дальше →][5]

[1]: http://blog.thedigitalcatonline.com/blog/2016/11/14/clean-architectures-in-python-a-step-by-step-example/
[2]: http://github.com/gekorob
[3]: http://8thlight.com/blog/uncle-bob/2012/08/13/the-clean-architecture.html
[4]: http://habrahabr.ru/post/269589/
[5]: https://habrahabr.ru/post/319126/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut

[>] [Из песочницы] Что делать, если у кабелей есть уши, или стеганографическое прокси
habra.16
habrabot(difrex,1) — All
2017-01-09 13:30:03


День добрый. Сегодня я расскажу вам об одном виде паранойи, связанном с последними тенденциями в сфере защиты государством населения от информации, и методе его лечения.

![image][1][Читать дальше →][2]

[1]: https://habrastorage.org/files/c26/6ea/540/c266ea5409674bb9b8428e0621b29ab4.jpg
[2]: https://habrahabr.ru/post/319148/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut

[>] [Из песочницы] Python: коллекции, часть 1: классификация, общие подходы и методы, конвертация
habra.16
habrabot(difrex,1) — All
2017-01-09 16:00:04


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

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

Вот именно эту проблему я хочу попытаться решить в данном цикле статей – рассмотреть ряд подходов к работе со стандартными коллекциями в Python в сравнении между коллекциями разных типов, а не по отдельности, как это обычно показывается в обучающих материалах. Кроме того, постараюсь затронуть некоторые моменты, вызывающие сложности и ошибки у начинающих.
[Читать дальше →][1]

[1]: https://habrahabr.ru/post/319164/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut

[>] Создаём честный Форекс
habra.16
habrabot(difrex,1) — All
2017-01-09 16:30:03


У современного человека слово «форекс» непременно ассоциируется с нелестными эпитетами, самый безобидный из которых — «казино». По смыслу именно «казино» лучше всего отражает суть предмета: игроки форекс делают ставки на рост или падение котировок финансовых инструментов, отдавая часть своих денег в виде комиссии за операции. Остальные негативные сравнения по большей части вызваны некомпетентностью и жадностью участников этого сегмента индустрии развлечений, которые становятся жертвами многочисленных паразитирующих на нём дельцов.

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

![][1]

Эта статья расскажет о способе устранить конфликт интересов в любой отдельно взятой форекс-компании. На первый взгляд этот способ выглядит еще более порочно, чем самый кухонный форекс, но по факту это реальная возможность решить проблему в принципе и дать игроку шанс выиграть честно.
[Читать дальше →][2]

[1]: https://habrastorage.org/files/918/32a/35d/91832a35de914255bb250863c3c2e9e6.jpg
[2]: https://habrahabr.ru/post/319076/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut

[>] [Перевод] learnopengl. Урок 1.7 — Трансформации
habra.16
habrabot(difrex,1) — All
2017-01-09 16:30:03


Теперь мы знаем как создавать объекты, раскрашивать их и накладывать на них текстуры, но они все еще довольно скучны, поскольку являются статическими объектами. Мы можем попробовать заставить их двигаться изменяя координаты вершин для каждого кадра, но это довольно муторно и требует процессорных вычислений. Есть гораздо более удобный способ для совершения трансформаций над объектом — это применение матриц. Но это не значит, что мы сейчас будем разговаривать про кунг фу и искусственный цифровой мир.

[Читать дальше →][1]

[1]: https://habrahabr.ru/post/319144/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut

[>] Переходим c Tarantool 1.5 на 1.6
habra.16
habrabot(difrex,1) — All
2017-01-09 17:30:04


![][1]

Привет, Хабр! Хочу рассказать историю миграции с [Tarantool][2] версии [1\.5][3] на [1\.6][4] в одном из наших проектов. Как вы думаете, нужно ли заниматься миграцией на новую версию, если и так все работает? Насколько легко это сделать, если у вас уже написано достаточно много кода? Как не затронуть живых пользователей? С какими трудностями можно столкнуться при таких изменениях? Какой вообще профит от переезда? Ответы на все вопросы можно найти в этой статье.
[Читать дальше →][5]

[1]: https://habrastorage.org/files/b21/3e1/63b/b213e163b6874891829ce7deec20791b.jpg
[2]: https://tarantool.org/
[3]: http://15.tarantool.org/
[4]: https://tarantool.org/
[5]: https://habrahabr.ru/post/319170/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut

[>] Чистая архитектура в Python: пошаговая демонстрация. Часть 1
habra.16
habrabot(difrex,1) — All
2017-01-09 18:30:04


**Примечание переводчика**

Данная статья является [переводом][1]. Дословный перевод занял 35 страниц А4 в ворде. Планирую разбить её на 5-6 частей. Думаю, данная тема должна быть полезна многим программистам, желающим писать свои web-приложения лучше и чище. Так же статья полезна тем, кто хочет научиться писать web-приложения с методологией TDD с применением именно модульных тестов, а не интеграционных, как это обычно делалось в тех статьях, что попадались мне на глаза. Если где-то использованы неверные термины или перевод кажется слишком машинным — напишите мне в личку, вряд ли это гугл-транслятор, скорее всего дело в моей косноязычности и посредственном знанием английского языка.



Год назад мой друг [Roberto Ciatti][2] познакомил меня с концепцией, которую Роберт Мартин называет чистой архитектурой. Дядя Боб много говорит об этой концепции на конференциях и пишет о ней очень интересные статьи. «Чистая архитектура» представляет собой способ структурирования системы программного обеспечения, набор соглашений о различных слоях и ролях их участников, нечто большее, чем строгие правила.



Как он уже говорил в своей статье [«Чистая архитектура»][3] ([перевод ][4]на хабре), идея самого подхода не нова, она строится на множестве концепций, которые продвигались многими разработчиками программного обеспечения в течение последних 3-х десяти лет.

[Читать дальше →][5]

[1]: http://blog.thedigitalcatonline.com/blog/2016/11/14/clean-architectures-in-python-a-step-by-step-example/
[2]: http://github.com/gekorob
[3]: http://8thlight.com/blog/uncle-bob/2012/08/13/the-clean-architecture.html
[4]: http://habrahabr.ru/post/269589/
[5]: https://habrahabr.ru/post/319126/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut

[>] Nuklear — идеальный GUI для микро-проектов?
habra.16
habrabot(difrex,1) — All
2017-01-09 19:30:04


![][1] [Nuklear][2] — это библиотека для создания immediate mode пользовательских интерфейсов. Библиотека не имеет никаких зависимостей (только C89! только хардкор!), но и не умеет создавать окна операционной системы или выполнять реальный рендеринг. Nuklear — встраиваемая библиотека, которая предоставляет удобные интерфейсы для отрисовки средствами реализованного приложения. Есть примеры на WinAPI, X11, SDL, Allegro, GLFW, OpenGL, DirectX. Родителем концепции была библиотека [ImGUI][3].



Чем прекрасна именно Nuklear? Она имеет небольшой размер (порядка 15 тысяч строк кода), полностью содержится в одном заголовочном файле, создавалась с упором на портативность и простоту использования. Лицензия Public Domain.

[Читать дальше →][4]

[1]: https://habrastorage.org/files/3f8/c56/d78/3f8c56d7857b4128a4c1ee31b3c423c0.png
[2]: https://github.com/vurtun/nuklear
[3]: https://github.com/ocornut/imgui
[4]: https://habrahabr.ru/post/319106/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut

[>] [Из песочницы] Библиотека vk для работы с VK API на Python
habra.16
habrabot(difrex,1) — All
2017-01-09 22:00:04


![image][1]
Привет, Хабр! Данная статья предназначена для тех, кто хочет разобраться с основами VK API на Python, так как статей по этому поводу нет (на Хабре есть одна статья, но она уже не совсем актуальна, так как некоторые методы не работают), а на других ресурсах мне удалось найти только вопросы пользователей, но никаких гайдов и прочего.

Для работы с VK API в Python есть две популярные библиотеки: [vk][2] и [vk\_api][3]. Какая из библиотек лучше я судить не возьмусь, но скажу одно: у vk документация слишком мала (поэтому разбирался практически методом тыка) и на английском языке, а у vk\_api документация более развернута (поэтому писать о данной библиотеке смысла не вижу) и на русском. Для меня не главное на каком языке документация, но для некоторых пользователей это играет большое значение при выборе.

Как вы уже поняли, в данной статье рассматривается работа с библиотекой vk.
[Читать дальше →][4]

[1]: http://s018.radikal.ru/i515/1701/10/3cf3aa225267.png
[2]: https://github.com/dimka665/vk/commits/master
[3]: https://github.com/python273/vk_api
[4]: https://habrahabr.ru/post/319178/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut

[>] Хакеры атакуют MongoDB: число скомпрометированных систем превысило 27 000
habra.16
habrabot(difrex,1) — All
2017-01-10 08:30:03


[![][1]][2]

В СМИ попала [информация][3] о масштабной волне кибератак, жертвами которых становятся администраторы систем, использующих MongoDB. Злоумышленники получают к ним доступ, а затем удаляют данные из уязвимых или неверно настроенных систем, после чего требуют выкуп. [Читать дальше →][4]

[1]: https://habrastorage.org/files/a9e/9b8/447/a9e9b84470894bc7a44edf145462cff1.jpg
[2]: https://habrahabr.ru/company/pt/blog/319186/
[3]: http://www.theregister.co.uk/2017/01/09/mongodb/
[4]: https://habrahabr.ru/post/319186/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut

[>] Сшиваем SSL-сертификаты правильно на bash
habra.16
habrabot(difrex,1) — All
2017-01-10 10:30:08


Использование SSL-шифрование на сайтах приобретает уже почти обязательный характер: Google с этого года начал агрессивно предупреждать о небезопасном соединении с сайтами, ряд платежных шлюзов требуют безопасное подключение на сайтах (например, Яндекс.Касса). Установка SSL-сертификата на сайт требует достаточно сложной технической настройки веб-сервера (nginx, например). Одним из аспектов этой настройки является использование «сшивания» (stapling) SSL-сертификатов вплоть до корневого для ускорения установления безопасного соединения из браузеров к сайтам.

SSL stapling позволяет сэкономить для нового посетителя сайта 0,1-1 секунду (за счет экономии 1-2 запросов за промежуточными сертификатами с учетом DNS-запросов, установления соединения и получения данных, каждый из запросов может выполняться до 500 мс в случае 95 перцентиля пользователей). По умолчанию, SSL stapling выполняется для всех сертификатов, загруженных в [Айри][1].

Обычно цепочка SSL-сертификатов, которую должен запросить браузер, выглядит следующим образом:
> SSL-сертификат сайта — Промежуточный SSL-сертификат [- Промежуточный SSL-сертификат 2] — Корневой SSL-сертификат
Корневые SSL-сертификаты загружены в браузер (в целях избежания их подделки при передачи по сети). Промежуточные SSL-сертификаты могут быть получены из SSL-сертификата сайта («родительский» сертификат, которым подписан данный сертификат, внесен в соответствующем поле данного сертификата). Как это корректно сделать, чтобы сшить все сертификаты и ускорить загрузку сайта в браузере?
[Читать дальше →][2]

[1]: https://айри.рф
[2]: https://habrahabr.ru/post/319166/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut

[>] [Перевод] Эффективный расчёт области видимости и линии взгляда в играх
habra.16
habrabot(difrex,1) — All
2017-01-10 13:30:03


![image][1]

В стратегических играх обычно требуется знать область видимости NPC, чтобы игрок мог продумывать стратегию и делать следующий ход. Мы рассмотрим математику и реализацию рациональной модели, не просаживающей скорость игры при большом количестве NPC на карте. Если вы хотите увидеть готовое интерактивное демо модели, перейдите [сюда][2] и играйте прямо в браузере! Вот скриншот демонстрации:

![image][3]

Имея параметры видимости наблюдателя (направление взгляда, расстояние видимости и угол поля зрения), нам нужно найти видимую для него область, т.е. определить область видимости (field of view, FoV). Если препятствия отсутствуют, это будет сектор круга, состоящий из двух граней (радиусов) и соединяющей их дуги (см. Рис. 1). Кроме того, имея заданную точку мира, мы должны быстро определить, видима ли она для наблюдателя, т.е. необходимо обрабатывать запросы линии взгляда (line of sight, LOS) для заданной точки. Обе эти операции можно выполнить достаточно эффективно для использования при рендеринге в реальном времени.
[Читать дальше →][4]

[1]: https://habrastorage.org/getpro/habr/post_images/cad/9a8/ec1/cad9a8ec147af07461b9db01b3fa0fba.gif
[2]: https://legends2k.github.io/2d-fov/
[3]: https://habrastorage.org/getpro/habr/post_images/05b/603/b54/05b603b54d939fe2e3b0137eb52c7296.jpg
[4]: https://habrahabr.ru/post/319040/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut

[>] Обнаружение в коде дефекта «разыменование нулевого указателя»
habra.16
habrabot(difrex,1) — All
2017-01-10 14:30:06


Этой статьей мы открываем серию публикаций, посвященных обнаружению ошибок и уязвимостей в open-source проектах с помощью статического анализатора кода [AppChecker][1]. В рамках этой серии будут рассмотрены наиболее часто встречающиеся дефекты в программном коде, которые могут привести к серьезным уязвимостям. Сегодня мы остановимся на дефекте типа «разыменование нулевого указателя».

Разыменование нулевого указателя (CWE-476) представляет собой дефект, когда программа обращается по некорректному указателю к какому-то участку памяти. Такое обращение ведет к неопределенному поведению программы, что приводит в большинстве случаев к аварийному завершению программы.
[Читать дальше →][2]

[1]: https://npo-echelon.ru/production/65/10920
[2]: https://habrahabr.ru/post/319218/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut

[>] [Из песочницы] Простой и быстрый алгоритм генерации ландшафта
habra.16
habrabot(difrex,1) — All
2017-01-10 16:00:03


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

**В какой ситуации удобен алгоритм**

Недавно столкнулся с задачей: написать простую стратегию с трёхмерным ландшафтом. Так как я в данный момент обладаю маленьким опытом программирования на языке С++, мои попытки написать «diamond-square» закончились ошибками на ровном месте (ссылка на статью по «diamond-square» также будет в конце). Требовался простой в написании алгоритм, не дающий реалистичный ландшафт, так что данный метод поможет в первую очередь новичкам.

**Алгоритм и результат **

Прежде чем описывать сам алгоритм поделюсь его результатами:

![image][1]
[Читать дальше →][2]

[1]: https://cs540101.vk.me/c638128/v638128684/1947e/xaE18CPndjU.jpg
[2]: https://habrahabr.ru/post/319226/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut

[>] [Перевод] Чистая архитектура в Python: пошаговая демонстрация. Часть 2
habra.16
habrabot(difrex,1) — All
2017-01-10 17:00:03


**Содержание**

* [Часть 1][1]
* _Часть 2_





### Доменные модели


**Git tag:** [Step02][2]

Начнем с простого определения модели `StorageRoom`. Как было сказано ранее, модели в чистой архитектуре очень легкие, по крайней мере, легче, чем их ORM-аналоги в фреймворках.

Раз мы следуем методологии TDD, то первое, что мы напишем, это тесты. Создадим файл `tests/domain/test_storageroom.py` и поместим внутри него этот код:
[Читать дальше →][3]

[1]: https://habrahabr.ru/post/319126/
[2]: http://github.com/lgiordani/rentomatic/tree/step02
[3]: https://habrahabr.ru/post/319202/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut

[>] VulnHub: Разбираем самый короткий квест DC416 Fortress
habra.16
habrabot(difrex,1) — All
2017-01-10 17:00:03


![][1]

Продолжаем разбор CTF с конференции [DefCon Toronto's][2]. Задания предоставлены командой [VulnHub][3], за что им огромное спасибо. На этот раз остановимся на небольшом [DC416 Fortress][4], тут всего 3 флага. Так что будет не сложно.

Ниже, вы можете ознакомиться с предыдущими разборами:

* [DC416 Dick Dastardly][5]
* [DC416 Basement][6][Читать дальше →][7]

[1]: https://habrastorage.org/files/126/e0c/e64/126e0ce643954a228e33125f6120f252.png
[2]: https://dc416.com/
[3]: https://www.vulnhub.com/
[4]: https://www.vulnhub.com/entry/dc416-2016,168/
[5]: https://habrahabr.ru/post/318372/
[6]: https://habrahabr.ru/post/318998/
[7]: https://habrahabr.ru/post/319204/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut

[>] Разделение текста на предложения с помощью Томита-парсера
habra.16
habrabot(difrex,1) — All
2017-01-11 12:30:03


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

Если вы начнете это делать, то довольно быстро столкнетесь с тем, что точка — это не всегда разделитель предложений (“т.к.”, “т.д.”, “т.п.”, “пр.”, “S.T.A.L.K.E.R.”). Причем эти токены не всегда будут исключениями при разбивке текста на предложения. Например, “т.п.” может быть в середине предложения, а может и в конце.

Вопросительный и восклицательный знак тоже не всегда разделяют текст на предложения. Например, “Yachoo!”. Предложения могут разделять и другие знаки, например, двоеточие (когда следует список из отдельных утверждений).

Поэтому я долго не думая поискал готовый инструмент и остановился на [Томита-парсере][1] от Яндекса. О нем и расскажу.
[Читать дальше →][2]

[1]: https://tech.yandex.ru/tomita/
[2]: https://habrahabr.ru/post/317726/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut

[>] [Из песочницы] Виртуализация с использованием Ubuntu Server 16.04 и pHpVirtualBox 5.0.5
habra.16
habrabot(difrex,1) — All
2017-01-11 13:30:03


Недавно столкнулся с задачей быстрого и простого развертывания серверов на основе связки Ubuntu Server 16.04 и pHpVirtualBox 5.0.5 для дальнейшей виртуализации всяческих OS.
Задача тривиальная, но быстрого, простого и самое главное — пошагового рецепта не нашел, поэтому по итогам успешной инсталляции решил выложить примитивный FAQ для всех интересующихся.
[Читать дальше →][1]

[1]: https://habrahabr.ru/post/319286/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut

[>] Сохранение и загрузка игры в Unreal Engine
habra.16
habrabot(difrex,1) — All
2017-01-11 13:30:03


![][1]

Здравствуйте, меня зовут Дмитрий. Я занимаюсь созданием компьютерных игр на Unreal Engine в качестве хобби. Сегодня я расскажу как сохранить игру на диск а потом загрузить её с диска.
[Читать дальше →][2]

[1]: https://habrastorage.org/files/932/2a8/5d2/9322a85d2f824646bfeb3682a3278488.jpg
[2]: https://habrahabr.ru/post/319228/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut

[>] [Из песочницы] Машинное обучение — это легко
habra.16
habrabot(difrex,1) — All
2017-01-11 14:00:03


В данной статье речь пойдёт о машинном обучении в целом и взаимодействии с датасетами. Если вы начинающий, не знаете с чего начать изучение и вам интересно узнать, что такое «датасет», а также зачем вообще нужен Machine Learning и почему в последнее время он набирает все большую популярность, прошу под кат. Мы будем использовать Python 3, так это как достаточно простой инструмент для изучения машинного обучения.
[Читать дальше →][1]

[1]: https://habrahabr.ru/post/319288/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut

[>] [recovery mode] Обнаружение в коде дефекта «разыменование нулевого указателя»
habra.16
habrabot(difrex,1) — All
2017-01-11 14:30:04


Этой статьей мы открываем серию публикаций, посвященных обнаружению ошибок и уязвимостей в open-source проектах с помощью статического анализатора кода [AppChecker][1]. В рамках этой серии будут рассмотрены наиболее часто встречающиеся дефекты в программном коде, которые могут привести к серьезным уязвимостям. Сегодня мы остановимся на дефекте типа «разыменование нулевого указателя».

Разыменование нулевого указателя (CWE-476) представляет собой дефект, когда программа обращается по некорректному указателю к какому-то участку памяти. Такое обращение ведет к неопределенному поведению программы, что приводит в большинстве случаев к аварийному завершению программы.
[Читать дальше →][2]

[1]: https://npo-echelon.ru/production/65/10920
[2]: https://habrahabr.ru/post/319218/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut

Pages: 1 ... 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 ... 133