Pull to refresh
0
0
Send message

Начинающим Java программистам

Reading time2 min
Views1.2M
Программирую на Java вот уже 7 лет. Но на работе часто приходится обучать новое поколение. В связи с этим и решил сделать некоторую шпаргалку, которая, надеюсь, пригодится и для хабрчан. Если кто-то может помочь дополнить чем-то информацию из этой статьи, то пишите! Итак:

Основные ресурсы для начального обучения


  • www.javable.com — сайт со статьями и tutorial'ом по Java. Все в основном на русском.
  • www.exampledepot.com — очень полезный ресурс, где собраны краткие примеры использования классов для тех или иных пакетов
  • java.sun.com — без первоисточника не обойтись. Для любого Java программиста JavaDoc должен быть истиной в последней инстанции. Так же здесь можно найти серию tutorial'ов на все возможные темы.

Читать дальше →
Total votes 120: ↑113 and ↓7+106
Comments58

Принуждение к кэшированию: прикручиваем L2 кэш Apache Ignite к Activiti

Reading time7 min
Views5.5K
Часто так бывает, что есть хорошая библиотека, а чего-то в ней не хватает, каких-нибудь перламутровых пуговиц. Так и мне с Activiti, довольно популярным движком бизнес-процесcов с поддержкой BPMN 2.0, ценным своей Java-нативностью. Не вдаваясь в подробности внутреннего устройства этого продукта с открытым исходным кодом, достаточно очевидно, что в своей работе он использует разнообразные данные: метаданные определений бизнес-процессов, данные экземпляров и исторические данные. Для их хранения Activiti использует СУБД, позволяя выбрать из DB2, H2, Oracle, MySQL, MS SQL и PostgreSQL. Этот движок весьма неплох, и используется не только для маленьких поделок. Возможно, вопрос о поддержке кэширования обращений к БД в этом продукте возник не только у меня. Как минимум единожды он задавался разработчикам, которые на него ответили в том смысле, что метаданные кэшируются, а для остальных данных большого смысла в этом нет и это не просто. В принципе, про отсутствие большого смысла согласиться можно — данные конкретного экземпляра или его исторические данные с небольшой вероятностью могут повторно понадобиться. Но сценарий, когда такое всё-таки случится, тоже возможен. Например, если у нас кластер серверов Activiti с общей базой. В общем, человек с пытливым умом вполне может захотеть иметь приличный кэш в Activiti. Например, использовать в этом качестве Apache Ignite.

Под катом пример решения этой проблемы, код выложен на GitHub.
Читать дальше →
Total votes 14: ↑14 and ↓0+14
Comments0

Разработка чат-бота для Facebook Messenger

Reading time10 min
Views90K
В настоящее время наблюдается, действительно, бум чат-мессенджеров. Один за другим платформы для обмена мгновенными сообщениями объявляют о запуске платформы для разработки ботов.
Не стал и исключением Facebook. 12 апреля на конференции F8 Facebook представила платформу для разработки ботов для своего мессенджера.
В данной статье хочу поделиться опытом разработки чат-бота для Facebook на PHP.
Читать дальше →
Total votes 22: ↑20 and ↓2+18
Comments24

Добавление сетевых дисков с персональными папками для пользователей через GPP на примере Windows Server 2012R2

Reading time1 min
Views110K
Всем привет!

Сегодня я хотел бы с вами поделиться информацией как можно достаточно легко и быстро с помощью технологии Group Policy Preferences (GPP) (Она доступна с Windows Server 2008) создавать и мапить пользовательские личные папки на сервере.

Данный процесс можно разбить на несколько основных этапов
  • Создание и настройка прав на корневую папку в которой будут храниться папки пользователей
  • Создание папки для пользователя
  • Мапинг сетевого диска для пользователей


Читать дальше →
Total votes 11: ↑7 and ↓4+3
Comments10

Разбираемся с войной нейронных сетей (GAN)

Reading time7 min
Views40K
Generative adversarial networks (GAN) пользуются все большей популярностью. Многие говорят о них, кто-то даже уже использует… но, как выясняется, пока мало кто (даже из тех кто пользуется) понимает и может объяснить. ;-)
Давайте разберем на самом простом примере, как же они работают, чему учатся и что на самом деле порождают.
Читать дальше →
Total votes 21: ↑18 and ↓3+15
Comments10

Хабр умирает?

Reading time2 min
Views108K
Я люблю писать тексты по мотивам проектов, которыми занимаюсь. За последний год я разместил на Хабре больше 20 постов. Меня постоянно удивляло, как мало толковых комментариев удаётся здесь получить. Просмотров много, а комментариев мало и большинство не по делу. Недавно я начал замечать, натыкаясь на старинные посты за 2012, 2013 годы, что в них обсуждение, как будто, более содержательное. Решил проверить это количественно. Скачал инфу по всем постам за все годы и построил несколько простых графиков. То что я увидел меня удивило и даже немного испугало. Решил разместить наблюдения здесь, чтобы проверить правильные ли я делаю выводы и всё ли учёл.

