RSS
Pages: 1 ... 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 ... 210
[>] Новая заявка на решение задачи P vs. NP
habra.16
habrabot(difrex,1) — All
2017-08-18 12:30:06



На днях [Норберт Блюм][1] [опубликовал][2] на архиве препринт с названием «A Solution of the P versus NP Problem». Таким образом Блюм претендует на решение одной из [задач тысячелетия][3], за которую кроме почестей полагается 1 миллион долларов. В данной статье я собрал небольшое резюме об этом.
[Читать дальше →][4]

[1]: http://theory.cs.uni-bonn.de/blum/blum.var
[2]: https://arxiv.org/abs/1708.03486
[3]: https://ru.wikipedia.org/wiki/%D0%97%D0%B0%D0%B4%D0%B0%D1%87%D0%B8_%D1%82%D1%8B%D1%81%D1%8F%D1%87%D0%B5%D0%BB%D0%B5%D1%82%D0%B8%D1%8F
[4]: https://habrahabr.ru/post/335884/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut

[>] [Из песочницы] Встроенные кнопки в Telegram Bot API
habra.16
habrabot(difrex,1) — All
2017-08-18 17:30:05


Добрый день уважаемые читатели, давайте рассмотрим, какие основные типы встроенных кнопок предлагают чат-боты telegram и в чем их особенности. Статья будет полезна всем, кто хочет разобраться в возможностях взаимодействия с пользователями telegram в версии bot API 2.0.
[Читать дальше →][1]

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

[>] HAProxy как LoadBalanсer для RDP фермы. Надежное решение за 0$
habra.16
habrabot(difrex,1) — All
2017-08-18 17:30:05


## HAProxy как LoadBalanсer для RDP фермы.


Совершенно случайно, в пассивном поиске альтернативы устаревшему 2X-LoadBalancer и тяжелому, непонятному Remote Connection Broker от MS наткнулся на HAProxy и его умению проксировать RDP трафик. В выдачах поисковиков практически не выдается haproxy в качестве прокси для RDP. Сейчас вдруг пачками стал выдавать. Вместе с тем, коммерческие продукты с таким же функционалом, такие как упоминались выше, стоят приличных денег.

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

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

[>] [Из песочницы] Описание алгоритмов сортировки и сравнение их производительности
habra.16
habrabot(difrex,1) — All
2017-08-18 18:30:04


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


На эту тему написано уже немало статей. Однако я еще не видел статьи, в которой сравниваются все основные сортировки на большом числе тестов разного типа и размера. Кроме того, далеко не везде выложены реализации и описание набора тестов. Это приводит к тому, что могут возникнуть сомнения в правильности исследования. Однако цель моей работы состоит не только в том, чтобы определить, какие сортировки работают быстрее всего (в целом это и так известно). В первую очередь мне было интересно исследовать алгоритмы, оптимизировать их, чтобы они работали как можно быстрее. Работая над этим, мне удалось придумать эффективную формулу для сортировки Шелла.

Во многом статья посвящена тому, как написать все алгоритмы и протестировать их. Если говорить о самом программировании, то иногда могут возникнуть совершенно неожиданные трудности (во многом благодаря оптимизатору C++). Однако не менее трудно решить, какие именно тесты и в каких количествах нужно сделать. Коды всех алгоритмов, которые выложены в данной статье, написаны мной. Доступны и результаты запусков на всех тестах. Единственное, что я не могу показать — это сами тесты, поскольку они весят почти 140 ГБ. При малейшем подозрении я проверял и код, соответствующий тесту, и сам тест. Надеюсь, что статья Вам понравится.
[Читать дальше →][1]

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

[>] Security Week 33: Flash, давай до свидания, расширения Chrome крадут трафик, выложен ключ от прошивки Apple SEP
habra.16
habrabot(difrex,1) — All
2017-08-18 23:30:05


Нет, вы только вдумайтесь в эту цифру: 1033 (_тысяча тридцать три_) уязвимости в Flash Player законопачено с 2005 года! Это больше, чем в Internet Explorer, больше, чем в Windows XP — в общем, через него «теперь хорошо вермишель отбрасывать», поскольку [тема закрыта][1].

В свое время Flash Player стал настоящей революцией для веба – благодаря ему на сайтах буйно заколосилась анимация, поперли видосики, свистелки, игры для секретарей на ресепшене, ну и, конечно, убойные баннеры (хотел повесить тут пару примеров, но от воспоминаний глаз задергался). Были даже сайты, _полностью_ сделанные на флеше.

Больше всех любили Flash «черные шляпы». Благо, его уязвимости – ходовой товар, и недостатка в них никогда не наблюдалось. Особенно урожайным выдался 2015 год, когда в «решете» насчитали еще 329 новеньких дыр. А ведь еще в 2010 году Джобс [предупреждал][2], что Flash пора вынести на помойку. Причем главным аргументом была его закрытость. Ну да, глава Apple признал, что у его компании полно собственных проприетарных стандартов, но не для веба же! При этом, кстати, Adobe всячески препятствует появлению и развитию альтернативных проигрывателей Flash. В результате имеем свободный выгул для эксплойтов, раздолье для крупного и мелкого рогатого зловреда.
[Читать дальше →][3]

[1]: https://threatpost.com/flashs-final-countdown-has-begun/127475/
[2]: https://www.apple.com/hotnews/thoughts-on-flash/
[3]: https://habrahabr.ru/post/335928/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut

[>] [Перевод] Готовьтесь к полному солнечному затмению 2017 года
habra.16
habrabot(difrex,1) — All
2017-08-19 00:30:04


![][1]

Перевод поста [Get Ready for the Total Solar Eclipse of 2017][2] Джеффри Брайанта, исследователя-программиста, Wolfram|Alpha Scientific Content.
\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_

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

Полное затмение Солнца является результатом движения Луны перед Солнцем, с точки зрения наблюдателя на Земле. Тень Луны довольно мала и только соприкасается с земной поверхностью в небольшой области, как показано на следующей иллюстрации. [Читать дальше →][3]

[1]: https://habrastorage.org/web/a9c/2da/149/a9c2da1492da4df08b41a84ed5e395e1.png
[2]: http://blog.wolfram.com/2017/08/08/get-ready-for-the-total-solar-eclipse-of-2017/
[3]: https://habrahabr.ru/post/335934/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut

[>] [Перевод] Двойное затмение! Или почему Карбондейл, штат Иллинойс, является особенным
habra.16
habrabot(difrex,1) — All
2017-08-19 04:00:05


![][1]

Перевод блога [Double Eclipse! Or Why Carbondale, Illinois, Is Special][2] Джеффри Брайанта, исследователя-программиста, Wolfram|Alpha Scientific Content.
\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_

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

![][3]

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

