RSS
Pages: 1 ... 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 ... 37
[>] Шпаргалка программиста Java 3. Коллекции в Java (стандартные, guava, apache, trove, gc-collections и другие)
habra.15
habrabot(difrex,1) — All
2015-10-28 02:00:03


Сегодня я хотел бы поговорить о коллекциях в Java. Это тема встречается практически на любом техническом интервью Java разработчика, однако далеко не все разработчики в совершенстве освоили все коллекции даже стандартной библиотеки, не говоря уже о всех библиотеках с альтернативными реализациями коллекций, таких как guava, apache, trove и ряд других. Давайте посмотрим какие вообще коллекции можно найти в мире Java и какие методы работы с ними существуют. ![][1] Эта статья полезна как для начинающих (чтобы получить общее понимание что такое коллекции и как с ними работать), так и для более опытных программистов, которые возможно найдут в ней что-то полезное или просто структурируют свои знания. Собственно, главное чтобы у вас были хотя бы базовые знания о коллекциях в любом языке программирования, так как в статье не будет объяснений что такое коллекция в принципе. [Читать дальше →][2]

[1]: https://habrastorage.org/files/727/bf4/436/727bf44364b7422ba39240661856d73b.jpg
[2]: http://habrahabr.ru/post/256877/#habracut

[>] Уязвимости в сервисе компании Plategka.com, включающие XSS
habra.15
habrabot(difrex,1) — All
2015-10-28 12:00:04


Интересуюсь платёжными сервисами, банками, пластиковыми картами, да и вообще слежу за электронной коммерцией. А ещё я люблю находить ошибки и уязвимости в системах интернет-банкингов, [платёжных терминалов][1] или в [системах онлайн-переводов][2]. Не так давно один украинский сервис онлайн-оплаты — **Plategka.com** — запустил функцию: создание ссылки с уникальным адресом и QR-кодом для получения перевода на карту. Как только я захотел проверить, как работает новый сервис, я увидел ту же ошибку, которую допустили Portmone: по ссылке указывается полный номер карты. Перебирая ссылки, можно собрать номера карт. "_Изначально мы думали над сокрытием номера карты, но в этом вопросе есть свои за и против, поэтому на первом этапе, дабы у Плательщика была возможность убедиться в верности уже введенных данных, решили его оставить_", — пишут они [пользователю][3]. ![image][4] [Читать дальше →][5]

[1]: http://habrahabr.ru/post/264089/
[2]: http://habrahabr.ru/post/267121/
[3]: http://ain.ua/2015/10/15/609714#comments
[4]: https://habrastorage.org/getpro/habr/post_images/d57/0eb/ee2/d570ebee22cb2918496045f107365f5f.png
[5]: http://habrahabr.ru/post/269663/#habracut

[>] [Из песочницы] Настройка MikroTik в качестве OVPN-сервера с использованием клиенских сертификатов и списка отзыва
habra.15
habrabot(difrex,1) — All
2015-10-28 14:00:04


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

[1]: http://habrahabr.ru/post/269679/#habracut

[>] Шпаргалка программиста Java 3. Коллекции в Java (стандартные, guava, apache, trove, gs-collections и другие)
habra.15
habrabot(difrex,1) — All
2015-10-28 15:00:03


Сегодня я хотел бы поговорить о коллекциях в Java. Это тема встречается практически на любом техническом интервью Java разработчика, однако далеко не все разработчики в совершенстве освоили все коллекции даже стандартной библиотеки, не говоря уже о всех библиотеках с альтернативными реализациями коллекций, таких как guava, apache, trove и ряд других. Давайте посмотрим какие вообще коллекции можно найти в мире Java и какие методы работы с ними существуют. ![][1] Эта статья полезна как для начинающих (чтобы получить общее понимание что такое коллекции и как с ними работать), так и для более опытных программистов, которые возможно найдут в ней что-то полезное или просто структурируют свои знания. Собственно, главное чтобы у вас были хотя бы базовые знания о коллекциях в любом языке программирования, так как в статье не будет объяснений что такое коллекция в принципе. [Читать дальше →][2]

[1]: https://habrastorage.org/files/727/bf4/436/727bf44364b7422ba39240661856d73b.jpg
[2]: http://habrahabr.ru/post/256877/#habracut

[>] Geek Week 2015: учиться, учиться и ещё раз учиться
habra.15
habrabot(difrex,1) — All
2015-10-28 17:00:04


Будем кратки: с 16 по 22 ноября GeekBrains проводит международную онлайн-конференцию [Geek Week 2015][1]. Наш план прост: 7 дней интенсивного обучения программированию и общения с экспертами из ведущих IT-корпораций России и мира. Абсолютно бесплатно и не отходя от компьютера. Идея провести конференцию не была случайной: в ходе работы со слушателями мы увидели реальную потребность в расширении практических знаний. В итоге нашли лучших спикеров и выбрали доступный каждому онлайн-формат. О чём мы узнали от слушателей, для кого будет полезна конференция и немного тизеров — под катом. [][2]



[Хочу знать больше!][3]

[1]: http://geekweekconf.com/ru
[2]: http://habrahabr.ru/company/geekbrains/blog/269681/
[3]: http://habrahabr.ru/post/269681/#habracut

[>] Pivoting Everywhere — техники продвижения внутрь локальной сети
habra.15
habrabot(difrex,1) — All
2015-10-28 17:00:04


![][1] При проведении тестирования на проникновение после компрометации внешнего устройства или сервиса возникает необходимость дальнейших действий для получения доступа внутрь сети. После обнаружения и эксплуатации уязвимости сетевого периметра встает вопрос о развитии атаки во внутреннюю сеть, используя в качестве «точки опоры» атакованную систему, доступную извне. Задача по построению туннелей и проброса портов является достаточно актуальной как для решения упражнений в рамках курса «[Корпоративные лаборатории][2]», так и при поведении тестирования на проникновение информационных систем. [Читать дальше →][3]

[1]: https://habrastorage.org/files/7c9/601/bff/7c9601bff8144e12a5d3591e4c9e0fbb.png
[2]: https://www.pentestit.ru/labs/corp-lab
[3]: http://habrahabr.ru/post/269431/#habracut

[>] Разбор Java программы с помощью java программы
habra.15
habrabot(difrex,1) — All
2015-10-28 17:30:03


Разобрались с теорией в публикации [«Модификация программы и что лучше менять: исполняемый код или AST программы?»][1]. Перейдем к практике, используя Eclipse java compiler API. ![][2] Java программа, которая переваривает java программу, начинается с работы над абстрактным синтаксическим деревом (AST)… [Читать дальше →][3]

[1]: http://habrahabr.ru/post/269037/
[2]: https://habrastorage.org/files/a24/d35/d88/a24d35d88a8d48b1834172661d8255c2.jpg
[3]: http://habrahabr.ru/post/269129/#habracut

[>] [Перевод] Интервью с Одри Тан, часть 1
habra.15
habrabot(difrex,1) — All
2015-10-28 17:30:03


![][1] _Одри Тан в первую очередь известна как создатель и разработчик **Pugs**, Perl 6 User’s Golfing System, реализации Perl 6 на Haskell, которая появилась 1 февраля 2005 года и была наиболее активно разрабатываемой и наиболее полной реализацией на то время._ [Читать интервью][2]