Для всех опубликованных на Хабре постов я собрал даты публикаций, число просмотров, число лайков и дислайков, число звёздочек и комментариев, список хабов и названия блогов компаний. В ходе прокачки узнал, что число плюсиков и минусиков может быть дробным и даже отрицательным, пост может быть опубликовал в блоги нескольких компаний и может не иметь автора. Если что, таблицу можно скачать из репозитория: github.com/alexanderkuk/analyze-habr/blob/master/data/posts.csv



Первым делом я посмотрел как менялось общее число постов со временем. Оно перестало расти в 2013 и немного падает с 2014, что уже немного тревожно:



Потом я построил такой же график для суммарного числа просмотров и испугался. С 2014 оно упало в 3.5 раза:


Это серьёзное утверждение, поэтому я решил свериться с Similarweb.
Читать дальше →
Total votes 331: ↑311 and ↓20+291
Comments802

Где и у кого учиться робототехнике, управлению большими данными, качественной разработке ПО

Reading time1 min
Views25K
Мы собрали в одном месте все созданные совместно с ПостНаукой краткие обучающие видеоматериалы от профессоров Университета Иннополис.


Если темы вам интересны, добро пожаловать под кат.
Смотреть видео
Total votes 18: ↑15 and ↓3+12
Comments7

Топ 6 оптимизаций для netty

Reading time5 min
Views26K
Всем привет. Эта статья продолжение 10к на ядро с конкретными примерами оптимизаций, которые были проделаны для повышения производительности сервера. С написания первой части прошло уже 5 мес и за это время нагрузка на наш продакшн сервер выросла с 500 рек-сек до 2000 с пиками до 5000 рек-сек. Благодаря netty, мы даже не заметили это повышение (разве что место на диске уходит быстрее).

Blynk load
(Не обращайте внимание на пики, это баги при деплое)

Эта статья будет полезна всем тем кто работает с netty или только начинает. Итак, поехали.

Нативный Epoll транспорт для Linux


Одна из ключевых оптимизаций, которую стоит использовать всем — это подключение нативного Epoll транспорта вместо реализации на java. Тем более, что с netty это означает добавить лишь 1 зависимость:

<dependency>
   <groupId>io.netty</groupId>
   <artifactId>netty-transport-native-epoll</artifactId>
   <version>${netty.version}</version>
   <classifier>linux-x86_64</classifier>
</dependency>

и автозаменой по коду осуществить замену следующих классов:

  • NioEventLoopGroup → EpollEventLoopGroup
  • NioEventLoop → EpollEventLoop
  • NioServerSocketChannel → EpollServerSocketChannel
  • NioSocketChannel → EpollSocketChannel

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

  • Метод selectedKeys() на каждый вызов создает новый HashSet
  • Итерация по этому множеству создает iterator
  • И ко всему прочему внутри метода selectedKeys() огромное количество блоков синхронизации

В моем конкретном случае я получил прирост производительности около 30%. Конечно же, эта оптимизация возможна только для Linux серверов.
Читать дальше →
Total votes 17: ↑16 and ↓1+15
Comments6

Что нам стоит LVM построить (принцип работы, производительность, Thin Provision)

Reading time4 min
Views32K
Не смотря на наличие нескольких статей на Хабре, про LVM2 и производительность Thin Provisioning, решил провести своё исследование, так как имеющиеся показались мне поверхностными.

Кому интересно, добро пожаловать под кат.
Читать дальше →
Total votes 14: ↑12 and ↓2+10
Comments7

Список ресурсов по машинному обучению. Часть 2

Reading time11 min
Views48K


Продолжим (1, 2) рассматривать тему машинного обучения. Вашему вниманию вторая часть (первая тут) адаптированной подборки полезных материалов.
Читать дальше →
Total votes 26: ↑24 and ↓2+22
Comments0

Сброс зависших RDP сессий

Reading time2 min
Views73K
Всем у кого в хозяйстве есть терминальные сервера на Windows приходится сталкиваться с зависшими сессиями.
Сессии частенько зависают, если пользователь просто закрыл окно терминала.
Естественно, все мы настраиваем параметры сброса сессий по времени и отключению пользователя, но бывает что сессии все равно не завершаются и тогда мы используем команды: qwinsta — просмотр сессий и rwinsta — сброс сессий
Абсолютно уверен что скриптик, который сам отслеживает и сбрасывет зависшие сессии, написали многие, но не выложили в сеть потому что это просто, я выложу для тех кто ищет и кому это нужно прямо сейчас:

