Рано или поздно каждый разработчик сталкивается с проблемой выбора конкретного технического решения для определенной задачи. В современном мире каждый день появляются новые тенденции и технологии. Одной из самых быстро растущих областей является NoSQL. Наряду с широко известными и успешно используемыми решениями существует ряд малознакомых, но очень амбициозных проектов. В такой ситуации процесс выбора и интеграции играет ключевую роль в успешности выполнения поставленных задач.
В своем выступлении я хочу поделиться опытом, который будет полезен всем, кто осуществляет техническую экспертизу и управление командой.
Я расскажу об опыте выбора и внедрения NoSQL в Java Enterprise проект, о плюсах и минусах. Но, несмотря на интригующее название, в первую очередь цель доклада - поделиться опытом, а не провести глубокий анализ одного из множества NoSQL решений.
Поговорим о тестирование Android приложений при помощи Calabash, Robolectrick, Spock и Junit. Как правильно применять BDD на вашем проекте. Обсудим настройку настройку билд сервера и процесса Continious Delivery в андроид экосистеме.
Software developers spend most of their time working with code on literal level. Unfortunately, vast amount of design flaws hides behind hundreds of interrelated packages, classes and methods, destroying your system deliberately. In this talk will supply you with knowledge necessary to manage complexity of your logical design from theoretical, practical and tooling perspectives. Time to keep architecture in predictable and manageable state!
Lessons Learned from Failed ERP Implementationsbandarkar
No matter what type of business you're in, implementing an ERP solution is a critical project that must be taken seriously. In this webinar presentation our ERP Implementation Officer will share his experience towards ERP Implementation and he shall also cover the following agenda.
1. Top reasons of unsuccessful ERP Implementations
2. Results of failed ERP Implementations
3. 5 lessons learned from Failed ERP Implementations
4. Best Methodology to follow for successful ERP Implementations
Appium + selenide comaqa.by. Антон СеменченкоAlina Dolgikh
Appium набирает все большую популярность среди инструментов для функционального тестирования мобильных приложений. Selenide - популярная Java обертка над Selenium Webdriver, позволяющая легко и непринужденно писать автоматизированные тесты для веб приложений. Можно ли интегрировать два инструмента, учитывая то, что appium использует свой клиент и свой протокол, несколько отличные от Selenium Webdriver? Что мы сможем выиграть в случае успеха? Давайте поговорим об этом!
2009-08-24 The Linux Audit Subsystem Deep DiveShawn Wells
Presented at SHARE Denver 2009. Why is Linux auditing needed? What can it do for me? How does it work? What events get audited? How do I make sense of all the data?
Зачем переводить работающий проект с RDBMS на noSql? Как это сделать, и как это нельзя делать? Что важнее для успешного пректа - технологическое преимущество или доверительные отношения в команде? Какова роль процесса в успехе проекта и что бывает, когда каждый член команды действует в соответствии со своими локальными интересами.
Java has a solid Memory Model, and there are a couple of excellent libraries for concurrency. When you start working with threads however, pitfalls start appearing - especially if the program is supposed to be fast and correct. This session shows proven solutions for some typical problems, showing how to view program code from a concurrency perspective: Which threads share which data, and how? How to reduce the impact of locks? How to avoid them altogether - and when is that worth it?
Поговорим о тестирование Android приложений при помощи Calabash, Robolectrick, Spock и Junit. Как правильно применять BDD на вашем проекте. Обсудим настройку настройку билд сервера и процесса Continious Delivery в андроид экосистеме.
Software developers spend most of their time working with code on literal level. Unfortunately, vast amount of design flaws hides behind hundreds of interrelated packages, classes and methods, destroying your system deliberately. In this talk will supply you with knowledge necessary to manage complexity of your logical design from theoretical, practical and tooling perspectives. Time to keep architecture in predictable and manageable state!
Lessons Learned from Failed ERP Implementationsbandarkar
No matter what type of business you're in, implementing an ERP solution is a critical project that must be taken seriously. In this webinar presentation our ERP Implementation Officer will share his experience towards ERP Implementation and he shall also cover the following agenda.
1. Top reasons of unsuccessful ERP Implementations
2. Results of failed ERP Implementations
3. 5 lessons learned from Failed ERP Implementations
4. Best Methodology to follow for successful ERP Implementations
Appium + selenide comaqa.by. Антон СеменченкоAlina Dolgikh
Appium набирает все большую популярность среди инструментов для функционального тестирования мобильных приложений. Selenide - популярная Java обертка над Selenium Webdriver, позволяющая легко и непринужденно писать автоматизированные тесты для веб приложений. Можно ли интегрировать два инструмента, учитывая то, что appium использует свой клиент и свой протокол, несколько отличные от Selenium Webdriver? Что мы сможем выиграть в случае успеха? Давайте поговорим об этом!
2009-08-24 The Linux Audit Subsystem Deep DiveShawn Wells
Presented at SHARE Denver 2009. Why is Linux auditing needed? What can it do for me? How does it work? What events get audited? How do I make sense of all the data?
Зачем переводить работающий проект с RDBMS на noSql? Как это сделать, и как это нельзя делать? Что важнее для успешного пректа - технологическое преимущество или доверительные отношения в команде? Какова роль процесса в успехе проекта и что бывает, когда каждый член команды действует в соответствии со своими локальными интересами.
Java has a solid Memory Model, and there are a couple of excellent libraries for concurrency. When you start working with threads however, pitfalls start appearing - especially if the program is supposed to be fast and correct. This session shows proven solutions for some typical problems, showing how to view program code from a concurrency perspective: Which threads share which data, and how? How to reduce the impact of locks? How to avoid them altogether - and when is that worth it?
Об эволюции потоков Java c JDK 6 до наших дней, движущих силах этой эволюции и венце творения - Reactive Streams. Reactive Streams – это многообещающий стандарт асинхронных неблокируемых потоков, поддерживаемый такими гигантами как Oracle, Netflix, Pivotal, Typesafe, RedHat и Twitter.
В список обещаний входит:
- Упрощение реактивного программирования
- Повышение уровня абстракции программ
- В перспективе становление новым стандартом обмена данными для JVM"
David Mertz. Type Annotations. PyCon Belarus 2015Alina Dolgikh
Python is a dynamically (but strongly, for some value of "strongly") typed programming language. Notwithstanding its dynamism, checking types--or other behaviors--of variables has always been possible in Python code, and a steady stream of users have had a desire to do so.
At a conceptual level, enforcing a type is a subset of enforcing an invariant on a variable, and the broader demand for design by contract has been a recurrent theme in Python discussions. PEP 316 addressed this desire (but was not accepted) a decade ago, as did the long defunct library PyDBC. Currently maintained, however, is the PyContracts library, which allows documenting and enforcing both types narrowly, and predicates of variables more broadly. I myself wrote a simple recipe for basic type checking using PEP 3107 annotations at the Python Cookbook: Type checking using Python 3.x annotations (http://code.activestate.com/recipes/578528-type-checking-using-python-3x-annotations/).
Владимир Еремин. Extending Openstack. PyCon Belarus 2015Alina Dolgikh
OpenStack назван одним из лучших open source проектов (по версии http://opensource.com/business/14/12/top-10-open-source-projects-2014) и написан полностью на Python. OpenStack уже включает в себя целую кучу готовых к использованию батареек, но если есть необходимость добавить что-то свое -- вы можете это сделать без изменения базового кода, просто написав собственное расширение. Я расскажу, что такое OpenStack и что он умеет из коробки, какие возможности расширения своей функциональности предоставляет эта платформа и как мы это используем у себя в уютненьком Яндексе.
Стремление каждого разработчика ПО — писать код. Всё, что от этого кода требуется — работать без ошибок и соответствовать задумке. Не секрет, что для более-менее сложного продукта требуется объединить несколько программистов в одну команду и заставить их работать вместе... И вот тут начинаются проблемы: каждый пишет по-своему и затрудняется понять код коллеги. Что в итоге? Падает эффективность, снижается качество продукта, увеличивается время вхождения для новых разработчиков.
Решить эти проблемы помогает контроль за стилем кода. В этом докладе я расскажу про то, какие практики вам могут пригодиться на выбранном пути и какие средства для этого есть в экосистеме Python.
Володимир Гоцик. Getting maximum of python, django with postgres 9.4. PyCon B...Alina Dolgikh
Postgres предоставляет много встроенных возможностей для создания эфективных приложений, использующих базы данных. А в версии 9.4 появляется еще и полноценное JSON поле, при правильном использовании которого, отпадает необходимость использвания NoSQL баз данных. В докладе мы рассмотрим, как использовать этот потенциал по максимуму в своих Python/Django приложениях.
Austin Bingham. Transducers in Python. PyCon BelarusAlina Dolgikh
Understanding Transducers Through Python – Transducers are a new and interesting functional programming concept that comes from the world of Clojure. In this talk we’ll learn about transducers by seeing how to implement them in Python. By using transducers to build familiar functional programming elements like map and filter, we’ll see that transducers are actually simple, elegant, and quite powerful.
Python Refactoring with Rope and Traad – The rope library is a powerful tool for refactoring Python code, but to be truly useful it needs to be available to development environments. Traad is a tool which makes it simpler to integrate rope into nearly any tool by exposing a simple HTTP API. In this session we’ll look at how traad and rope work together, and we’ll see how traad integrates with at least one popular editor.
4 года разрабатывает видеостриминговый сервер эрливидео и в этом докладе расскажет о некоторых отличительных возможностях Erlang, которые позволяют быстро развиваться и поддерживать высочайшее качество ПО минимальными усилиями.
Пиар в стартапе: извлекаем максимум пользы. Алексей ЛартейAlina Dolgikh
1. Зачем стартапу пиар? Чтобы покупали продукт, чтобы инвестировали в компанию, чтобы знали команду и приходили работать (HR-пиар).
2. Целевые аудитории и каналы: бизнес-СМИ (для инвесторов), IT-коммьюнити (для продаж продукта), тематические сообщества (HR).
3. Как формировать вашу базу СМИ? По каким метрикам?
4. Главный секрет успешного пиара: делайте нормальный продукт. Ненормальный не купят, на ненормальный не придут инвесторы, на ненормальный вы не наймете лучших людей.
5. Как заинтересовать журналиста? Рассказывайте истории: о продукте, о разработке, об инвестициях.
6. Используйте попутные инфоповоды: пишите колонки.
7. Сколько денег экономит пиар? Примеры с цифрами.
8. Заключение/выводы.
Подготовка проекта к первому раунду инвестиций. Дмитрий ПоляковAlina Dolgikh
1. Зачем вы получаете инвестиции?
2. Инвестор VS стартапер. Как договариваться?
3. Due diligence: что это и как проходит.
4. Подготовка к due diligence: какие документы готовить?
5. Подготовка к due diligence: чего ни в коем случае не нужно делать и почему?
6. Итог.
Как составлять правильный тизер для инвесторов? Никита РогозинAlina Dolgikh
1. Что такое тизер и для чего он нужен?
2. Какова его структура? Что входит в этот документ?
3. Какие слова надо использовать при составлении тизера и каких лучше избегать?
4. Как тизер «бьется» с презентацией для инвесторов? Много ли там общего контента?
5. Пример отличного тизера.
6. Практические рекомендации и выводы.
Об эволюции потоков Java c JDK 6 до наших дней, движущих силах этой эволюции и венце творения - Reactive Streams. Reactive Streams – это многообещающий стандарт асинхронных неблокируемых потоков, поддерживаемый такими гигантами как Oracle, Netflix, Pivotal, Typesafe, RedHat и Twitter.
В список обещаний входит:
- Упрощение реактивного программирования
- Повышение уровня абстракции программ
- В перспективе становление новым стандартом обмена данными для JVM"
David Mertz. Type Annotations. PyCon Belarus 2015Alina Dolgikh
Python is a dynamically (but strongly, for some value of "strongly") typed programming language. Notwithstanding its dynamism, checking types--or other behaviors--of variables has always been possible in Python code, and a steady stream of users have had a desire to do so.
At a conceptual level, enforcing a type is a subset of enforcing an invariant on a variable, and the broader demand for design by contract has been a recurrent theme in Python discussions. PEP 316 addressed this desire (but was not accepted) a decade ago, as did the long defunct library PyDBC. Currently maintained, however, is the PyContracts library, which allows documenting and enforcing both types narrowly, and predicates of variables more broadly. I myself wrote a simple recipe for basic type checking using PEP 3107 annotations at the Python Cookbook: Type checking using Python 3.x annotations (http://code.activestate.com/recipes/578528-type-checking-using-python-3x-annotations/).
Владимир Еремин. Extending Openstack. PyCon Belarus 2015Alina Dolgikh
OpenStack назван одним из лучших open source проектов (по версии http://opensource.com/business/14/12/top-10-open-source-projects-2014) и написан полностью на Python. OpenStack уже включает в себя целую кучу готовых к использованию батареек, но если есть необходимость добавить что-то свое -- вы можете это сделать без изменения базового кода, просто написав собственное расширение. Я расскажу, что такое OpenStack и что он умеет из коробки, какие возможности расширения своей функциональности предоставляет эта платформа и как мы это используем у себя в уютненьком Яндексе.
Стремление каждого разработчика ПО — писать код. Всё, что от этого кода требуется — работать без ошибок и соответствовать задумке. Не секрет, что для более-менее сложного продукта требуется объединить несколько программистов в одну команду и заставить их работать вместе... И вот тут начинаются проблемы: каждый пишет по-своему и затрудняется понять код коллеги. Что в итоге? Падает эффективность, снижается качество продукта, увеличивается время вхождения для новых разработчиков.
Решить эти проблемы помогает контроль за стилем кода. В этом докладе я расскажу про то, какие практики вам могут пригодиться на выбранном пути и какие средства для этого есть в экосистеме Python.
Володимир Гоцик. Getting maximum of python, django with postgres 9.4. PyCon B...Alina Dolgikh
Postgres предоставляет много встроенных возможностей для создания эфективных приложений, использующих базы данных. А в версии 9.4 появляется еще и полноценное JSON поле, при правильном использовании которого, отпадает необходимость использвания NoSQL баз данных. В докладе мы рассмотрим, как использовать этот потенциал по максимуму в своих Python/Django приложениях.
Austin Bingham. Transducers in Python. PyCon BelarusAlina Dolgikh
Understanding Transducers Through Python – Transducers are a new and interesting functional programming concept that comes from the world of Clojure. In this talk we’ll learn about transducers by seeing how to implement them in Python. By using transducers to build familiar functional programming elements like map and filter, we’ll see that transducers are actually simple, elegant, and quite powerful.
Python Refactoring with Rope and Traad – The rope library is a powerful tool for refactoring Python code, but to be truly useful it needs to be available to development environments. Traad is a tool which makes it simpler to integrate rope into nearly any tool by exposing a simple HTTP API. In this session we’ll look at how traad and rope work together, and we’ll see how traad integrates with at least one popular editor.
4 года разрабатывает видеостриминговый сервер эрливидео и в этом докладе расскажет о некоторых отличительных возможностях Erlang, которые позволяют быстро развиваться и поддерживать высочайшее качество ПО минимальными усилиями.
Пиар в стартапе: извлекаем максимум пользы. Алексей ЛартейAlina Dolgikh
1. Зачем стартапу пиар? Чтобы покупали продукт, чтобы инвестировали в компанию, чтобы знали команду и приходили работать (HR-пиар).
2. Целевые аудитории и каналы: бизнес-СМИ (для инвесторов), IT-коммьюнити (для продаж продукта), тематические сообщества (HR).
3. Как формировать вашу базу СМИ? По каким метрикам?
4. Главный секрет успешного пиара: делайте нормальный продукт. Ненормальный не купят, на ненормальный не придут инвесторы, на ненормальный вы не наймете лучших людей.
5. Как заинтересовать журналиста? Рассказывайте истории: о продукте, о разработке, об инвестициях.
6. Используйте попутные инфоповоды: пишите колонки.
7. Сколько денег экономит пиар? Примеры с цифрами.
8. Заключение/выводы.
Подготовка проекта к первому раунду инвестиций. Дмитрий ПоляковAlina Dolgikh
1. Зачем вы получаете инвестиции?
2. Инвестор VS стартапер. Как договариваться?
3. Due diligence: что это и как проходит.
4. Подготовка к due diligence: какие документы готовить?
5. Подготовка к due diligence: чего ни в коем случае не нужно делать и почему?
6. Итог.
Как составлять правильный тизер для инвесторов? Никита РогозинAlina Dolgikh
1. Что такое тизер и для чего он нужен?
2. Какова его структура? Что входит в этот документ?
3. Какие слова надо использовать при составлении тизера и каких лучше избегать?
4. Как тизер «бьется» с презентацией для инвесторов? Много ли там общего контента?
5. Пример отличного тизера.
6. Практические рекомендации и выводы.
1. NoSQL unSUCCESSFUL story.
Выбор и интеграция NoSQL решения в Enterprise систему
Email: v.zenkevich@intetics.com
Skype: uladzimir_ziankevich
Владимир Зенькевич
ведущий разработчик
15. Как?
MS SQL
expert знания
legacy, риски
SOLR
advanced знания
гарантированная скорость
успешное использование
реиндексация
NoSQL
novice знания
креативность
18. Немного теории
Graph databases allow you to store entities and relationships between these
entities. (Martin Fawler)
V1
V2
E1
Entity
Vertex
Node
Edge
Relationship
25. Competitors
Neo4J vs OrientDB
•Успешное использование
•SQL подобный язык
SELECT name, out(‘ACTS’).title
FROM Person WHERE name = ‘Robin’
MATCH (actor:Person{name:’Robin’})-
[:ACTS_IN]->(movie)
RETURN actor.name, movie.title
26. Competitors
Neo4J vs OrientDB
•Успешное использование
•SQL подобный язык
•Реализует BluePrint graph
SELECT name, out(‘ACTS’).title
FROM Person WHERE name = ‘Robin’
MATCH (actor:Person{name:’Robin’})-
[:ACTS_IN]->(movie)
RETURN actor.name, movie.title
27. Competitors
Neo4J vs OrientDB
•Успешное использование
•SQL подобный язык
•Реализует BluePrint graph
•Горизонтально масштабируема
SELECT name, out(‘ACTS’).title
FROM Person WHERE name = ‘Robin’
MATCH (actor:Person{name:’Robin’})-
[:ACTS_IN]->(movie)
RETURN actor.name, movie.title
28. Competitors
Neo4J vs OrientDB
•Успешное использование
•SQL подобный язык
•Реализует BluePrint graph
•Горизонтально масштабируема
•Бесплатна
SELECT name, out(‘ACTS’).title
FROM Person WHERE name = ‘Robin’
MATCH (actor:Person{name:’Robin’})-
[:ACTS_IN]->(movie)
RETURN actor.name, movie.title
41. Интеграция
Или
SELECT FROM Location
WHERE name_en CONTAINSTEXT 'Bela'
AND locationType IN ['CITY', 'COUNTRY']
ORDER BY population DESC, sortOrder ASC
SKIP 0 LIMIT 100
48. Кульминация
Быстро(PoC case)
select from (traverse in('belongsToLocation') from (select from AbstractLocation where locationId
= 6255148)) where $depth >= 1 AND locationType IN ['CITY'] LIMIT 20
Медленно
select from (traverse in('belongsToLocation') from (select from AbstractLocation where locationId
= 6255148))
where $depth >= 1 AND locationType IN ['ADMIN_DIVISION'] LIMIT 20
Очень Медленно
select from (traverse in('belongsToLocation') from (select from AbstractLocation where locationId
= 6255148))
where $depth >= 1 AND locationType IN ['COUNTRY'] LIMIT 20
53. Кульминация
Но…
SELECT FROM Location
LET $match = (SELECT FROM (TRAVERSE out('belongsToLocation') FROM $parent.$current)
WHERE locationId = 6255148 AND $depth >= 1)
WHERE name_en CONTAINSTEXT 'Be' AND $match.size() > 0
ORDER BY population DESC, sortOrder ASC
SKIP 0 LIMIT 100
SELECT FROM Location
LET $match = (SELECT FROM (TRAVERSE out('belongsToLocation') FROM $parent.$current)
WHERE locationId = 6252001 AND $depth >= 1)
WHERE name_en CONTAINSTEXT '10' AND $match.size() > 0
ORDER BY population DESC, sortOrder ASC
SKIP 0 LIMIT 100
SELECT FROM Location
LET $match = (SELECT FROM (TRAVERSE out('belongsToLocation') FROM $parent.$current)
WHERE locationId = 4138106 AND $depth >= 1)
WHERE name_en CONTAINSTEXT '20' AND $match.size() > 0
ORDER BY population DESC, sortOrder ASC
SKIP 0 LIMIT 100
54. Кульминация
Некоторые бизнес требования привели к
select
in_uselanguage.out.locationId[0] as locationId,
in_uselanguage.out.name_en[0] as locName,
in_uselanguage.out.population[0] as population,
in_uselanguage.out.locationType[0] as type
from LocationAlias
let $match = (select from (traverse out('belongsToLocation') from (select
expand(in("uselanguage")) from $parent.$parent.$current)) where locationId =
6255148 and $depth >= 1)
where upperName CONTAINSTEXT '77' and $match.size() > 0
and in_uselanguage.out.locationType[0] IN ['POSTAL_CODE', 'CITY', 'ADMIN_DIVISION',
'COUNTRY', 'REGION']
group by in_uselanguage.out.locationId
order by population desc
limit 10
60. Кульминация
select count(*) from AbstractLocation where locationType = 'COUNTRY' OR
isCustom = true
select unionall($a,$b) let $a = (select from AbstractLocation where
locationType = 'COUNTRY' ), $b = (select from AbstractLocation where
isCustom = true )
73. Root Cause Analysis
Взгляд снаружи
Ошибки и выводы:
1. Экспертиза команды
2. Качественный PoC
a) Достаточное время
b) Время жизни продукта
c) Команда продукта
d) Документация
e) Support в начале
f) Примеры интеграции (live references)
g) Качественный и обоснованный набор проверяемых историй
(the most risky first)
74. Root Cause Analysis
Взгляд изнутри
Конечное решение НЕ за исполнителем
Финальное решение должно быть на стороне человека,
осуществляющего техническое руководство.
75. Root Cause Analysis
Взгляд изнутри
Нет субъективным оценкам
В идеале, лучше воздержаться от субъективных персональных оценок и
основываться на объективных результатах наблюдений.