[1]: https://habrastorage.org/files/721/dc4/bc5/721dc4bc5a864cbe8bafc94a8fa606a1.png
[2]: http://habrahabr.ru/post/268911/#habracut

[>] Алгоритм поиска смещения объекта на изображении
habra.15
habrabot(difrex,1) — All
2015-10-28 19:30:03


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

[1]: http://habrahabr.ru/post/268445/
[2]: http://habrahabr.ru/post/269685/#habracut

[>] [Перевод] Почему Go это плохо продуманный язык программирования
habra.15
habrabot(difrex,1) — All
2015-10-29 06:00:03


_Это перевод [статьи][1] юзернейма [tucnak][2] с Medium, которая получила обширное [обсуждение][3] на reddit.com/r/programming_. ![image][4] Окей, заголовок действительно несколько громкий, признаю. Cкажу больше: я прусь от громких заголовков, все из-за внимания. В этой блогозаписи я постараюсь доказать тот факт, что Go это ужасно продуманный язык (спойлер: это так). Я уже играюсь с Go уже на протяжении нескольких месяцев, первый helloworld собрал, кажется, в июне. Математик из меня никакой, но с тех пор прошло уже что-то около 4 месяцев и я даже успел залить на [Github][5] несколько репозиториев и собрать немного звезд! Стоит также упомянуть, что у меня совершенно нет опыта применения Go в продакшне, так что любые мои слова о «поддержке кода» или «деплое» не стоит принимать за единственноверную истину. Я люблю Go, я полюбил его как только впервые попробовал его. Я потратил несколько дней на то, чтобы принять идиоматику, смириться с отсутствием дженериков, разобраться с откровенно странным способом обработки ошибок и вы знаете, всеми этими классическими проблемами, так или иначе связанными с Go. Я прочел [Effective Go][6], много статеек из [блога][7] Dave Cheney, следил за всеми новостями из мира Go. Я даже могу сказать, что я достаточно активный участник сообщетсва! Я люблю Go и ничего не могу с этим поделать — Go просто замечательный. Тем не менее, я считаю, что Go это ужасный плохо продуманный язык, который делает совершенно не то, что «продает». [Читать дальше →][8]

[1]: https://medium.com/@tucnak/1cc04e5daf2
[2]: https://github.com/tucnak
[3]: https://www.reddit.com/r/programming/comments/3qjo3y/why_go_is_a_poorly_designed_language_from_a/
[4]: https://habrastorage.org/files/0cd/b2e/d26/0cdb2ed2646944988ac88a85148114dd.png
[5]: http://github.com/tucnak
[6]: https://golang.org/doc/effective_go.html
[7]: http://dave.cheney.net
[8]: http://habrahabr.ru/post/269731/#habracut

[>] Криптоанализ «Энигмы»
habra.15
habrabot(difrex,1) — All
2015-10-29 10:00:03






All specialists unanimously agreed that a reading [of the Enigma] is impossible. _Admiral Kurt Fricke, Chief of Naval War Command_ Энигма — роторная шифровальная машина, использовавшаяся нацистской Германией в годы Второй мировой войны. Благодаря влиянию, оказанному на ход войны, взлом Энигмы стал возможно самым ярким моментом в многовековой истории криптоанализа. В этом топике я бы хотел рассказать о методе взлома, использовавшимся в Блетчли-парк, а так же описать устройство самой машины. [Читать дальше →][1]

[1]: http://habrahabr.ru/post/269519/#habracut

[>] I2P: Прозрачная реализация подписи EdDSA
habra.15
habrabot(difrex,1) — All
2015-10-29 10:00:03


В последнее время все большую популярность набирает электронная подпись Ed25519, основанная на разновидности эллиптической кривой, предложенной Берштейном. По мере увеличения числа узлов I2P с данным видом подписи возникла необходимость ее поддержки в своей реализации I2P, поскольку Ed25519 не входит в состав популярных криптографических библиотек. Как правило используются разновидности ref10 из библиотеки [SUPERCOP][1], реализованной самим Берштейном на ассемблере, и затем портированной на другие языки. Данная реализация работает хорошо и быстро, однако у нее есть главный недостаток — она непонятна. Действительно, если заглянуть в исходный код, то можно увидеть большое количество однотипных строк, оперирующих с множеством «магических» чисел, понять же, что они означают, без углубления в теорию не представляется возможным. Целью данной статьи является математически прозрачная реализация Ed22519, используя лишь стандартные операции с большими числами, присутствующие в любой криптографической библиотеке, со скоростью работы, достаточной для практического использования в I2P. [Читать дальше →][2]

[1]: http://bench.cr.yp.to/supercop.html
[2]: http://habrahabr.ru/post/269579/#habracut

[>] [Из песочницы] PyTest
habra.15
habrabot(difrex,1) — All
2015-10-29 15:00:03




#### Предисловие

По историческому призванию я SQL-щик. Однако судьба занесла меня на BigData и после этого понесла кривая — я освоил и Java, и Python, и функциональное программирование (изучение Scala стоит в списке). Собственно на одном из кусков проекта встала необходимость тестирования кода на Python. Ребята из QA посоветовали для этих целей PyTest, но даже они затруднились толком ответить чем этот зверь хорош. К сожалению, в русскоязычном сегменте информации по данному вопросу не так уж и много: [как это используют в Yandex][1] да и все по-хорошему. При этом описанное в этом статье выглядит достаточно сложно для человека начинающего путешествие по этой стезе. Не говоря уже об официальной документации — она приобрела для меня смысл лишь после того, как я разобрался с самим модулем по другим источникам. Не спорю, там написаны интересные вещи, но, к сожалению, совсем не для старта.

#### Юнит-тестирование Python

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

#### Вводная по необходимым знаниям

На описываемый момент знания Python у меня были достаточно поверхностны — я писал кое-какие несложные модули и знал стандартные вещи. Но при столкновении с PyTest мне пришлось пополнять багаж знаний декораторами [тут][3] и [тут][4] и конструкцией [yield][5].

#### Преимущества и недостатки PyTest

1) Независимость от API (no boilerplate). Как код выглядит в том же unittest:

import unittest

class TestUtilDate(unittest.TestCase):
def setUp(self):
#init_something()
pass

def tearDown(self):
#teardown_something()
pass

def test_upper(self):
self.assertEqual('foo'.upper(), 'FOO')

def test_isupper(self):
self.assertTrue('FOO'.isupper())

def test_failed_upper(self):
self.assertEqual('foo'.upper(), 'FOo')

if __name__ == '__main__':
suite = unittest.TestLoader().loadTestsFromTestCase(TestUtilDate)
unittest.TextTestRunner(verbosity=2).run(suite)




То же самое в PyTest:

import pytest

def setup_module(module):
#init_something()
pass

def teardown_module(module):
#teardown_something()
pass

def test_upper():
assert 'foo'.upper() == 'FOO'

def test_isupper():
assert 'FOO'.isupper()

def test_failed_upper():
assert 'foo'.upper() == 'FOo'