Скрипт получает список сессий qwinsta, выбирает сессии со статусом Диск ("*ЁбЄ*" — это тоже «Диск», просто в кривой кодировке, добавлено на всякий случай) и rwinsta сбрасывает сесии.
В скриптике rwinsta — закомментирована, чтоб сессии сбрасывались раскомментируйте.
В текущем виде скрипт просто покажет вам зависшие сессии.
Читать дальше →
Total votes 7: ↑7 and ↓0+7
Comments8

Как в Spring logger получить

Reading time3 min
Views21K
Разрабатывая приложения используя IoC-контейнер Spring думаю каждый задумывался, а как же «правильнее и красивее» создать логгер. В данной публикации хочу привести несколько примеров решения данной задачи.

Решение 1


Получаем логгер напрямую через LoggerFactory:
@Component
public class MyBean {
    private static final Logger log = LoggerFactory.getLogger("application");
    ...
}

Данное решение является классическим, безусловно работающим, но нарушает саму идеологию IoC, ведь нам хочется, что бы работу по созданию логгера выполнил сам контейнер.
Читать дальше →
Total votes 18: ↑13 and ↓5+8
Comments38

Знакомство с Apache Spark

Reading time8 min
Views117K
Здравствуйте, уважаемые читатели!

Мы наконец-то приступаем к переводу серьезной книги о фреймворке Spark:



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

Читать дальше →
Total votes 21: ↑17 and ↓4+13
Comments8

Хабра-граф, -сообщества и куда же делась вся карма

Reading time7 min
Views29K

Вступление


Cегодня мы вместе с анализом графов, data mining, subgroup discovery и всеми веселыми штуками взглянем на Хабр. Весь код и данные прилагаются — каждый может взглянуть на них самостоятельно, легко повторить рассчеты из статьи и найти что-то интересное самостоятельно.




(это не просто картинка для привлечения внимания, а — граф связей ~45000 пользователей Хабра по тому, кто на кого подписан; размер вершины пропорционален числу подписчиков; все картинки кликабельны; подробности далее)



Обсуждаемые проблемы возникли, конечно же, далеко не вчера, но некоторые их аспекты кажутся мне достаточно новыми и поэтому достойными дискуссии, основанной на непредвзятых и репрезентативных данных. Например в комментариях этой статьи, увидел интересное утверждение:

Тут проблема в том, что на всем хабре за сегодня не насчитать больше 50-80 человек, которые вообще могут голосовать. У 90% пользователей карма просто ниже 5. Как итог оценивают комментарии и статьи только избранные. Это как жюри выходит такое.

И решил, что стоить его сформулировать в виде гипотезы и проверить:

Q1: Правда ли, что Хабр превратился в жюри-based сообщество, где два с половиной человека голосуют за статьи?

Вот в этой статье к нам вернулись "железные" Хабы и стало интересно, а как вообще представлены разные сообщества внутри Хабра? Формулируем в виде гипотезы:

Q2: Как сегментировано сообщество, или проще говоря сколько у нас здесь групп по интересам и соотвествуют ли они имеющимся хабам?

Последнее, но не менее интересное наблюдение, что активность на Хабре упала (по данным Хабра-пульса и моим субъективным наблюдениям), что даже решили ввести аккаунты "read & comment". Поэтому решил оценить активность сообщества и продумать, как информация о структуре сообщества может нам помочь:
Q3: Насколько активно сообщество и как нам может помочь структура внутренних групп?


За подробностями добро пожаловать под кат.

Структура статьи

Читать дальше →
Total votes 164: ↑162 and ↓2+160
Comments238

Social CRM.Сбор интереса пользователей Интернет

Reading time8 min
Views17K
Social CRMЭтой статьей я открываю цикл — описание работы Social CRM, т.е. программных продуктов, направленных на работу с интересом пользователей в социальных сетях. Как и другие CRM, эти продукты помогут повысить результативность работы отделов продаж и маркетинга, позволят осуществлять четкий контроль качества работы персонала, а также повысят уровень автоматизации работы сотрудников.

Я достаточно долгое время занимаюсь внедрением CRM-систем, и практически в каждом проекте возникает задача сбора интереса потенциальных клиентов к компании, к ее продуктам или услугам. Сейчас практически каждая компания имеет какие-то страницы в социальных сетях, формы обратной связи, комментариев, обсуждения на сайте и т.д. И возникает вопрос, как собрать все эти данные, если компания имеет несколько площадок, например, сайт, группа Вконтакте, в Facebook, а с клиентами работают несколько менеджеров.