[1]: https://habrastorage.org/web/e5d/b0b/af9/e5db0baf9cf540eea1d1e4b2e18eb787.png
[2]: http://blog.wolfram.com/2017/08/14/double-eclipse-or-why-carbondale-illinois-is-special/
[3]: https://habrastorage.org/web/c85/97a/340/c8597a34064143c4b59de1ec9a9f6a91.png
[4]: https://habrahabr.ru/post/335936/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut

[>] [Перевод] Новые функции в Laravel 5.5
habra.16
habrabot(difrex,1) — All
2017-08-19 14:30:04


![Laravel 5.5][1]
Новый релиз Laravel 5.5 станет релизом долгосрочной поддержки (Long Term Support, LTS). Это значит, что он будет получать правки багов в течение 2х лет, а обновления безопасности — в течение 3х. Таким же был релиз Laravel 5.1, но его двухгодичный срок правок подходит к концу в этом году. Давайте посмотрим без лишней суеты, что нас ждет в новой версии.

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

[1]: https://habrastorage.org/web/5da/aec/779/5daaec7799c0423cb6570ad2cf1b68af.png
[2]: https://habrahabr.ru/post/335930/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut

[>] ReactOS версус Windows XP SP3: эпическая битва в 3DMark
habra.16
habrabot(difrex,1) — All
2017-08-19 20:00:05


![][1]

Один из волонтеров проекта решил устроить батл между Windows XP и ReactOS по дисциплине 3DMark 2006. Зрелище получилось небезынтересным, а результат весьма неожиданным и впечатляющим. Предлагаем вам самим проследить за ходом сражения и узнать? кто же и с каким счетом победил.



Батл происходил в абсолютно равных условиях в VirtualBox VM.
Характеристики хостового компьютера были такими:
> Intel Core I5 6500 @4.2GHz
> 16GB DDR4 RAM
> NVidia Geforce GTX 1060 6GB
> Samsung 850 EVO 500GB SSD
[Читать дальше →][2]

[1]: https://habrastorage.org/web/a8f/a5a/e12/a8fa5ae12c234ca2853b2dc022c0e8db.jpg
[2]: https://habrahabr.ru/post/335954/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut

[>] [Перевод] Переосмысление PID 1. Часть 3
habra.16
habrabot(difrex,1) — All
2017-08-19 21:00:04


В продолжение [второй][1] части…


### Распараллеливание заданий файловой системы


Если вы посмотрите [график][2] загрузки текущих дистрибутивов, увидите больше точек синхронизации чем просто запуски демонов: больше всего времени отнимают задания, связанные с ФС: монтирование, проверка ФС на ошибки (fsck), квотирование. Сейчас, во время загрузки много времени тратится в ожидании, пока все диски, указанные в _/etc/fstab_ не появятся в дереве устройств, а далее проверены на ошибки, примонтированы и применены квоты (если конечно они включены). Только после всего этого мы сможем пойти дальше и **в действительности** начнется загрузка служб.

Можем ли мы улучшить этот процесс? Выходит, что можем. Гарольд Хойер пришел с идеей использования достопочтенной _autofs_ для улучшения процесса.
[Читать дальше →][3]

[1]: https://habrahabr.ru/post/335488/
[2]: https://habrastorage.org/web/846/4c6/133/8464c613315944409a3b5ad77231ea18.png
[3]: https://habrahabr.ru/post/335780/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut

[>] Почему во время apt-get upgrade запускается игра Dwarf Fortress?
habra.16
habrabot(difrex,1) — All
2017-08-19 21:00:04


Большую популярность на ресурсе [Ask Ubuntu][1] снискал весьма странный вопрос пользователя Linux-дистрибутива Ubuntu. По его словам, в некоторых случаях при обновлении системы с помощью `sudo apt-get upgrade` происходит то, чего он совсем не может ожидать: запуск игры «Dwarf Fortress». История оказалась поучительной…

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

[1]: https://askubuntu.com/questions/938606/dwarf-fortress-starting-during-apt-get-upgrade
[2]: https://habrastorage.org/web/e30/d84/5e1/e30d845e1e3c4d18975f76738a7fcc5a.jpg
[3]: https://habrahabr.ru/post/335944/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut

[>] Параметрическое моделирование в САПР SolveSpace: «Неисповедимы пути Решателя» или «Червоточины Ньютона»
habra.16
habrabot(difrex,1) — All
2017-08-20 04:00:04


На первый взгляд, задача применения размерных ограничений к чертежу кажется не сложнее упражнения из школьного учебника. Точно так же показалось и мне, когда я впервые узнал о ней. В то время я работал в компании, которая занималась разработкой [программного комплекса для проектирования индивидуальных жилых домов][1] с подготовкой проектной документации "под ключ". В этом проекте я занимался разработкой алгоритма генерации многоскатных крыш, а впоследствии и всего геометрического ядра на основе Булевых операций, поэтому за дальнейшей историей я следил издалека. В какой-то определенный момент, заказчику захотелось, чтобы проектировщики могли просто указать размеры комнат, углы эркеров и ширину дверных проемов, а программа автоматически рассчитала бы все остальные параметры внешнего и внутреннего устройства дома. Эта мысль возникла у заказчика спонтанно, и поэтому срочно нужно было сделать “точно так же, как в [CATIA][2]”. Наш тимлид подошел к решению задачи с энтузиазмом и начал разрабатывать прототип. Он решал сотни уравнений в MathCAD, весь кабинет был завален графиками частных решений для двух, трех, четырех точек… Его изначальное предположение о том, что задачу можно решить аналитически, потерпело фиаско: на дворе был 2005, а это значило, что в интернете невозможно было найти хоть какую-то информацию по данной теме. В результате, после двух месяцев напряженных исследований, данную функциональность пришлось **исключить**.



![][3]

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

[1]: http://www.simpleanswers.co.uk/case-study-3d-house-estimator.html
[2]: https://ru.wikipedia.org/wiki/CATIA
[3]: https://habrastorage.org/web/17f/c80/f96/17fc80f960a5436084f68d191a3d9c27.png
[4]: https://habrahabr.ru/post/335962/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut

[>] Клонирование игры Lode Runner с первого ПК в СССР «БК-0010» плюс несколько слов о программировании игр в конце 80-х
habra.16
habrabot(difrex,1) — All
2017-08-20 11:00:04


![][1]


Недавно я оказался в не совсем обычной для себя ситуации вынужденного безделья. Пару недель поваляв дурака, я стал чувствовать, что это не такое уж и веселое занятие, которое к тому же еще и стало переходить в скуку. И мне надо было себя занять чем-нибудь относительно полезным. Раньше мне периодически приходили в голову мысли о том, чтобы вернуть к жизни какую-нибудь старую игру из времен моей юности. Но я всегда гнал такие идеи прочь, так как понимал, что "_никому это теперь не надо_". Но сейчас у меня было свободное время и, главное, было желание. В результате для клонирования я выбрал один из вариантов игры **Lode Runner**, в который я когда-то играл на первом персональном компьютере времен позднего **СССР**, который назывался **БК-0010**. Не думаю, что многие о нем помнят, так как мир «железа» поменялся с тех времен очень сильно. Однако сам **Lode Runner** с этого **БК-0010** был достаточно уникален своими правилами среди других одноименных **Lode Runner**-ов. Эта версия игры была моей самой любимой, как мне кажется, по объективным причинам, хотя… может быть тут дело просто в ностальгии. В результате я сумел себя мотивировать тем, что "_лично мне_", а, возможно, и "_всему миру_", эта игра может быть интересна, и на её восстановление стоит потратить время ([ссылка на полученный результат][2]).