2) Подробный отчет. В том числе выгрузка в JUnitXML (для интеграции с Jenkins). Сам вид отчета может изменяться (включая цвета) дополнительными модулями (о них будет позднее отдельно). Ну и вообще цветной отчет в консоли выглядит удобнее — красные FAILED видны сразу. ![image][6] 3) Удобный asset (стандартный из Python). Не приходится держать в голове всю кучу различных assert'ов. 4) Динамические фикстуры всех уровней, которые могут вызываться как автоматически, так и для конкретных тестов. 5) Дополнительные возможности фикстур (возвращаемое значение, финализаторы, область видимости, объект request, автоиспользование, вложенные фикстуры) 6) Параметризация тестов, то есть запуск одного и того же теста с разными наборами параметров. Вообще это относится к пункту 5 «Дополнительные возможности фикстур», но возможность настолько хороша, что достойна отдельного пункта. 7) Метки (marks), позволяющие пропустить любой тест, пометить тест, как падающий (и это его ожидаемое поведение, что полезно при разработке) или просто именовать набор тестов, чтобы можно было запускать только его по имени. 8) Плагины. Данный модуль имеет достаточно большой список дополнительных модулей, которые можно установить отдельно. 9) Возможность запуска тестов написанных на unittest и nose, то есть полная обратная совместимость с ними. Про недостатки, пусть их и не много, могу сказать следующее: 1) Отсутствие дополнительного уровня вложенности: Для модулей, классов, методов, функций в тестах есть соответствующий уровень. Но логика требует наличие дополнительного уровня testcase, когда та же одна функция может иметь несколько testcase'ов (например, проверка возращаемых значений и ошибок). Это частично компенсируется дополнительным модулем (плагином) pytest-describe, но там встает проблема отсутствия соответствующего уровня фикстуры (scope = “describe”). С этим конечно можно жить, но в некоторых ситуациях может нарушать главный принцип PyTest — «все для простоты и удобства». 2) Необходимость отдельной установки модуля, в том числе в продакшене. Все-таки unittest и doctest входят в базовый инструментарий Python и не требуют дополнительных телодвижений. 3) Для использования PyTest требуется немного больше знаний Python, чем для того же unittest (см. «Вводная по необходимым знаниям»). Подробное описание модуля и его возможностей под катом. [Читать дальше →][7]

[1]: http://habrahabr.ru/company/yandex/blog/242795/
[2]: http://habrahabr.ru/post/121162
[3]: http://habrahabr.ru/post/141411/
[4]: http://habrahabr.ru/post/141501/
[5]: http://habrahabr.ru/post/132554/
[6]: https://habrastorage.org/files/7e1/4f3/b8b/7e14f3b8b89a4aac849e98432b098e98.jpg
[7]: http://habrahabr.ru/post/269759/#habracut

[>] [Перевод] Режимы управления с помощью мыши и с помощью сенсорного экрана в Windows 10 и Windows 8
habra.15
habrabot(difrex,1) — All
2015-10-29 15:00:04


[В этом проекте][1] демонстрируется определение режима работы ноутбука-трансформера (режим планшета либо режим ноутбука) под управлением Windows 8(.1), а также новый режим управления с помощью мыши и сенсорного экрана в Windows 10. Режим управления с помощью мыши и сенсорного экрана аналогичен режиму планшета и ноутбука, но в Windows 10 пользователи получили возможность вручную переключать режим, тогда как в Windows 8 режим переключается только в зависимости от физического состояния устройства. Поэтому пользователи Windows 10 могут использовать расширенный графический пользовательский интерфейс, предназначенный для сенсорного управления, даже на устройствах, не являющихся трансформерами: важно только наличие сенсорного экрана. Эта новая возможность реализована на основе новых [API UWP (Universal Windows Platform)][2]. Нужно добавить несколько строк кода в приложения, предназначенные для Windows 8, чтобы воспользоваться этой функцией в Windows 10. В этом документе показана доработка приложений Win32 для использования API UWP с помощью WRL (библиотеки шаблонов C++ среды выполнения Windows) в Windows 10. Сведения о включении приложений UWP см. в [образце кода Microsoft][3]. [Читать дальше →][4]

[1]: https://software.intel.com/sites/default/files/managed/ee/0c/2-in-log.zip
[2]: https://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.viewmanagement.uiviewsettings.aspx
[3]: https://github.com/Microsoft/Windows-universal-samples/tree/master/Samples/UserInteractionMode
[4]: http://habrahabr.ru/post/269755/#habracut

[>] Как мы искали баг в поисковом Балансере, а нашли в Chromium
habra.15
habrabot(difrex,1) — All
2015-10-29 18:00:03


Некоторое время назад коллеги стали получать от пользователей жалобы на то, что иногда при использовании Поиска и Яндекс.Браузера они видят ошибку SSL connection error. Расследование того, почему это происходило, на мой взгляд, получилось интересным, поэтому я хочу поделиться им с вами. В процессе разбора ситуации мы несколько раз меняли «подозреваемый» софт, изучили множество дампов, вспомнили устройство машины состояний TLS и в итоге даже разбирались в коде Хромиума. Надеюсь, вам будет интересно это читать не меньше, чем нам было исследовать. Итак. ![][1] Через некоторое время у нас были записи логов ошибок и pcap-файлы со схожим содержимым: ![][2] Всё выглядит так, будто сервер ответил некорректно и клиент прекратил хендшейк. Проанализировав «корректные» (принятые клиентом) и «некорректные» ответы сервера, мы поняли, что они идентичны. [Читать дальше →][3]

[1]: https://habrastorage.org/files/e0e/a29/a67/e0ea29a67019461983eeaf7315bf5015.png
[2]: https://habrastorage.org/files/bf9/d8f/3d4/bf9d8f3d477f4484b395311bb8e9f9ac.png
[3]: http://habrahabr.ru/post/269777/#habracut

[>] [Из песочницы] Ghost Methods в Ruby (перевод)
habra.15
habrabot(difrex,1) — All
2015-10-29 19:00:03


_Предлагаю вашему вниманию перевод фрагмента книги [Metaprogramming Ruby 2][1] за авторством Паоло Перротта (Paolo Perrotta)._

#### Что такое method\_missing?

В Руби мы можем вызывать методы которые не существуют, но это будет возвращать нам ошибку. Для примера:

class Lawyer; end
nick = Lawyer.new
nick = talk_simple

NoMethodError: undefine method 'talk_simple' for #<Lawyer:0x007f801aa81938>


Помните ли вы как работает поиск методов? Когда вы вызываете метод talk\_simple, Ruby идет в класс объекта nick, и перебирает там методы. Если он не может найти метод там, он ищет его в родителей данного класса, потом в Object и наконец в BasicObject. Ну и поскольку Ruby не может нигде найти метод talk\_simple, он запускает метод method\_missing для nick’a. Ruby знает что этот метод есть, потому, что это приватный метод BasicObject от которого наследуются все объекты. [Читать дальше →][2]

[1]: https://pragprog.com/book/ppmetr2/metaprogramming-ruby-2
[2]: http://habrahabr.ru/post/269785/#habracut

[>] [Перевод] Cемидесятилетний программист пытается сохранить устаревший язык программирования на GitHub
habra.15
habrabot(difrex,1) — All
2015-10-29 21:00:04