Сегодня уже появились первые программные продукты под названием Social CRM, т.е. CRM-системы, предназначенные для работы с социальными сетями и с активностью пользователей в них. Большинство из них англоязычные, и автоматизация работы в них большей частью направлена на работу с Facebook и Twitter. С другой стороны, работу с интересом пользователей вполне реально реализовать в рамках CRM-системы, которую вы применяете для работы с лидами и клиентами. А потому начать автоматизацию и сбор интересов пользователей социальных сетей можно в любой момент времени с минимальными затратами.
Читать дальше →
Total votes 24: ↑17 and ↓7+10
Comments3

Реализуем аналог Apple iCloud Voicemail c использованием свободных грамматик от Яндекса

Reading time5 min
Views9.1K

Введение:


Некоторое время назад всеми уважаемая яблочная компания анонсировала тестирование нового сервиса Apple iCloud Voicemail.



Ну и что же в этом такого, спросите вы. Давайте разберемся.
Читать дальше →
Total votes 16: ↑13 and ↓3+10
Comments6

Обработка запросов в Oracle и PostgreSQL: следствия одного решения

Reading time21 min
Views33K
Обработка запросов SQL и  в Оракле, и в Постгресе имеет много общего. Так или иначе, надо выполнить синтаксический разбор, проверить семантику (для чего потребуется метаинформация, и не важно, называется ли это «словарь данных» или «системный каталог»), выполнить какие-то преобразования, построить оптимальный план выполнения (в обеих системах основанный на стоимости, а следовательно требующий заранее собранной статистики).

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

В статье мы попытаемся проследить, как из-за разницы в одном архитектурном решении логически следует совершенно разная идеология работы в запросами в двух СУБД.

Приведенные примеры (которые выполнялись на версиях Oracle 11.2 XE и PostgreSQL 9.4) содержат время выполнения запросов. Нас интересуют только относительные величины: во сколько раз изменилось время выполнения после внесения в запрос тех или иных изменений. При этом абсолютные цифры могут отличаться на порядки в зависимости от аппаратуры, нагрузки и настроек. Чтобы не давать повод для бессмысленных выводов на их основании, все абсолютные значения в статье отмасштабированы так, чтобы один из запросов составлял в обеих системах 10 секунд.
Читать дальше →
Total votes 24: ↑24 and ↓0+24
Comments12

Анализ логов веб-сервера с помощью GoAccess

Reading time1 min
Views30K
image
Не так давно мы натолкнулись на утилиту GoAccess, которая позволяет анализировать логи веб серверов и строить отчеты. Утилита написана на C и имеется почти во всех репозиториях дистрибутивов Linux. Адрес проекта.

В данной заметке не будет ничего революционного, лишь краткое HOWTO, большую часть из которого вы сможете найти в документации.
Читать дальше →
Total votes 16: ↑14 and ↓2+12
Comments7

Atlassian Plugins: погружение в Active Objects и Plugin Settings

Reading time8 min
Views12K
Привет, Хабр! Я работаю в Mail.Ru Group в отделе разработки плагинов JIRA. Плагины позволяют расширять или изменять функциональность приложения. Например, с их помощью можно создавать новые типы полей, гаджеты, JQL-запросы, панели с различной информацией, графики и многое другое.

Большинство наших плагинов требуют хранения дополнительных данных, которые они используют. В этой статье я хочу рассказать, как мы решаем эту задачу. Существует два основных способа хранения таких данных: Active Objects и Plugin Settings. Рассмотрим их поподробнее и разберемся в каком случае лучше и удобнее использовать один, а в каком — другой.

image
Читать дальше →
Total votes 17: ↑14 and ↓3+11
Comments2

Настойка можжевельника: готовим Juniper SRX. Часть 3: Virtual Routers

Reading time6 min
Views20K
juniper — можжевельник (англ.)

Продолжаем готовить настойку из можжевельника. О том, как мы начинали, можно почитать здесь и здесь. Сегодня же немного потрогаем такую удобную штуку, как Virtual Routers, и подумаем, как ее применить с наибольшей пользой.

image

Содержание:

Часть 1: Знакомство
Часть 2: IPSec
Часть 3: Virtual Routers

В Juniper есть тип сущностей Routing Instance, предназначенный для манипуляций с трафиком (маршрутизации и инкапсуляции). RI позволяют «разделить» один роутер на несколько поменьше, при этом каждый instance будет обрабатывать трафик «по-своему», независимо от других и с разными возможностями. Это полезно для организации всевозможных VPN, когда нужно изолировать друг от друга нескольких клиентов и разрулить их по разным правилам. При этом информацией о VPN можно обмениваться с другими роутерами (например, при организации MPLS VPN).
Читать дальше →
Total votes 8: ↑8 and ↓0+8
Comments0
1
23 ...

Information

Rating
Does not participate
Registered
Activity