Для начала взглянем на оригинал с **БК-0010** (хвала Интернету, в котором можно найти почти всё): [Читать дальше →][3]

[1]: https://habrastorage.org/getpro/habr/post_images/b4d/678/2cf/b4d6782cf720d7800a3f3133db71ef6b.png
[2]: http://astralax.ru/projects/others/loderunner
[3]: https://habrahabr.ru/post/335968/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut

[>] Игровая модель поведения на рынке двух конкурирующих фирм на Python
habra.16
habrabot(difrex,1) — All
2017-08-20 15:30:04


### Введение


Математическое моделирование в экономике позволяет предупредить возникновения ряда проблем, возникающих в реальной предпринимательской деятельности. Одной из таких проблем у производителей товаров является банкротство.

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


### Постановка задачи


Рассмотрим модель поведения на рынке двух конкурирующих фирм, выпускающих аналогичный товар в объемах х и у, пользующийся неограниченным спросом [1]. Построим следующие две функции для цены и издержек.

**Листинг построения графиков функций цены и издержек**
# -*- coding: utf8 -*-
import numpy as np
import matplotlib.pyplot as plt
a=10
def f(q): Функция цены от объёма товара
return a*np.e**(-0.5*q**2)
def h(q): #Функция издержек от объёма товара
return np.sqrt(q)
plt.figure()
q= np.arange(0, 2.01, 0.1)#Массив значений аргумента
plt.title(r'$y=f(q)$') #Заголовок в формате TeX
plt.ylabel(r'$f(q)$') #Метка по оси y в формате TeX
plt.xlabel(r'$q$') #Метка по оси x в формате TeX
plt.grid(True) #Сетка
plt.plot(q,f(q)) #Построение графика
plt.figure()
plt.title(r'$y=h(q)$') #Заголовок в формате TeX
plt.ylabel(r'$h(q)$') #Метка по оси y в формате TeX
plt.xlabel(r'$q$') #Метка по оси x в формате TeX
plt.grid(True) #Сетка
plt.plot(q,h(q)) #Построение графика
plt.show() #Показать график


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

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

[>] [Из песочницы] Импровизированный считыватель штрих кодов для 1С через Telegram на Go
habra.16
habrabot(difrex,1) — All
2017-08-20 16:00:05


Всем привет! Хочу поделиться тем, что возможно кому-то пригодится.

Захотелось, для разнообразия, что-нибудь несложное реализовать на Go, и тут параллельно были прочтены статьи на хабре про Telegram-ботов, а на работе проект по интеграции штрих-кодирования и 1С, ну вот и было решено совместить приятное с полезным и реализовать импровизированный считыватель штрих-кодов для тестирования и на пощупать как в 1С это работает. [Читать дальше →][1]

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

[>] Nodebackup — сохранение данных из контейнеров (докер) и так-же остальных
habra.16
habrabot(difrex,1) — All
2017-08-20 16:00:04


![][1]

Это рассказ про самописнный велосипед, которым я постарался выполнить главный завет системного администратора — чтобы всё работало, но я ничего не делал. )

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

[1]: https://habrastorage.org/web/e20/29b/f5b/e2029bf5b2944eae93408230462d5c93.png
[2]: https://habrahabr.ru/post/335880/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut

[>] Blockchain
habra.16
habrabot(difrex,1) — All
2017-08-20 18:00:04


_Данный текст будет являться новой главой для учебного пособия по защите информации кафедры радиотехники и систем управления МФТИ (ГУ). Полностью учебник доступен на [github][1]. На хабре я же планирую выкладывать новые «большие» куски, во-первых, чтобы собрать полезные комментарии и замечания, во-вторых, дать сообществу больше обзорного материала по полезным и интересным темам._

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

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

В таких системах есть три группы действующих лиц:
* источники событий (транзакций)
* источники блоков (фиксаторы транзакций)
* получатели (читатели) блоков и зафиксированных транзакций.

В зависимости от реализации эти группы могут пересекаться. В системах типа BitCoin, например, все участники распределённой системы могут выполнять все три функции. Хотя за создание блоков (фиксацию транзакций) обычно отвечают выделенные вычислительные мощности, а управляющими их участников называют майнерами (см. раздел про децентрализованный blockchain далее).

Основное требование к таким журналам таково:
* Невозможность модификации журнала: после добавления транзакции в журнал должно быть невозможно её оттуда удалить или изменить.

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

[1]: https://github.com/vlsergey/infosec
[2]: https://habrahabr.ru/post/335994/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut

[>] Мириады запущенных задач на C#
habra.16
habrabot(difrex,1) — All
2017-08-21 00:00:04


Недавно на ресурсе Medium были опубликованы [две][1] [статьи][2] от одного и того же автора, затрагивающие функциональность C# async/await.



Основными выводами были:


* рекурсивный вызов асинхронного метода в C# подвержен StackOverflowException
* goroutine'ы лучше задач (тасков) в .NET в плане производительности

Но главная проблема вышеприведенных публикаций — абсолютное непонимание модели кооперативной многозадачности в C# с вводом читателей в заблуждение. Сами же бенчмарки — **бессмысленные**, как мы увидим позже.



Далее в статье я попытаюсь раскрыть суть проблемы более подробно с примерами решения.


**TL;DR**
После небольшой правки кода исходных примеров, реализация бенчмарка на .NET оказывается быстрее варианта Go. Попутно решаем проблему переполнения стека у рекурсивных асинхронных методов.


**NB**: использоваться будут свежевыпущенный .NET Core 2.0 и Go 1.8.3.

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

[1]: https://medium.com/@alexyakunin/async-recursion-and-some-weirdness-of-design-of-asynchronous-api-in-c-vs-f-a5760a00a26a
[2]: https://medium.com/@alexyakunin/go-vs-c-part-1-goroutines-vs-async-await-ac909c651c11
[3]: https://habrahabr.ru/post/336000/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut

[>] Мутационное тестирование
habra.16
habrabot(difrex,1) — All
2017-08-21 05:30:08


![][1] Юнит тесты помогают нам удостовериться, что код работает так, как мы этого хотим. Одной из метрик тестов является _процент покрытия_ строк кода (Line Code Coverage).