**Примечание переводчика:** _В нашем блоге на Хабре мы много пишем о построении облачного сервиса [1cloud][1] и опыте работы с инфраструктурой других компаний. Однако серьезный вклад в развитие технологий делают инженеры-энтузиасты, и об этом важно помнить. Сегодня мы представляем вашему вниманию рассказ о языке программирования SPITBOL, который был разработан несколько десятков лет назад, позднее использовался для анализа украденных персональных данных сайта Ashley Madison, но может просто исчезнуть, если усилия его создателя не увенчаются успехом. _ [![][2]][3] Дэйв Шилдс (Dave Shields) пытается спасти умирающий язык программирования. Шилдс занимался программированием более 50-ти лет. Он на протяжении десятилетий работал программистом-исследователем в Нью-Йоркском университете и IBM, где «раздвигал границы» разработки программного обеспечения. За свою долгую карьеру Шилдс многого достиг, например, он был одним из разработчиков [Jikes][4], компилятора Java – первого проекта IBM с открытым исходным кодом. Сейчас Шилдсу семьдесят лет. На пенсии он занимается малоизвестным языком программирования SPITBOL – Шилдс разработал его в 70-х годах, но по каким-то причинам забросил на 30 лет. [Читать дальше →][5]

[1]: https://1cloud.ru/
[2]: https://habrastorage.org/files/ef0/de3/e87/ef0de3e8743c4ef196febcfe002c5e75.png
[3]: http://habrahabr.ru/company/1cloud/blog/269787/
[4]: http://jikes.sourceforge.net/
[5]: http://habrahabr.ru/post/269787/#habracut

[>] Как мы искали баг в поисковом Балансере Яндекса, а нашли в Chromium
habra.15
habrabot(difrex,1) — All
2015-10-29 21:30:04


Некоторое время назад коллеги стали получать от пользователей жалобы на то, что иногда при использовании Поиска и Яндекс.Браузера они видят ошибку SSL connection error. Расследование того, почему это происходило, на мой взгляд, получилось интересным, поэтому я хочу поделиться им с вами. В процессе разбора ситуации мы несколько раз меняли «подозреваемый» софт, изучили множество дампов, вспомнили устройство машины состояний TLS и в итоге даже разбирались в коде Хромиума. Надеюсь, вам будет интересно это читать не меньше, чем нам было исследовать. Итак. [![][1]][2] Через некоторое время у нас были записи логов ошибок и pcap-файлы со схожим содержимым: ![][3] Всё выглядит так, будто сервер ответил некорректно и клиент прекратил хендшейк. Проанализировав «корректные» (принятые клиентом) и «некорректные» ответы сервера, мы поняли, что они идентичны. [Читать дальше →][4]

[1]: https://habrastorage.org/files/e0e/a29/a67/e0ea29a67019461983eeaf7315bf5015.png
[2]: http://habrahabr.ru/company/yandex/blog/269777/
[3]: https://habrastorage.org/files/bf9/d8f/3d4/bf9d8f3d477f4484b395311bb8e9f9ac.png
[4]: http://habrahabr.ru/post/269777/#habracut

[>] Монада Maybe на стероидах
habra.15
habrabot(difrex,1) — All
2015-10-29 23:00:03


Про монады на Хабре было [уже][1] [столько][2] [много][3] [публикаций][4], [что][5], [мне ][6] [кажется][7], [не ][8] [хватает][9] [еще ][10]одной. Я не буду расписывать, что такое монада, я просто покажу одну забавную реализацию монады Maybe (мы же в хабе «Ненормальное программирование»?). [Читать дальше →][11]

[1]: http://habrahabr.ru/post/127556/
[2]: http://habrahabr.ru/post/209510/
[3]: http://habrahabr.ru/post/231801/
[4]: http://habrahabr.ru/post/238171/
[5]: http://habrahabr.ru/post/184722/
[6]: http://habrahabr.ru/post/212955/
[7]: http://habrahabr.ru/company/cit/blog/262055/
[8]: http://habrahabr.ru/post/247997/
[9]: http://habrahabr.ru/post/112464/
[10]: http://habrahabr.ru/post/147363/
[11]: http://habrahabr.ru/post/269717/#habracut

[>] Эволюция Java на примере чтения строк из файла
habra.15
habrabot(difrex,1) — All
2015-10-30 00:30:03


Приведу небольшой и интересный, на мой взгляд, пример, как изменилась жизнь простого Java разработчика, на примере задачи чтения и печати строк из файла. ![][1] Многие из нас помнят

## 'до Java 7' мучения:



BufferedReader reader = null;
try {
reader = new BufferedReader(
new InputStreamReader(
new FileInputStream(FILE_NAME), Charset.forName("UTF-8")));
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
// log error
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e) {
// log warning
}
}
}


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

[1]: https://habrastorage.org/files/96e/fcd/25b/96efcd25bdd94d0c9830dab16b4991fd.png
[2]: http://habrahabr.ru/post/269667/#habracut

[>] Обзор Certificate Transparency
habra.15
habrabot(difrex,1) — All
2015-10-30 01:00:05


![][1] Принцип работы протокола SSL/TLS основан на криптографии с открытым ключом. Одна или обе стороны взаимодействия обладают сертификатами и соответствующими закрытыми ключами. Это позволяет производить аутентификацию и шифрование трафика. [Читать дальше →][2]

[1]: https://habrastorage.org/files/add/988/63c/add98863c29e49a4a471d863d3bff8b5.png
[2]: http://habrahabr.ru/post/269729/#habracut

[>] Ассемблер Intel-4004 — для развлечения
habra.15
habrabot(difrex,1) — All
2015-10-30 12:00:03


![intel-4004 cpu][1] Недавно мне показали эмуляторы ассемблера для Intel-4004 и я на некоторое время «зависла». Это «дедушка» нынешних процессоров — если верить [статье википедии][2] — первый коммерчески распространённый микропроцессор. Вряд ли его сейчас можно использовать для каких-то серьёзных целей. А вот просто поломать голову (вместо brainf\*\*k) — ну, это то чем я занялась. Главное он 4-разрядный и набор команд довольно небольшой (до того я знала только немножко x86-й, по мучительному институтскому курсу). Ниже идет вольный перевод-пересказ [вот этой инструкции по ассемблеру для Intel-4004][3] — и краткие замечания о моих попытках написать что-нибудь на нём. [Читать дальше →][4]

[1]: https://habrastorage.org/getpro/habr/post_images/74f/55a/f0e/74f55af0e05bb8eb95052573831f0348.jpg
[2]: https://en.wikipedia.org/wiki/Intel_4004
[3]: https://github.com/CodeAbbey/intel4004-emu/wiki
[4]: http://habrahabr.ru/post/269821/#habracut

[>] Организация разработки и эксплуатации крупных проектов
habra.15
habrabot(difrex,1) — All
2015-10-30 14:00:03


[][1]





##

****

> Ну фактически бессмысленно искать отличия, это как сравнивать мягкое с соленым. DevOps он про организацию разработки и эксплуатации целиком, про то что эксплуатация должна включаться на ранней стадии разработки. Это требует новых качеств от разработчиков и новых способностей от системных администраторов, разработчики и администраторы должны научиться работать параллельно, а не как раньше разработчики напрограммировали, скинули все в эксплуатацию, а дальше начинается долгий и неприятный путь разбора проблемы “а кто виноват?”. DevOps должен применяться там, где созрела необходимость в новом подходе, многим компаниям он до сих пор не нужен и они справляются по-старому.

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

