четверг, 24 декабря 2015 г.

Hadoop and Big Data Tutorials


This week, a collection of useful articles and tutorials on using tools for ETL, ELT, ingest, manipulation and preparing data for your data lake.
Start developing with Hadoop ASAP with a quick start Docker container from Cloudera.
Some great tips on using Flume.
Working with Cell-level Security in HBase.
Getting started with Apache Zeppelin (Spark).
Avoiding the Mess in Hadoop Clusters.
Real-time Stock Prediction with an Open Source Data Stack.
A deep-dive presentation on Spark SQL.
Two good introductions to Apache Spark and here.
Information on the upcoming Apache Spark 1.6.
An Overview of DataFrames with Apache Spark and Scala.
Tips and Tricks for Scaling Apache Spark.
Introduction to Apache Spark with Python.
Two free GitBooks on Apache Spark (Mastering Apache Spark and Databricks Spark Reference Applications).

пятница, 18 декабря 2015 г.

from-threadstolambda and bigdata interesting

https://events.yandex.ru/lib/talks/2066/
http://www.slideshare.net/yandex/from-threadstolambda-yandex?next_slideshow=1

http://jug.ua/2015/12/apache_drill_and_apache_spark/

Возможное зацикливание редиректа.

У нас сайт на хттпс, но админу нужен доступ в хттп. И у нас после логина под админом случается бесконечное зацикливание - причина тому HTTP Strict Transport Security (HSTS).
В хроме она включена по умолчанию, а ФФ нужно включать, также поддержка есть у Safari и будет от Microsoft.
Сайты могут поддерживать и https и http одновременно, но страницы с уязвимыми данными от пользователя обслуживаются только в https, но пользователь может ввести урл без  протокола или с незащищенным протоколом и передать уязвимые данные в сеть, где они могут быть перехваченными.
Для этого страницы под https могут добавлять заголовок:
Strict-Transport-Security: max-age=16070400; includeSubDomains
Теперь браузер запоминает, что данный домен верхнего уровня должен быть только под https на указанное время. И браузер уже все запросы отправляет только по TSL.

chrome://net-internals/#hsts - включить/выключить, очистить кеш.

четверг, 17 декабря 2015 г.

Как тестить сервлеты в юнит тестах

Для этого нам понадобятся следующие библиотеки:
org.springframework:spring-test:4.1.7.RELEASE (для моков запроса и ответа)
org.jsoup:jsoup:1.7.3 (для разбора хтмл страницы и выборки элементов на ней)
- шаблонизатор для генерации хтмл ответа сервлеты(ну можно например воспользоваться com.github.spullara.mustache.java:compiler:0.9.0)

Интерфейс java Cucumber для Dependency Injection containers

Определяется например в cucumber.properties cucumber.api.java.ObjectFactory=my.pack.MyObjFactory
Служит для сборки приемочных тестов кукумбера классами поддрежки и другими.

вторник, 15 декабря 2015 г.

TDD with Mocks. "Mock Objects" framework

Почему TDD(write test first)?
1) Мы фокусируемся на исследовании предметной области, которую мы разрабатываем, и по определению не можем знать хорошо сразу, а не на продумывании реализации и архитектуры сразу(изобретении), что подразумевает - мы знаем домен уже хорошо сразу, что будет возможным только через, возможно, полгода работы с проектом.
2) Мы не смиряемся с "так получилось", мы пишем в ракурсе "нужно так".
3) Покрытость тестами, позволяет нам не бояться рефакторить, и наша архитектура эволюционирует и рождается, это какбы путь "обреченный" на хорошую архитектуру.

По-быстрому свободной формы json c Jackson

ObjectMapper jacksonMapper = new ObjectMapper();
JsonNodeFactory jsonNodeFactory = new JsonNodeFactory(false);
JsonFactory jsonFactory = new JsonFactory();

final ObjectNode jsonRoot = jsonNodeFactory.objectNode();

jsonRoot.set("error", 
  jsonNodeFactory.objectNode()
              .put("code", 1)
              .put("msg", "Message")
);
jsonRoot.putNull("nullField");
//ResourceResponse resp;
resp.setContentType("application/json;");
    jacksonMapper.writeTree(
        jsonFactory.createGenerator(resp.getWriter()),
        jsonRoot
    );
    resp.getWriter().flush();

среда, 9 декабря 2015 г.

среда, 2 декабря 2015 г.

Аннотации для профилирования

@IfProfileValue - для активайии/деактивации тестов, в зависимости от значений системных переменных(те который получаются так Map env = System.getenv(); , а устанавливаются либо "export some=hello; java app" | "some=hello java app" | "java app -Dsome=hello")
@IfProfileValue(name = "test-groups", values = { "unit-tests", "integration-tests" })
 public void testWhichRunsForUnitOrIntegrationTestGroups() {
     // ...
 }

Для инициализации бина в конкретной среде, которая определяется профилем, используется другая аннотация:
@Profile({"p1", "!p2"})