Но насколько корректен данный показатель? Имеет ли он практический смысл и можем ли мы ему доверять? Ведь если мы удалим все `assert` строки из тестов, или просто заменим их на `assertSame(1, 1)`, то по-прежнему будем иметь 100% Code Coverage, при этом тесты ровным счетом не будут тестировать ничего.



Насколько вы уверены в своих тестах? Покрывают ли они все ветки выполнения ваших функций? Тестируют ли они вообще хоть что-нибудь?



Ответ на этот вопрос даёт мутационное тестирование.

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

[1]: https://habrastorage.org/web/2c5/3b5/2c5/2c53b52c5d5a411bafe24eba7116b302.png
[2]: https://habrahabr.ru/post/334394/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut

[>] Разбор: могут ли хакеры на самом деле взломать биржу
habra.16
habrabot(difrex,1) — All
2017-08-21 12:00:06


[![][1]][2]

_Изображение:[Christine Puccio][3], [CC BY-SA 2.0][4]_

Миллионы инвесторов во всем мире видят в фондовом рынке инструмент своего обогащения. Их вера в биржу просто невероятна. И конечно, инвесторы считают, что биржи хорошо защищены по-умолчанию: цена акций может колебаться, но сами они никуда не исчезнут со счета инвестора, и на их стоимость не должны влиять действия недобросовестных игроков.

Но могут ли на самом деле взломать фондовый рынок? Аналитики CNBC [разобрались][5] с вопросом подробнее — мы подготовили адаптированную версию этого материала. [Читать дальше →][6]

[1]: https://habrastorage.org/web/8ca/653/04c/8ca65304cc9543cfab7edf54f3b3e845.png
[2]: https://habrahabr.ru/company/itinvest/blog/336028/
[3]: https://www.flickr.com/photos/christinepuccio/
[4]: https://creativecommons.org/licenses/by-sa/2.0/
[5]: https://www.cnbc.com/2017/07/31/could-the-stock-market-ever-be-hacked.html
[6]: https://habrahabr.ru/post/336028/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut

[>] [Перевод] 30+ инструментов для профессиональной разработки приложений под Android
habra.16
habrabot(difrex,1) — All
2017-08-21 12:30:05


![image][1]

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

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

[1]: https://habrastorage.org/getpro/habr/post_images/21c/88e/c1a/21c88ec1acd00e8ce1a841f750194d81.jpg
[2]: https://habrahabr.ru/post/336020/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut

[>] [recovery mode] Установка и использование GNU/Linux вместо Chrome OS на Toshiba Chromebook 2
habra.16
habrabot(difrex,1) — All
2017-08-21 14:30:04


Привет всем! Некоторое время назад я приобрёл себе Chromebook модели Toshiba Chromebook 2 CB35-B3330 и заменил на нём Chrome OS на традиционный GNU/Linux. Это была не установка через crouton, а именно «чистая» установка с полным удалением Chrome OS. Борьба с плохой поддержкой Линуксом этого хромбука заняла неожиданно много времени (несколько вечеров), но в итоге все проблемы решились и хромбук стал полноценной рабочей машиной.

В итоге я решил написать статью, в которой:

* Очень кратко описан сам хромбук и мои впечатления от железа.
* Описаны основные проблемы по установке GNU/Linux на данную конкретную модель и пути их решения.
* Очень кратко описано, каким образом я сам его использую после установки Линукса.

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

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

[>] «Java-разработчики не осознают проблему с профайлерами»: Андрей Паньгин и Нитсан Вакарт о Java-профилировании
habra.16
habrabot(difrex,1) — All
2017-08-21 15:30:05


![][1]

Легко подумать, что от профилирования не стоит ожидать больших новостей: поскольку разработчики профилируют уже десятилетиями, до чего там можно было ещё не додуматься? Но в Java-профилировании кроются серьёзные подводные камни вроде safepoint bias, и появляются новые инструменты для решения подобных проблем.

**Андрей [apangin][2] Паньгин** (Одноклассники) недавно создал один из таких инструментов: на конференции JPoint в апреле он представил опенсорсный проект [async-profiler][3], которому safepoint bias не страшен. Другой эксперт в этой теме — **Нитсан Вакарт**: о той же проблеме с safepoints многие узнали благодаря его [блог-посту][4] «Why (Most) Sampling Java Profilers Are Fucking Terrible».

Мы решили поговорить с ними обоими сразу, начав разговор с последних новостей об async-profiler, а позже перейдя к состоянию Java-профилирования в целом.
[Читать дальше →][5]

[1]: https://habrastorage.org/web/104/a16/0a5/104a160a58ac416d8502b4ffc936c648.jpg
[2]: https://habrahabr.ru/users/apangin/
[3]: https://github.com/jvm-profiling-tools/async-profiler
[4]: http://psy-lob-saw.blogspot.ru/2016/02/why-most-sampling-java-profilers-are.html
[5]: https://habrahabr.ru/post/335852/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut

[>] Мы не удержались и тоже сделали SDK для мессенджеров: Web, Android и iOS
habra.16
habrabot(difrex,1) — All
2017-08-21 15:30:05


![][1]


Вообще мы в Voximplant занимаемся голосовой автоматикой. Принять звонок с сотового телефона, запустить JavaScript сценарий клиента – там пара тысяч строк логики что с этим звонком делать, включая исходящие на веб-браузеры и мобильные приложения – вот эта вся история. Отдельная история – видео. Образование, телемедицина, совещания. Тот же SIP, те же кодеки, только данных передается в сотню раз больше. При этом браузеры любят зависать и падать, когда им не нравится полученный с другой стороны WebRTC SDP пакет, а мы их от этого отучаем.

Но, как оказалось, голоса и видео клиентам мало: “Мы не хотим сами писать чатик, уже два раза все переписывали и три питониста уволилось. Дайте нам стек unified communications, чтобы всё было на одной платформе, и мы не парились”. И на прошлой неделе мы стали этим самым “Unified Communications”. Теперь на нас можно собрать “Skype for Web” целиком: не только голосовые и видеозвонки, но и обмен сообщениями. Под катом я хочу показать как работает сделанный нами мессаджинг и, надеюсь, получить от вас фидбек – насколько хорошим получилось API и все ли с помощью него можно сделать?
[Читать дальше →][2]

[1]: https://habrastorage.org/web/406/1ad/d41/4061add41e8c4d968e01bb05c73e99f5.jpg
[2]: https://habrahabr.ru/post/336038/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut

[>] [Перевод] 10 приёмов работы в терминале Linux, о которых мало кто знает
habra.16
habrabot(difrex,1) — All
2017-08-21 16:00:04


Близкое знакомство с возможностями терминала — один из признаков человека, который хорошо разбирается в Linux. Хотя некоторые вещи запомнить сложно, есть довольно-таки простые, но эффективные приёмы, которые способны повысить качество и скорость работы в терминале. Пожалуй, каждый пользователь Linux рано или поздно обзаводится собственным списком ценных мелочей. Надеемся, некоторых из тех десяти приёмов работы в командной строке Linux, которыми мы хотим с вами поделиться, попадут в ваш личный список полезных команд.

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