[1]: http://habrahabr.ru/company/oleg-bunin/blog/269839/#habracut
[2]: http://express42.com/
[3]: http://habrahabr.ru/post/269839/#habracut

[>] Security Week 44: законодатели и безопасность, криптография и разведка
habra.15
habrabot(difrex,1) — All
2015-10-30 14:30:03


![][1]Если и есть в сфере информационной безопасности тема сложнее криптографии, то это законодательство. Любую исследовательскую работу по шифрованию, ее основные выводы и возможные последствия можно понять. Во многих случаях для этого потребуются пара лет интенсивного обучения по основной и сопутствующим темам, и еще десяток лет работы экспертом по безопасности. Но понять можно. Далеко не всегда можно понять, какие последствия будут у закона, регулирующего сферу информационной безопасности, даже если его внимательно прочитать. Даже если ты хорошо владеешь языком, на котором он написан. Тем не менее, понимать надо, потому что законодательство может серьезно повлиять на вопросы безопасности, в ту или иную сторону. Хорошие, годные инициативы мотивируют компании лучше защищаться от киберугроз, защищают клиентов банков от потери денег в случае онлайнового мошенничества, улучшают безопасность самих государственных структур и наших данных, ими обрабатываемых, борются с криминалом. Плохие законы в лучшем случае никак не меняют ландшафт угроз, в худшем — позволяют киберпреступникам выходить на свободу, даже после ареста и при наличии убедительных доказательств вины, затрудняют работу исследователей, и делают приватные данные чуть менее приватными, чем хотелось бы. В этой серии дайджеста поговорим о двух важных новостях в области американского ИБ-законодательства, а также продолжим обсуждение криптографии, на сей раз — благодаря агентству АНБ, решившему поучаствовать в обсуждении вопросов шифрования. Что, впрочем, тоже недалеко ушло от политики. Правила: каждую неделю редакция новостного сайта [Threatpost][2] выбирает три наиболее значимых новости, к которым я добавляю расширенный и беспощадный комментарий. Все эпизоды сериала можно найти [по тегу][3]. [Читать дальше →][4]

[1]: https://habrastorage.org/files/bbc/60f/6b0/bbc60f6b061646308f9e308f4dd26d12.jpg
[2]: https://threatpost.ru/
[3]: http://habrahabr.ru/search/?target_type=posts&q=%5Bklsw%5D%20&order_by=date
[4]: http://habrahabr.ru/post/269815/#habracut

[>] [Из песочницы] Изоляция виртуальных серверов в apache2 — ugidctl
habra.15
habrabot(difrex,1) — All
2015-10-30 16:00:03


Некоторое время назад я сделал для себя решение, которое позволяет эффективно изолировать процессы apache2. Теперь он может обрабатывать каждый запрос от имени своего системного пользователя. Сегодня я хочу поделиться этим решением. Вот о чем речь:

<VirtualHost *:80>
ServerName host1.example.com
ServerAdmin webmaster1@example.com
ServerUserGroup user1 group1
DocumentRoot /var/www/host1
</VirtualHost>
<VirtualHost *:80>
ServerName host2.example.com
ServerAdmin webmaster2@example.com
ServerUserGroup user2 group2
DocumentRoot /var/www/host2
</VirtualHost>


При этом корневые директории виртуальных хостов могут быть доступны только соответсвующим пользователям:

# ls -la /var/www
total 16
drwxr-xr-x 4 root root 4096 Oct 26 16:10 .
drwxr-xr-x 21 root root 4096 Oct 26 01:13 ..
drwxr-x--- 2 user1 group1 4096 Oct 26 16:10 host1
drwxr-x--- 2 user1 group2 4096 Oct 26 16:10 host2


Это не очередные танцы с бубном вогруг многопоточности, запуска процессов от рута и т.п. Основная идея в том, чтобы процесс самостоятельно решил, с какими правами ему необходимо обработать запрос, взял себе эти права, обработал, и снова вернул себе права основного пользователя apache. [Читать дальше →][1]

[1]: http://habrahabr.ru/post/269835/#habracut

[>] Настраиваем связку Apache Zeppelin + Oracle
habra.15
habrabot(difrex,1) — All
2015-10-30 17:00:02


Давно ищу удобный инструмент для выполнения ad hoc SQL-запросов в БД Oracle, с возможностью быстрого построения различных типов графиков на полученных данных. Все, что может облегчить оперативное создание отчетов, как говорится «на лету». Совсем недавно наткнулся на вот такой инструмент как [Apache Zeppelin][1]. Короткий обзор возможностей в документации на сайте и демо-видео показал, что это штука достаточно интересная и имеет смысл более плотно исследовать ее и настроить доступ из Apache Zeppelin к СУБД Oracle. ![][2] [Читать дальше →][3]

[1]: https://zeppelin.incubator.apache.org/
[2]: https://habrastorage.org/files/880/8d9/a54/8808d9a5477f42a78d03e357988aea60.png
[3]: http://habrahabr.ru/post/269769/#habracut

[>] [Перевод] Перспективные форматы видео. Новое направление
habra.15
habrabot(difrex,1) — All
2015-10-30 17:00:02


![][1] В начале сентября корпорация Intel объявила о своем участии в организации [Alliance for Open Media][2]. Этим шагом мы подчеркиваем поддержку открытых форматов и направляем наши усилия на создание нового поколения средств кодирования видео. Консорциум Alliance for Open Media, в состав которого входят корпорации Amazon, Cisco, Google, Intel, Microsoft, Mozilla и Netflix, создан с целью совместной разработки нового поколения форматов видео, позволяющих снизить стоимость доставки видео для конечных пользователей путем оптимизации для процессоров нового поколения. В этом посте мы проанализируем текущее положение дел в области видео форматов и рассмотрим перспективы их развития. Статья написана Марком Бакстоном, директором по развитию медиа продуктов Intel. [Читать дальше →][3]

[1]: https://habrastorage.org/files/864/22e/997/86422e9972fc431d82a97e1741b5037a.jpg
[2]: http://aomedia.org/
[3]: http://habrahabr.ru/post/269825/#habracut

[>] [Перевод] Будущее Web очень напоминает Bitcoin
habra.15
habrabot(difrex,1) — All
2015-10-31 03:30:02


![image][1] Для большинства людей [Джозеф Любин ][2]– ведущий мыслитель в стремительно развивающейся области цифровых валют. Для меня он был человеком, с которым я провёл [первую свою сделку ][3]по обмену биткоинов, и человеком, привыкший говорить большие вещи ровным и скромным голосом. Зимой 2014 года он позвал меня с собой на биткоин-конференцию в Майами, чтобы рассказать о новом проекте [Ethereum][4], который он с единомышленниками из Канады запустил за несколько месяцев до этого. Когда он объяснил мне суть проекта, он не скупился на прогнозы: «Мы заменим страховые компании и Уолл Стрит». Список продолжал расти. Онлайн-сервисы по распространению фильмов вроде Netflix и Hulu. Игровые платформы вроде Xbox и Sega Genesis. Мессенджеры вроде Twitter. Пенсии, обмены валют, системы голосования, управление интеллектуальной собственностью, трастовые фонды. Если верить Любину, то всё – реально всё, что мы делаем через интернет или по другим цифровым каналам, претерпит радикальные изменения. Рассказанная им идея с тех пор завладела умами энтузиастов цифровых валют. Идея в том, что технология, обеспечивающая безопасные транзакции в сети биткоин, и делающая их прозрачными, очень быстрыми и нецензурируемыми, и не требующими доверия другим сторонам, может использоваться для обработки более сложных сделок и хранить любую цифровую информацию в интернете. [Читать дальше →][5]