[1]: https://habrastorage.org/getpro/habr/post_images/6ea/62c/2b7/6ea62c2b7a1783c614d87c567eb4ed3d.jpg
[2]: https://habrahabr.ru/company/ruvds/blog/336060/
[3]: https://habrahabr.ru/post/336060/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut

[>] Простой Java-код, ломающий систему типов Scala
habra.16
habrabot(difrex,1) — All
2017-08-21 16:00:05


Простой код на Java: generic интерфейс, класс который его реализует, и метод, принимающий его экземпляр:


//Gen.java:
public interface Gen {
A value();
}

//GenInt.java:
public class GenInt implements Gen {
private final int i;
public GenInt(int i) {
this.i = i;
}
@Override
public Integer value() {
return i;
}
}

//GenTest.java:
public class GenTest {
public static T test(A a) {
return a.value();
}
public static void main(String[] argv) {
GenInt g = new GenInt(42);
Integer i = test(g);
}
}

Он компилируется и даже запускается. Как вы думаете, что будет, если вам захочется вызывать метод `test` из Scala?


object TestFail extends App {
val genInt = new GenInt(42)
val i = GenTest.test(genInt)
} [Что может пойти не так?][1]

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

[>] Шесть мифов о блокчейне и Биткойне, или Почему это не такая уж эффективная технология
habra.16
habrabot(difrex,1) — All
2017-08-21 16:00:04


_Автор статьи — Алексей Маланов, эксперт отдела развития антивирусных технологий «Лаборатории Касперского»_

Неоднократно слышал мнение о том, что блокчейн — это очень круто, это прорыв, за ним будущее. Спешу вас разочаровать, если вы вдруг поверили в это.

Уточнение: в этом посте мы поговорим о том варианте реализации технологии блокчейн, который используется в криптовалюте Биткойн. Существуют другие применения и реализации блокчейна, в некоторых из них устранены какие-либо недостатки «блокчейна классического», но обычно они построены на одинаковых принципах.

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

[1]: https://habrastorage.org/web/027/1ff/565/0271ff5655cc446c8d8d3b6d8677428b.jpg
[2]: https://habrahabr.ru/post/336036/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut

[>] Liscript — web REPL: поцелуи, велосипеды и экскаваторы
habra.16
habrabot(difrex,1) — All
2017-08-21 19:00:04


![][1]

Некоторое время назад я написал интерпретатор лиспоподобного языка, который назвал Liscript. Опубликовал несколько статей на Хабре, посвященных особенностям реализации ядра, TCO, GUI, REPL-ботов и т.п. Недавно добавил web-интерфейс REPL-у (ссылка в конце статьи).

При чем здесь поцелуи и экскаваторы? Думаю, большинству известны такие аббревиатуры, как KISS (keep it simple stupid — делай это проще, дурачок), YAGNI (You ain't gonna need it — Вам это не понадобится), а также высказывания людей разной степени великости про архитектурных астронавтов, «все должно быть сделано так просто, насколько возможно, но не проще», и т.п.

Допустим, перед вами стоит задача — выкопать яму. Какие есть варианты решения? Взять лопату и выкопать самому — дешево и сердито, но долго и возможно неоптимально (зависит от вашего уровня владения лопатой и размеров ямы). Отдать на аутсорс таджикам (не будем рассматривать здесь этот вариант, хотя я должен был его упомянуть). Взять экскаватор — быстро и эффективно, но затратно: бензин/аренда, плюс не факт, что он проедет в вашу садовую калитку, значит надо сносить/восстанавливать забор и т.д. Также, необходимо определиться с моделью (порой из 100500 вариантов), а если вы будете управлять им самостоятельно, надо разобраться во всех его рычагах и педалях.

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

В общем, про выбор инструментов под задачи, и конкретные (подозреваю, что спорные) решения, которые я выбирал в процессе реализации проекта, под катом.
[Читать дальше →][2]

[1]: https://habrastorage.org/web/17f/4a4/8cb/17f4a48cbda143999aeb8c9c89698ebf.png
[2]: https://habrahabr.ru/post/336006/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut

[>] Простой Java-код, ломающий систему вывода типов Scala
habra.16
habrabot(difrex,1) — All
2017-08-21 19:00:04


Простой код на Java: generic интерфейс, класс который его реализует, и метод, принимающий его экземпляр:


//Gen.java:
public interface Gen {
A value();
}

//GenInt.java:
public class GenInt implements Gen {
private final int i;
public GenInt(int i) {
this.i = i;
}
@Override
public Integer value() {
return i;
}
}

//GenTest.java:
public class GenTest {
public static T test(A a) {
return a.value();
}
public static void main(String[] argv) {
GenInt g = new GenInt(42);
Integer i = test(g);
}
}

Он компилируется и даже запускается. Как вы думаете, что будет, если вам захочется вызывать метод `test` из Scala?


object TestFail extends App {
val genInt = new GenInt(42)
val i = GenTest.test(genInt)
} [Что может пойти не так?][1]

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

[>] [Перевод] Логарифмируй это: метод логарифмической производной в машинном обучении
habra.16
habrabot(difrex,1) — All
2017-08-21 20:00:06


![][1]


Прием, о котором пойдет речь — метод логарифмической производной — помогает нам делать всякие штуки, используя основное свойство производной от логарифма. Лучше всего этот метод зарекомендовал себя в решении задач стохастической оптимизации, которые мы исследовали [ранее][2]. Благодаря его применению, мы нашли новый способ получения стохастических градиентных оценок. Начнем с примера использования приема для определения оценочной функции.

Довольно математично.
[Читать дальше →][3]

[1]: https://habrastorage.org/getpro/habr/post_images/a40/deb/ac2/a40debac242a37b3f77ef29ffc3060c3.jpg
[2]: http://blog.shakirm.com/2015/10/machine-learning-trick-of-the-day-4-reparameterisation-tricks/
[3]: https://habrahabr.ru/post/335614/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut

[>] Свой велосипед для JSON API
habra.16
habrabot(difrex,1) — All
2017-08-21 20:30:06


Всем привет! На недавно прошедшем Superjob IT Meetup я [рассказывал][1] о том, как мы в Superjob разрабатываем свой API для проекта с миллионной аудиторией и кучей различных платформ.

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

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

[1]: https://youtu.be/EfL8lsUTlFo?t=7m32s
[2]: https://habrastorage.org/web/c05/b9e/116/c05b9e116ef94b519a650cc5ce44bdd3.jpg
[3]: https://habrahabr.ru/post/335910/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut

[>] Concurrency в Swift 3 и 4. Operation и OperationQueue
habra.16
habrabot(difrex,1) — All
2017-08-21 21:00:05


![][1]
![][2]

Если вы хотите добиться `UI` отзывчивости вашего` iOS` приложения, выполняя такие затратные по времени куски кода, как загрузка данных из сети или обработка изображений, то вам нужно использовать продвинутые паттерны, связанные с многопоточностью (`сoncurrency`), иначе работа вашего пользовательского интерфейса (`U`I) начнет сильно замедляться и даже может привести к полной его «заморозке». Вам нужно убрать ресурсо-затратные задачи с `main thread` (главного потока), который отвечает за выполнение кода, отображающего ваш пользовательский интерфейс (`UI`).

В текущей версии `Swift 3 `и ближайшей` Swift 4` (осень 2017) это можно сделать двумя способами, которые пока не связаны с встроенными языковыми конструкциями `Swift`, начало реализации которых будет только в `[Swift 5][3]` (конец 2018).

Один из них использует `GCD (Grand Central Dispatch)` и ему посвящена [ предыдущая статья][6]. В этой статье мы покажем, как достичь отзывчивости `UI` в `iOS` приложениях с помощью таких абстрактных понятий, как операция` Operation` и очередь операций ` OperationQueue`. Мы также покажем в чем различие этих двух подходов и какой из них в каких ситуациях лучше использовать.

Код для этой статьи можно посмотреть на [Github][7].
[Читать дальше →][8]

[1]: https://habrastorage.org/web/592/ed8/a45/592ed8a459394f11b7e26add358101b0.png
[2]: https://habrastorage.org/web/67d/c94/62c/67dc9462c57f489290054ec4013c3b1d.png
[3]: https://lists.swift.org/pipermail/swift-evolution/Week-of-Mon-20170807/038645.html?utm_campaign=This%2BWeek%2Bin%2BSwift&utm_medium=web&utm_source=This_Week_in_Swift_141
[4]: https://lists.swift.org/pipermail/swift-evolution/Week-of-Mon-20170807/038645.html?utm_campaign=This%2BWeek%2Bin%2BSwift&utm_medium=web&utm_source=This_Week_in_Swift_141
[5]: https://lists.swift.org/pipermail/swift-evolution/Week-of-Mon-20170807/038645.html?utm_campaign=This%2BWeek%2Bin%2BSwift&utm_medium=web&utm_source=This_Week_in_Swift_141
[6]: https://habrahabr.ru/post/320152/
[7]: https://github.com/BestKora/Operation_OperatioQueue
[8]: https://habrahabr.ru/post/335756/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut

[>] Bitcoin Cash. А был ли форк?
habra.16
habrabot(difrex,1) — All
2017-08-22 11:00:04


![image][1]
Сегодня тема Bitcoin и Blockchain привлекает невероятное количество внимания. К сожалению, новости не позволяют понять весь масштаб происходящего, так как авторы путаются в терминологии и в спешке выпускают неподготовленные статьи. Что опять же уводит волну обсуждения от технической стороны вопроса к вопросу спекуляции на тему курса Bitcoin.

Попробуем отодвинуть эмоции и вместе изучить, что же происходит и каковы последствия.
[Читать дальше →][2]

[1]: https://habrastorage.org/getpro/habr/post_images/23c/138/2f9/23c1382f96bfa6925a783a4b58f8cdd1.jpg
[2]: https://habrahabr.ru/post/336102/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut

[>] Борьба с хардкодами при помощи статических анализаторов С#
habra.16
habrabot(difrex,1) — All
2017-08-22 12:30:05


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

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

[>] [Перевод] 0x5f3759df
habra.16
habrabot(difrex,1) — All
2017-08-22 14:30:05


В этой статье мы поговорим о «магической» константе 0x5f3759df, лежащей в основе элегантного алгоритмического трюка для [быстрого вычисления обратного квадратного корня][1].

Вот полная реализация этого алгоритма:
float FastInvSqrt(float x) {
float xhalf = 0.5f * x;
int i = *(int*)&x; // представим биты float в виде целого числа
i = 0x5f3759df - (i >> 1); // какого черта здесь происходит ?
x = *(float*)&i;
x = x*(1.5f-(xhalf*x*x));
return x;
}

Этот код вычисляет некоторое (достаточно неплохое) приближение для формулы

![image][2]

Сегодня данная реализация уже хорошо известна, и стала она такой после появления в коде игры Quake III Arena в 2005 году. Её создание когда-то приписывали Джону Кармаку, но выяснилось, что [корни уходят намного дальше][3] – к [Ardent Computer][4], где в середине 80-ых её написал Грег Уолш. Конкретно та версия кода, которая показана выше (с забавными комментариями), действительно из кода Quake.
В этой статье мы попробуем разобраться с данным хаком, математически вывести эту самую константу и попробовать обобщить данный метод для вычисления произвольных степей от -1 до 1.

Да, понадобиться немного математики, но школьного курса будет более, чем достаточно.

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

[1]: http://en.wikipedia.org/wiki/Fast_inverse_square_root
[2]: https://habrastorage.org/getpro/habr/post_images/460/bc7/d55/460bc7d55c4920d2de99f2086fdd06b9.png
[3]: http://www.beyond3d.com/content/articles/15/
[4]: http://en.wikipedia.org/wiki/Ardent_Computer
[5]: https://habrahabr.ru/post/336110/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut

[>] Современные методы исследования безопасности веб-приложений: инструментарий
habra.16
habrabot(difrex,1) — All
2017-08-22 15:00:05


![image][1]

В данной статье я расскажу об инструментарии для тестирования безопасности веб-приложений. Основные этапы и чек-лист работ представлены в [предыдущей статье][2].
[Читать дальше →][3]

[1]: https://habrastorage.org/getpro/habr/post_images/102/ce0/b7f/102ce0b7f3a65c44369f19db501a621b.jpg
[2]: https://habrahabr.ru/company/pentestit/blog/335820/
[3]: https://habrahabr.ru/post/336074/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut

[>] [Из песочницы] Plasma-протокол для чайников
habra.16
habrabot(difrex,1) — All
2017-08-22 15:00:05


Разогнаться до миллиарда: возможности и препятствия. Ведущий программист компании BankEx Александр Власов комментирует протокол Plasma, совместной разработки Lightning Network и Виталия Бутерина.

\*\*\*Disclaimer\*\*\* Данное описание является попыткой описать принципы, предложенные авторами, простыми словами. Оно нисколько не отражает сложные последовательности действий и мотиваций игроков, которые должны быть проанализированы специалистами теории игр. Также, на данный момент описание находится в стадии work in progress, имеет значительные ошибки и во многом является не полным.

Несколько дней назад Joseph Poon (основатель Lightning Network) и Виталий Бутерин (основатель криптовалюты Ethereum) представили первый черновик описания протокола [Plasma][1], призванного значительно увеличить пропускную способность блокчейн-сетей, до величин порядка миллиардов операций в секунду, по словам самих авторов.
[Читать дальше →][2]

[1]: https://www.plasma.io
[2]: https://habrahabr.ru/post/336122/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut

[>] [Перевод] «Магическая константа» 0x5f3759df
habra.16
habrabot(difrex,1) — All
2017-08-22 18:00:04


В этой статье мы поговорим о «магической» константе 0x5f3759df, лежащей в основе элегантного алгоритмического трюка для [быстрого вычисления обратного квадратного корня][1].

Вот полная реализация этого алгоритма:
float FastInvSqrt(float x) {
float xhalf = 0.5f * x;
int i = *(int*)&x; // представим биты float в виде целого числа
i = 0x5f3759df - (i >> 1); // какого черта здесь происходит ?
x = *(float*)&i;
x = x*(1.5f-(xhalf*x*x));
return x;
}

Этот код вычисляет некоторое (достаточно неплохое) приближение для формулы

![image][2]

Сегодня данная реализация уже хорошо известна, и стала она такой после появления в коде игры Quake III Arena в 2005 году. Её создание когда-то приписывали Джону Кармаку, но выяснилось, что [корни уходят намного дальше][3] – к [Ardent Computer][4], где в середине 80-ых её написал Грег Уолш. Конкретно та версия кода, которая показана выше (с забавными комментариями), действительно из кода Quake.
В этой статье мы попробуем разобраться с данным хаком, математически вывести эту самую константу и попробовать обобщить данный метод для вычисления произвольных степей от -1 до 1.

Да, понадобиться немного математики, но школьного курса будет более, чем достаточно.

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

[1]: http://en.wikipedia.org/wiki/Fast_inverse_square_root
[2]: https://habrastorage.org/getpro/habr/post_images/460/bc7/d55/460bc7d55c4920d2de99f2086fdd06b9.png
[3]: http://www.beyond3d.com/content/articles/15/
[4]: http://en.wikipedia.org/wiki/Ardent_Computer
[5]: https://habrahabr.ru/post/336110/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut

[>] [Из песочницы] Learnopengl. Урок 2.3 — Материалы
habra.16
habrabot(difrex,1) — All
2017-08-22 20:30:05




Пару дней назад я наткнулся на первую статью из этой серии уроков. К сожалению, переведены только начальные уроки, а все самое интересное (SSAO, PBR, тени) только впереди. Этот курс переводили три человека (теперь четыре), и я надеюсь, что кто-то из читателей поможет с переводом остальных частей. К сожалению, я не являюсь профессиональным переводчиком, по этом в тексте могут быть ошибки разного характера. Буду рад, если вы сообщите о них. Приятного чтения!


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

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

[>] [Перевод] Управление памятью в Python
habra.16
habrabot(difrex,1) — All
2017-08-22 21:30:04


![][1]



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



Начнём с размеров объектов. В Python есть много примитивных типов данных: целые числа (int), long (версия int с неограниченной точностью), числа с плавающей запятой (они же числа с двойной точностью, double), кортежи (tuple), строковые значения, списки, словари и классы.

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

[1]: https://habrastorage.org/web/d61/005/8cf/d610058cf6094336ba3f4de1d1829f5a.jpg
[2]: https://habrahabr.ru/post/336156/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut

[>] [Перевод] Создание языка программирования с использованием LLVM. Часть 6: Расширение языка: Операторы, определяемые пользователем
habra.16
habrabot(difrex,1) — All
2017-08-23 08:00:04


Оглавление:
[Часть 1: Введение и лексический анализ][1]
[Часть 2: Реализация парсера и AST][2]
[Часть 3: Генерация кода LLVM IR][3]
[Часть 4: Добавление JIT и поддержки оптимизатора][4]
[Часть 5: Расширение языка: Поток управления][5]
**Часть 6: Расширение языка: Операторы, определяемые пользователем**
Часть 7: Расширение языка: Изменяемые переменные
Часть 8: Компиляция в объектный код
Часть 9: Добавляем отладочную информацию
Часть 10: Заключение и другие вкусности LLVM

![][6]


## Часть 6: Расширение языка: Операторы, определяемые пользователем




### 6\.1. Введение


Добро пожаловать в главу 6 руководства “Создание языка программирования с использованием LLVM”. К данному моменту у нас есть полнофункциональный язык, хотя и минимальный, но, тем не менее, полезный. Но по-прежнему осталась одна проблема. В нашем языке мало полезных операторов (нет, например, деления, логического отрицания, и даже сравнений, за исключением оператора сравнения «меньше»).
[Читать дальше →][7]

[1]: https://habrahabr.ru/post/119850/
[2]: https://habrahabr.ru/post/120005/
[3]: https://habrahabr.ru/post/120424/
[4]: https://habrahabr.ru/post/120516/
[5]: https://habrahabr.ru/post/120881/
[6]: https://habrastorage.org/web/6e5/879/803/6e58798030874db09d00f2c502b3b104.png
[7]: https://habrahabr.ru/post/336080/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut

[>] [Перевод] Тавтологические тесты
habra.16
habrabot(difrex,1) — All
2017-08-23 12:30:05


![][1]



_Привет! Меня зовут Артём, и большую часть своего рабочего времени я пишу сложные автотесты на Selenium и Cucumber/Calabash. Честно говоря, довольно часто я оказываюсь перед непростым выбором: написать тест, который проверяет конкретную реализацию функциональности (потому что это проще) или тест, который проверяет функциональность (потому что это правильнее, но намного сложнее)? Недавно мне попалась неплохая статья о том, что тесты реализации – это «тавтологические» тесты. И, прочитав её, я уже почти неделю переписываю некоторые тесты в другом ключе. Надеюсь, вас она тоже подтолкнёт к размышлениям._

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

[1]: https://habrastorage.org/web/0bb/484/d1b/0bb484d1b1ba4850a060aad0870c6c54.jpg
[2]: https://habrahabr.ru/post/336194/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut

[>] Система IEEE Software Taggant: защита от ложных срабатываний антивируса
habra.16
habrabot(difrex,1) — All
2017-08-23 15:00:05


![image][1]

В этом посте я хочу рассказать о системе IEEE Software Taggant, которую разработала рабочая группа IEEE по вредоносным программам в сотрудничестве с ведущими компаниями по информационной безопасности.
В планы команды разработчиков Guardant давно входило добавить поддержку IEEE Software Taggant в протектор Guardant Armor, и вот наконец мы это сделали. Краткий обзор системы и практические выводы перед вами.
[Читать дальше →][2]

[1]: https://habrastorage.org/web/534/785/715/5347857150874b4aa89c7bc99254a989.jpg
[2]: https://habrahabr.ru/post/336138/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut

[>] Защита сайта от атак с использованием WAF: от сигнатур до искусственного интеллекта
habra.16
habrabot(difrex,1) — All
2017-08-23 15:30:05


![][1]

В статье будет рассмотрены практики защиты уязвимого веб-приложения — от сигнатурного метода до искусственного интеллекта с использованием Web Application Firewall (коммерческая и Opensource версии). В качестве коммерческого решения мы будем использовать Nemesida WAF, в качестве некоммерческого — NAXSI. Статья содержит общую и техническую информацию по работе WAF, а также сравнение методов обнаружения атак, разбор их особенностей и недостатков.


## Детектирование атак


Первая и основная задача любого WAF — максимально точно определить атаку с минимальным количеством ложных срабатываний (false positive). В NAXSI заложен только сигнатурный механизм определения атак (поведенческий анализ находится в начальном состоянии, поэтому мы его считать не будем), в Nemesida WAF — три: сигнатурный, качественный поведенческий анализ и машинное обучение. Говоря о комплексном методе определения атак мы подразумеваем симбиоз этих трех методов. Почему три? Давайте разберемся.


### Сигнатурный метод определения атак


Несмотря на стремительное развитие технологий, большая часть атак выявляется сигнатурным методом, и от того, насколько качественно пишутся сигнатуры, зависит точность работы всех методов, построенных на базе сигнатурного анализа (в том числе машинное обучение). Рассмотрим пример определения атаки на веб-приложение сигнатурным методом:
`index.php?id=-1'+union+select+1,2,3,4,5+--+1`
В данном случае сигнатурой атаки будет вхождение цепочки «union+select».

Пример атаки, которую пропустит NAXSI:
`index.php?id=-1'+Union+Select+1,2,3,4,5+--+1`
[Читать дальше →][2]

[1]: https://habrastorage.org/web/8b9/1e4/3eb/8b91e43eb2ac48c5bba713bb065490a2.png
[2]: https://habrahabr.ru/post/334998/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut

[>] Академия Veeam — практические классы для начинающих C# разработчиков
habra.16
habrabot(difrex,1) — All
2017-08-23 16:00:04


[![][1]][2]
_Регистрация на курс открыта до 31 августа._

Осенью 2017 года Veeam Software запускает свой первый образовательный проект: курс для разработчиков C#.

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

Мы предлагаем не просто возможность бесплатно пройти обучение — после окончания курса у успешных участников будет реальный шанс устроиться в компанию и стать частью команды Veeam Research & Development.

А теперь ответим на главный вопрос: чем обучение в Академии Veeam может заинтересовать начинающих разработчиков?
[Читать дальше →][3]

[1]: https://habrastorage.org/web/237/4e9/32b/2374e932be1b4cedb0117984f67d440c.png
[2]: http://vee.am/academy
[3]: https://habrahabr.ru/post/336188/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut

[>] Библиотека python-selvpcclient
habra.16
habrabot(difrex,1) — All
2017-08-23 16:30:05


![][1]

Для удобного взаимодействия с нашим сервисом [Виртуальное приватное облако][2] мы разработали [библиотеку selvpcclient][3]. Она написана на языке Python и покрывает весь API, благодаря чему вы можете управлять проектами, квотами, ресурсами из своего программного кода или консоли.
[Читать дальше →][4]

[1]: https://habrastorage.org/web/d4a/71c/d88/d4a71cd880a24c99bf84fbc5f19da445.png
[2]: https://blog.selectel.ru/novaya-usluga-virtualnoe-privatnoe-oblako
[3]: http://github.com/selectel/python-selvpcclient
[4]: https://habrahabr.ru/post/336066/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut

[>] Погружение в разработку на Ethereum. Часть 1
habra.16
habrabot(difrex,1) — All
2017-08-23 16:30:05


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

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

[1]: https://habrastorage.org/web/857/db2/c9d/857db2c9d152431984e9f8a41439d757.png
[2]: https://habrahabr.ru/post/336132/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut

[>] Kaggle Mercedes и кросс-валидация
habra.16
habrabot(difrex,1) — All
2017-08-23 17:30:05


![image][1]



Всем привет, в этом посте я расскажу о том, как мне удалось занять 11 место в [конкурсе от компании Мерседес на kaggle][2], который можно охарактеризовать как лидера по количеству участников и по эпичности shake-up. Здесь можно ознакомиться с [моим решением][3], там же ссылка на github, здесь можно посмотреть [презентацию моего решения в Yandex][4].

В этом посте пойдет речь о том, как студент консерватории попал в data science, стал призером двух подряд kaggle-соревнований, и каким образом методы математической статистики помогают не переобучиться на публичный лидерборд

Начну я с того, что немного расскажу о задаче и о том, почему я взялся ее решать. Должен сказать, что в data science я человек новый. Лет 7 назад я закончил Физический Факультет СПбГУ и с тех пор занимался тем, что получал музыкальное образование. Идея немного размять мозг и вернуться к техническим задачам впервые посетила меня примерно два года назад, на тот момент я уже работал в оркестре Московской Филармонии и учился на 3 курсе в Консерватории. Начал я с того, что вооружившись книгой Страуструпа стал осваивать C++. Далее были конечно же разные онлайн курсы и примерно год назад я стал склоняться к мысли о том, что Data Science — это пожалуй именно то, чем я хотел бы заниматься в IT. Мое “образование” в Data Science — это [курс от Яндекса и Вышки на курсере][5], несколько курсов из [специализации МФТИ на курсере][6] и конечно же постоянное саморазвитие в соревнованиях.
[Читать дальше →][7]

[1]: https://habrastorage.org/web/bb9/601/13f/bb960113f9df43809a317ba7a1b1515d.jpg
[2]: https://www.kaggle.com/c/mercedes-benz-greener-manufacturing
[3]: https://www.kaggle.com/c/mercedes-benz-greener-manufacturing/discussion/36242
[4]: https://youtu.be/HT3QpRp2ewA
[5]: https://www.coursera.org/learn/vvedenie-mashinnoe-obuchenie
[6]: https://www.coursera.org/specializations/machine-learning-data-analysis
[7]: https://habrahabr.ru/post/336168/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut

[>] [recovery mode] Погружение в разработку на Ethereum. Часть 1
habra.16
habrabot(difrex,1) — All
2017-08-23 18:30:05


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

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

[1]: https://habrastorage.org/web/857/db2/c9d/857db2c9d152431984e9f8a41439d757.png
[2]: https://habrahabr.ru/post/336132/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut

[>] [Из песочницы] Сравнительное нагрузочное тестирование Lua-коннекторов для Trantool из NGINX
habra.16
habrabot(difrex,1) — All
2017-08-23 18:30:05


В последнее время на Хабре появляется достаточно много статей про [Tarantool][1] — базу данных и сервер приложений, который используется в Mail.Ru Group, Avito, Yota в разных интересных проектах. И вот, я подумал – а чем мы хуже? Давайте тоже попробуем.

В силу своей профессиональной деформации буду рассматривать следующий кейс:

* Есть Web-ресурс, доступ к которому мы хотим ограничить;
* Сам ресурс менять нельзя или крайне нежелательно.
Как подступиться к данной задаче?
[Читать дальше →][2]

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

Pages: 1 ... 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 ... 210