[1]: http://spectrum.ieee.org/img/07OLBitcoinOpener-1435087599434.jpg
[2]: https://twitter.com/ethereumjoseph
[3]: http://spectrum.ieee.org/telecom/internet/ripple-credit-system-could-help-or-harm-bitcoin
[4]: https://www.ethereum.org/
[5]: http://habrahabr.ru/post/269879/#habracut

[>] [recovery mode] Pony — убийца...?
habra.15
habrabot(difrex,1) — All
2015-10-31 13:00:03


Всем известны такие прогрессивные новички в программировании, как — «Go, Rust, Nim, Crystal» и, все они очень круты в своих определенных областях. **К примеру:**

1. Go был рожден, как супер простой и промышленный язык для быстрого решения поставленных задач с идеями, которые всем прекрасны известны, но некоторые из них прибиты к другим языкам гвоздями (На 5мм).
2. Второй наш оппонент — это Rust, победитель по жизни, но из-за своей сложной жизни в развитии он стал для сообщества, как будущая и модная замена C++. Для меня его судьба пока не понятна, так как с зелеными потоками и IO под них там пока туго, то я его ставлю на место в ряд с C для микроконтроллеров, драйверов и операционных систем.
3. Crystal… Прямо и четко говорю, что это супер производительный клон Ruby. Больше сказать нечего, весь он пропитан его духом.
4. Nim (Он же Нимушка или Нимрод) и его похожесть на скриптовые языки создают ему особую атмосферу, однако внутри он достаточно сложный организм и для меня сия сущность, как Haxe с такими же ощущениями при программировании на нем.

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

[1]: http://habrahabr.ru/post/269885/#habracut

[>] Возможна ли мультипроцессорная обработка в UEFI?
habra.15
habrabot(difrex,1) — All
2015-10-31 13:00:03


Согласно спецификации Unified Extensible Firmware Interface программная среда, обеспечивающая выполнение инициализационных процедур до загрузки операционной системы, не поддерживает многопотоковую обработку. Основная причина – однопотоковая идеология UEFI и, как следствие, нереентерабельность сервисных процедур UEFI API. Вместе с тем, ряд задач не связанных с вызовом сервисных функций (например, тестирование оперативной памяти) не только допускают параллельное выполнение несколькими программными потоками, но и получают от такого похода прибавку производительности. [Читать дальше →][1]

[1]: http://habrahabr.ru/post/269851/#habracut

[>] Сортировка без if-ов
habra.15
habrabot(difrex,1) — All
2015-10-31 14:00:03


Доброго времени суток. Так сложилась жизнь что я от недавнего времени стал гордым студентом одного из лучших вузов своей страны. Хорошо или плохо это вопрос спорный, но это не суть. Самое забавное это то, что на лабораторных работах преподаватель то ли для развлечения, то ли для того, что бы в очередной раз напомнить мне что я весьма паскудно разбираюсь в алгоритмике, время от времени выдает задания отличные от того, что получает оставшаяся группа. Одно из последних, которое, как по мне, достойно вашего внимания является сортировка массива без использования условных операторов (if, switch и тому подобных). [Читать дальше →][1]

[1]: http://habrahabr.ru/post/269875/#habracut

[>] Введение в RapidMiner
habra.15
habrabot(difrex,1) — All
2015-10-31 20:30:03


![RapidMiner logo][1]На данный момент существует много компаний нуждающихся в системах аналитики, но дороговизна и чрезмерная сложность данного ПО в большинстве случаев вынуждает отказаться от идеи построения собственной аналитической системы в пользу простого всем известного экселя. Также дополнительные расходы на обучение сотрудников, поддерживание дорогих систем хранения данных и т.д. И тут на помощь могут прийти Open Source решения — их не так много, но есть очень достойное ПО, одним из которых которых является RapidMiner. [Читать дальше →][2]

[1]: https://habrastorage.org/files/d42/23b/d0c/d4223bd0c0c74ec6b2c19163994571b6.png
[2]: http://habrahabr.ru/post/269427/#habracut

[>] Автоматическая генерация программного кода микроконтроллера на основе событийно-ориентированной модели
habra.15
habrabot(difrex,1) — All
2015-10-31 22:30:04


**Постановка задачи**: Создание сложной автоматизированной системы на основе контроллера для управления различной периферией (электронные замки, двигателя, светодиодные ленты и прочая электроника). Создание данной системы потребовалась для **квест **комнаты, подобной [**этой**][1], но в городе **Хабаровск**. Наш квест в ином [сеттинге][2], но в целом имеет примерно тот же набор исполнительных механизмов: реле, замки, ленты, герконы и т.д. **Основные требования к системе:**

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

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

[1]: http://geektimes.ru/post/264776/
[2]: https://ru.wikipedia.org/wiki/Сеттинг
[3]: https://habrastorage.org/getpro/habr/post_images/f8b/de4/970/f8bde49705cb630ec0ee5b53086aa5b4.png
[4]: http://habrahabr.ru/post/269897/#habracut

[>] Подводные камни Entity Framework и производительность
habra.15
habrabot(difrex,1) — All
2015-11-01 05:30:02


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

[1]: http://habrahabr.ru/post/269901/#habracut

[>] Как я делал веб-версию KeePass
habra.15
habrabot(difrex,1) — All
2015-11-01 12:00:04


Как-то мне надо было добавить в админку просмотр списка паролей. База хранилась на сервере в формате KeePass (kdbx v2), сервер был на ноде — недолго думая, я взял первый попавшийся пакет и сделал. А потом понадобилось то же самое, но прямо у пользователя в браузере, без сервера. Ничего не нашлось. Первым желанием было форкнуть либу и заменить использование node api, но от первого просмотра кода желание пропало, решил сделать сам. ![][1] Под катом расскажу о проблемах, с которыми я столкнулся, и способах их решения [Читать дальше →][2]

[1]: https://habrastorage.org/files/ee6/2ec/abd/ee62ecabd5594f388bfc03ac9ed8ff34.png
[2]: http://habrahabr.ru/post/269895/#habracut

[>] [Перевод] Неупакованные типы объединений в Scala на основе изоморфизма Карри-Ховарда
habra.15
habrabot(difrex,1) — All
2015-11-01 16:00:03


_Примечание переводчика. В будущей версии Scala (“Don Giovanni”) [анонсирована][1] поддержка типов объединения (union types). Miles Sabin, широко известный в узких кругах как создатель Shapeless, демонстрирует в [этой][2] статье 2011 года, как создать типы объединения уже сейчас. **UPD**. Представленный в статье подход не позволяет получить настоящих типов объединения и кроме того может существенно повлиять на время компиляции. Типы пересечения (`A with B`), использованные в статье, также отличаются от классических, поскольку не обладают свойством коммутативности. Подробности об экспериментальном проекте Dotty, в рамках которого будут решены эти и другие проблемы, можно посмотреть в замечательной [презентации][3] Дмитрия Петрашко [darkdimius][4] — разработчика компилятора Scala в EPFL._ Scala имеет очень выразительную систему типов. Однако она не включает (по крайней мере как примитивы) всех вожделенных элементов. Есть несколько поистине полезных типов, подпадающих под эту категорию — это типы полиморфных функций высшего ранга (higher-rank) и рекурсивные структурные типы. Но о них я расскажу подробнее в следующих постах, а сегодня я собираюсь показать вам, как в Scala мы можем создать типы объединения (union types). В ходе объяснения я пролью немного света на изоморфизм Карри-Ховарда и покажу, как использовать его в наших целях.



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

[1]: http://www.scala-lang.org/news/roadmap-next
[2]: http://milessabin.com/blog/2011/06/09/scala-union-types-curry-howard/
[3]: https://d-d.me/scalaworld2015/#/
[4]: http://habrahabr.ru/users/darkdimius/
[5]: http://habrahabr.ru/post/269907/#habracut

[>] Как мы взломали 18 работающих кардерских магазинов и не взяли ни цента
habra.15
habrabot(difrex,1) — All
2015-11-01 18:00:03


В наше время развелось огромное множество «именитых» специалистов в области информационной безопасности, люди, считающие что знаний по настройке FireWall уже достаточно чтобы причислить себя к «хакерам» или спецам в области ИБ. Лично я всегда считал, что у меня недостаточно знаний в этой сфере даже для того чтобы написать нормальную статью, но недавний успех этой истории на одном форуме по кибербезопасности и огромное количество отзывов побудили меня написать эту статью на хабр. Для тех кому интересно как мы с ребятами вскрывали кардерские шопы Just For Fun добро пожаловать под кат. ![image][1] [Читать дальше →][2]

[1]: https://habrastorage.org/getpro/habr/post_images/3d1/5ca/870/3d15ca87099130264930e14078cdd0a5.jpg
[2]: http://habrahabr.ru/post/269921/#habracut

[>] О том, как рисовать кривые графики в стиле XKCD
habra.15
habrabot(difrex,1) — All
2015-11-02 03:00:04


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



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

[1]: http://habrahabr.ru/post/266471/
[2]: http://habrahabr.ru/post/269931/#habracut

[>] [Перевод] Как писать Go код, который легко портируется
habra.15
habrabot(difrex,1) — All
2015-11-02 11:00:03


_(Перевод статьи с советами о написании по-настоящему кросс-платформенного кода в Go)_ Go великолепно приспособлен для работы с разными платформами. Моя основная среда разработки на Windows, но я всегда работаю с Linux-системами. Поэтому я естественным образом пытаюсь избегать вещей, которые могут создать проблемы. ![][1] Моё отношение к кросс-платформенной разработке таково, что если вы себя считаете серьезным разработчиком, то ваш код должен, **как минимум, собираться на других платформах**, потому как даже если не все функции можно использовать везде, часть пользователей всё равно захочет хотя бы часть функционала вашей библиотеки на других платформах. Недавно я помогал делать Windows-версию очень приятной [программы для бекапов][2], так как хотел изучить альтернативы к [zpaq][3], очень хорошему архиватору с журналированием и фокусом на сжатие. Во время портирования я отметил несколько вещей, которые могут быть полезны другим. [Читать дальше →][4]

[1]: https://habrastorage.org/files/482/92d/cbd/48292dcbdda04ce98a2f8a40b2be03f8.png
[2]: https://github.com/restic/restic
[3]: http://mattmahoney.net/dc/zpaq.html
[4]: http://habrahabr.ru/post/269943/#habracut

[>] Простые Задачи и Функционально-Блондинистый Подход
habra.15
habrabot(difrex,1) — All
2015-11-02 12:30:03


![sad girl and lambda expression][1] Пару месяцев назад я взяла на себя обязательство по самопросвещению. Есть в иных конторах такая тема — сотрудника, раз в полгода ревьюят и говорят «давай к следующему ревью ты изучишь Spring, паттерны (какие?) и функциональное программирование!» Идея была бы неплоха если бы цели не ставили так размыто. Пропустим пока спринг и паттерны — на выходных я бросилась в атаку на ФП. Общие-туманные сведения о ФП у меня конечно были — анонимные классы в Java я писать умею — с похожими способностями Python и JavaScript знакома. Начну с простых упражнений на Scala — решила я. Выбрала Scala поскольку основной рабочий инструмент у нас Java — ну были еще варианты Clojure, Groovy и Java8 (что-то еще?) — но с ними авось попробую потом. Поставила себе цели (а правильно ли я ФП поняла?):

* Решать задачи в функциональном стиле
* Т.е. по возможности не использовать явных циклов и ветвлений
* А также избегать мутабельных коллекций и т.п.

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

[1]: https://habrastorage.org/files/4e9/8c7/9db/4e98c79db6c54e228452ed7100632f0b.png
[2]: http://habrahabr.ru/post/269955/#habracut

[>] Лекции Технопарка: мастер-класс Алексея Рыбака «Про то, что я бы хотел, чтобы мне рассказали, пока я учился»
habra.15
habrabot(difrex,1) — All
2015-11-02 14:30:03


Сегодня мы начинаем серию публикаций новых мастер-классов Технопарка. И первая из них — мастер-класс Алексея Рыбака на свободную тему, в котором он поделился со студентами соображениями о том, чем работа в реальной жизни отличается от учебы. Видео смотрите на [нашем сайте][1], а адаптированную расшифровку — ниже. Я работаю в компании Badoo достаточно долго, и на моих глазах этот проект из маленького стартапа превратился в большую компанию с сотнями инженеров и тысячным парком серверов, распределенных по нескольким дата-центрам. Сейчас я хотел бы рассказать о том, что считаю достаточно интересным для студентов, выбравших профессию программиста. Не буду рассказывать о современных трендах и о том сегодня важно и нужно — об этом вам многие могут рассказать. Вместо этого поговорим о некой общечеловеческой адаптации бывших студентов к работе, которую каждый человек проходит в течение одного, а порой и нескольких лет. Процесс этот достаточно болезненный, и далеко не все «правильно» проходят эту адаптацию. Именно эта тема должна больше интересовать студентов и выпускников, чем какие-то модные технологические фишки. Хотя о них мы тоже поговорим, когда коснемся темы самообразования.



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

[1]: https://it.mail.ru/video/202/
[2]: http://habrahabr.ru/post/269687/#habracut

[>] [Из песочницы] Разноцветные терминалы
habra.15
habrabot(difrex,1) — All
2015-11-02 14:30:03


![][1] В этой публикации я расскажу о некоторых трюках, которые украсят будни любого системного администратора Linux (и не только). Все они связаны с переменной PS1 оболочки bash. Переменная PS1 определяет, как будет выглядеть приглашение для ввода новых команд. И каждый пользователь может переопределять её как пожелает, например, в файле ~/.bashrc (который выполняется при запуске bash и используется для в том числе для конфигурации). Для начала рассмотрим простой вариант, мой любимый формат командной строки. [Читать дальше →][2]

[1]: https://habrastorage.org/files/0ba/d03/648/0bad03648fd646ccb06a74a71be41aa8.png
[2]: http://habrahabr.ru/post/269967/#habracut

[>] «Что нового в Swift 2?» на примерах. Часть 2
habra.15
habrabot(difrex,1) — All
2015-11-02 15:00:04


В [первой части][1] мы рассмотрели лишь часть новых возможностей Swift 2:

* фундаментальные конструкции языка, такие, как , scoping (область действия), синтаксис аргументов и т.д.
* сопоставление с образцом (**pattern matching**)
* управление ошибками (**error handling**)

Во второй части мы рассмотрим оставшиеся:

* расширения (**extensions**) протокола
* проверка доступности (**availability checking**)
* взаимодействие с** Objective-C** и **С**

Я буду рассматривать новые возможности Swift 2, сопровождая их примерами, код которых находится на [Github][2]. [Читать дальше →][3]

[1]: http://habrahabr.ru/post/269171/
[2]: https://github.com/BestKora/WhatsNewInSwift2
[3]: http://habrahabr.ru/post/269719/#habracut

[>] Виртуальный сетевой интерфейс
habra.15
habrabot(difrex,1) — All
2015-11-02 19:30:03


Общеизвестно, что драйверы Linux — это модули ядра. Все драйверы являются модулями, но не все модули — драйверы. Примером одной из таких групп модулей, не являющихся драйверами, и гораздо реже появляющиеся в обсуждениях, являются сетевые фильтры на различных уровнях сетевого стека Linux. Иногда, и даже достаточно часто, хотелось бы иметь сетевой интерфейс, который мог бы оперировать с трафиком любого другого интерфейса, но каким-то образом дополнительно «окрашивать» этот трафик. Такое может понадобится для дополнительного анализа, или контроля трафика, или его шифрования, … Идея крайне проста: канализировать трафик уже существующего сетевого интерфейса во вновь создаваемый интерфейс с совершенно другими характеристиками (имя, IP, маска, подсеть, …). Один из способов выполнения таких действий в форме модуля ядра Linux мы и обсудим (он не единственный, но другие способы мы обсудим отдельно в другой раз). [Читать дальше →][1]

[1]: http://habrahabr.ru/post/269987/#habracut

[>] Do good code: 8 правил хорошего кода
habra.15
habrabot(difrex,1) — All
2015-11-02 20:30:04


Практически всем, кто обучался программированию, известна книга Стива Макконнелла «Совершенный код». Она всегда производит впечатление, прежде всего, внушительной толщиной (около 900 страниц). К сожалению, реальность такова, что иногда впечатления этим и ограничиваются. А зря. В дальнейшей профессиональной деятельности программисты сталкиваются практически со всеми ситуациями, описанными в книге, и приходят опытным путём к тем же самым выводам. В то время как более тесное знакомство могло бы сэкономить время и силы. Мы в [GeekBrains][1] придерживаемся комплексного подхода в обучении, поэтому провели для слушателей вебинар по правилам создания хорошего кода. [][2]



В комментариях к нашему первому [посту][3] на Хабре пользователи активно обсуждали каналы восприятия информации. Мы подумали и решили, что тему «совершенного кода» стоит развить и изложить ещё и письменно — ведь базовые принципы хорошего кода едины для программистов, пишущих на любом языке. [Читать дальше →][4]

[1]: http://geekbrains.ru/?utm_source=habrahabr&utm_medium=affiliate&utm_campaign=habrahabr_02.11.15
[2]: http://habrahabr.ru/company/geekbrains/blog/270001/
[3]: http://habrahabr.ru/company/geekbrains/blog/268741/
[4]: http://habrahabr.ru/post/270001/#habracut

[>] Python Meetup 25.09.2015: мониторинг производительности и использование BDD
habra.15
habrabot(difrex,1) — All
2015-11-02 20:30:04


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

* Мониторинг производительности веб-приложения на Python с использованием pinba + graphite + tessera
* ​Использование BDD в разработке на Python

Также участники сообщества обсудили несколько актуальных Python'овских тем в рамках Lightning Talk. Записи всех выступлений вы найдете под катом. ![][1] [Читать дальше →][2]

[1]: https://habrastorage.org/files/86a/383/b0a/86a383b0a9584b62b1dc193bdd00a57d.jpg
[2]: http://habrahabr.ru/post/269957/#habracut

[>] [Из песочницы] Бунт против виртуальной машины
habra.15
habrabot(difrex,1) — All
2015-11-02 20:30:04


_Предлагаю вашему вниманию перевод статьи [Rage Against the Virtual Machine][1]._ Антивирусные компании, магазины мобильных приложений и исследователи безопасности используют техники, основанные на динамическом анализе кода, для обнаружения и анализа мобильных вредоносных приложений. В этот статье, представлен широкий диапазон техник противодействия анализу, которые могут быть использованы вредоносными приложения для обхода динамического анализа в эмулируемые средах платформы Android. Эвристики обнаружения, представленные в этой статье, охватывают три различные категории, основанные на (i) статических свойствах, (ii) динамической информации от датчиков и (iii) тонкостях работы эмулятора Android на виртуальных машинах. Для оценки эффективности представленных методов они были включены в образцы реальных вредоносных приложений и отправлены в публично доступные системы динамического анализа, после чего были получены тревожные результаты. Было обнаружено, что все инструменты и сервисы уязвимы для большинства наших техник уклонения от анализа. Даже тривиальные техники, такие как проверка значения IMEI, достаточны для обхода некоторых существующих сред динамического анализа. Также предложены возможные контрмеры для улучшения устойчивости текущих инструментов динамического анализа против попыток уклонения от анализа. [Читать дальше →][2]

[1]: http://dl.acm.org/citation.cfm?id=2592796
[2]: http://habrahabr.ru/post/269999/#habracut

[>] Re: Do good code: 8 правил хорошего кода
habra.15
vit01(mira, 1) — habrabot
2015-11-03 08:21:08


Стих из комментариев (Subrisk):

Чтоб коллапс вдруг не настал,
Применяйте коде-стайл.
Делай совершенный код,
Чтобы понял даже кот.

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

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

=)

[>] Re: Do good code: 8 правил хорошего кода
habra.15
Andrew Lobanov(station13, 1) — vit01
2015-11-03 08:29:39


vit01>Стих из комментариев (Subrisk):

Мило и по делу.

vit01>Пусть компактным будет метод,
vit01>Отделённым интерфейс,
vit01>Накосячил если где-то,
vit01>В этот код заткнут твой фейс.

В этой строфе мне нравится рифма. Напоминает бессмертное "кеды-полукеды". Но в целом

┌─┐
│✔│Нравится
└─┘

[>] Использование gitlab continuous integration для деплоя
habra.15
habrabot(difrex,1) — All
2015-11-03 10:30:05


![][1]Совсем недавно гитлаб героически выкатил версию 8.0 своего конкурента гитхабу. Из интересного — движок continuous integration теперь встроен в платформу, а значит доступен в качестве бесплатного сервиса для всех желающих на [gitlab.com][2]. Совместно с бесплатными приватными репозиториями это делает облачный сервис гитлаб не только удобным местом для хранения кода, но также тестирования и деплоя. О последнем я и расскажу под катом. [Осторожно, под катом - много англицизмов!][3]

[1]: https://habrastorage.org/files/9dd/2f3/59f/9dd2f359f764498f94005cddb4f960b5.png
[2]: http://gitlab.com
[3]: http://habrahabr.ru/post/269473/#habracut

Pages: 1 ... 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 ... 37