В данной заметке я хочу показать каким образом можно определять и устранять утечки памяти в Java на примере из моей повседневной работы. Мы не будем здесь рассматривать возможные причины появления утечек, об этом будет отдельная статья, так как тема достаточно обширная. Стоит заметить, что речь пойдет о диагностике именно Heap Memory, об утечках в других областях памяти будет отдельная статья.
Пользователь
7 способов использовать groupingBy в Stream API
2 min
136KTutorial
Новичкам зачастую трудно представить выгоду от использования Stream API заместо обычных циклов,
под катом несколько примеров, которые помогут вам существенно сжать ваш раздутый код
+25
Самое опасное слово в разработке программного обеспечения
2 min
37KTranslation
«Просто размести это где-нибудь на сервере».
«Просто добавь кнопку “Избранного” справа от элемента».
«Просто добавь [вставьте здесь сложную опцию] в экране настроек».
Использование слова «просто» указывает на множество сделанных допущений. Несколько месяцев назад Брэд Фрост поделился некоторыми мыслями, какое отношение к знанию имеет это слово.
«Просто добавь кнопку “Избранного” справа от элемента».
«Просто добавь [вставьте здесь сложную опцию] в экране настроек».
Использование слова «просто» указывает на множество сделанных допущений. Несколько месяцев назад Брэд Фрост поделился некоторыми мыслями, какое отношение к знанию имеет это слово.
Слово «просто» заставляет меня чувствовать себя идиотом. «Просто» предполагает, что у меня есть определённый бэкграунд, что я изучал определённые предметы в университете, что я хорошо разбираюсь в определённых технологиях и прочитал все правильные книги, статьи и справочные ресурсы.
+48
Максимально просто про перебор комбинаций в реальных бизнес-задачах
4 min
10KЕсли начать искать материал про перебор комбинаций, возникает масса примеров как перебрать все сочетания всех букв или всех цифр. Но как создать все сочетания элементов матрицы, в которой заранее неизвестна размерность, не углубляясь в Иосифа Романовского и его «Дискретный Анализ», такого материала я не нашел, поэтому и решил написать его здесь. Вдруг кому-то понадобится.
+6
43 полезных сервиса для управления проектами. Без эпитетов
13 min
692KДано: собственные и аутсорс-проекты, некоторые участники работают удаленно.
Требуется: необходимо быстро назначать задачи исполнителям, планировать спринты, трекать выполнение и статусы, визуализировать процессы и делиться результатами с заказчиками.
Выбирая для себя сервисы, с помощью которых мы могли бы работать над проектами в несколько раз эффективнее, у нас сложился целый список различных сервисов таск- и тайм-менеджмента, для управления и планирования проектов, командной работы, построения онлайн диаграмм и т.д.
Изначально сервисов было более 100, но постепенно список сокращался, и мы остановили наш выбор на трех, удовлетворяющих вместе наши нужды лучше всего: Jira, Slack и GanttPro. Но, если вдруг эти сервисы не помогут вам в планировании задач и работы с командой, делюсь с вами полным списком:
Требуется: необходимо быстро назначать задачи исполнителям, планировать спринты, трекать выполнение и статусы, визуализировать процессы и делиться результатами с заказчиками.
Выбирая для себя сервисы, с помощью которых мы могли бы работать над проектами в несколько раз эффективнее, у нас сложился целый список различных сервисов таск- и тайм-менеджмента, для управления и планирования проектов, командной работы, построения онлайн диаграмм и т.д.
Изначально сервисов было более 100, но постепенно список сокращался, и мы остановили наш выбор на трех, удовлетворяющих вместе наши нужды лучше всего: Jira, Slack и GanttPro. Но, если вдруг эти сервисы не помогут вам в планировании задач и работы с командой, делюсь с вами полным списком:
Процесс поиска очень часто усложняется тем, что все сервисы, как один, пишут «Лучший сервис, помогающий превратить ваши идеи в реальность и реализовать ваши проекты. Сегодня.». Так, а что вы делаете-то? Поэтому в этом списке без лишних эпитетов, только что какой сервис умеет. :)
+26
Основы регулярных выражений в JavaScript
10 min
53KTutorial
Translation
Если вы иногда поглядываете на регулярные выражения, но всё никак не решаетесь их освоить, думая, что всё это невероятно сложно — знайте — вы не одиноки. Для любого, кто не понимает, что такое регулярные выражения, или не разбирается в том, как они работают, они выглядят как совершенная бессмыслица.
Мощная картинка для привлечения внимания :) Осторожно, может засосать!
Но, на самом деле, регулярные выражения — это мощный инструмент, который может помочь вам сэкономить уйму времени. В этом материале мы рассмотрим основы регулярных выражений в JavaScript.
Мощная картинка для привлечения внимания :) Осторожно, может засосать!
Но, на самом деле, регулярные выражения — это мощный инструмент, который может помочь вам сэкономить уйму времени. В этом материале мы рассмотрим основы регулярных выражений в JavaScript.
+22
Импортируем DXF чертеж в программе на Java, наступая на все грабли этого «простого» формата
7 min
18KAutoCAD и подобные ему САПР давно уже стали стандартом в области проектирования, и неудивительно что таким же стандартом стали широко используемые в них форматы файлов DWG/DXF. Так что если вы разрабатываете какое-то решение для архитекторов и проектировщиков, то умение работать с этими форматами (ну или хотя бы с одним из них) — must have фича вашего продукта.
В рамках своего вебсервиса для симуляции движения пешеходов пришлось и мне озаботиться импортом генпланов в этих форматах. Раньше с САПР я дела не имел, поэтому наивно думал «да что там, подумаешь — еще один формат чертежей, линии и многоугольники, что там может быть сложного?». Но в процессе работы выяснилось что сложного там может быть достаточно, некоторые нюансы вполне похожи на древние костыли, тянущиеся из глубин веков, при этом многие вещи толком не документированы в спецификациях самого формата (например работа с блоками или с кривыми). Видимо они считаются очевидными для любого чертежника, но что делать если вы родом из другой области, и таких знаний не имеете?
В общем под катом — перечисление граблей и решений, которые не удалось нагуглить и пришлось добывать полуночными бдениями над чертежами.
В рамках своего вебсервиса для симуляции движения пешеходов пришлось и мне озаботиться импортом генпланов в этих форматах. Раньше с САПР я дела не имел, поэтому наивно думал «да что там, подумаешь — еще один формат чертежей, линии и многоугольники, что там может быть сложного?». Но в процессе работы выяснилось что сложного там может быть достаточно, некоторые нюансы вполне похожи на древние костыли, тянущиеся из глубин веков, при этом многие вещи толком не документированы в спецификациях самого формата (например работа с блоками или с кривыми). Видимо они считаются очевидными для любого чертежника, но что делать если вы родом из другой области, и таких знаний не имеете?
В общем под катом — перечисление граблей и решений, которые не удалось нагуглить и пришлось добывать полуночными бдениями над чертежами.
+19
Подключаем принт-сервер
4 min
76KTutorial
Сегодня мы протестируем принт-серверы D-Link, подключенные к принтеру OKI.
Перед пользователями часто встает вопрос подключения нескольких принтеров к одной локальной сети. Это просто необходимо для организации нормальной работы в офисах. Кроме того, принт-серверы крайне полезны и для домашнего использования. Когда принтер подключен к одному компьютеру, есть риск, что его работоспособность снизится. Кроме того, если компьютер выйдет из строя – печать прекратиться. Принт-сервер же позволит подключиться к принтеру с других устройств.
0
Печатаем по сети на любом Windows-принтере
3 min
186KЕсли у вас есть принтер, подключенный к Windows машине, то настроить его для сетевой печати на Mac достаточно просто, даже если драйверов для OSX для этого принтера не существует.
Для этого нужны три вещи:
Для этого нужны три вещи:
- Принтер, исправно работающий на Windows машине
- Ghostscript — эмулятор PostScript принтера
- RedMon — Redirection Port Monitor
+5
Углубляясь в Graphics2D
32 min
77KДобрый день, Хабражители!
Сегодня я опять постараюсь привлечь Ваше внимание к некоторым сторонам и тонкостям работы с графикой в Java. Я уже кратко описал в предыдущей статье некоторые доступные средства и способы создания компонентов и UI, но это лишь вершина айсберга. Именно поэтому я хочу уделить отдельное внимание (и статью) именно работе с графикой. Естественно имеется в виду Graphics2D – Java 3D это большая отдельная тема (возможно о ней еще пойдет речь в дальнейшем, но не сегодня).
Итак, из предыдущей статьи Вам уже должны быть известны некоторые основы построения компонентов — постараемся расширить эти знания.
Начнем с того, что если рассматривать любой компонент с точки зрения MVC – он состоит из 3ех частей:
Model – модель, которая хранит в себе данные о состоянии компонента и на основе которой строится внешний вид
View – непосредственно визуальное отображения компонента
Controller – отвечает за управление компонентом (события от клавиатуры, мыши и прочих устройств ввода)
Фактически, все стандартные компоненты Swing построены по паттерну MVC. К примеру в JButton — ButtonModel отвечает за поведение и состояние кнопки (Controller и Model), а ButtonUI в свою очередь за внешнее её представление (View). В итоге на долю самого класс JButton практически ничего не остаётся. Речь пойдет по большей части о реализации внешнего представления компонентов (View), и если уточнять — о Graphics2D, на основе которого, фактически, рисуется весь интерфейс.
Не буду спорить, что на данную тему есть множество различного материала, но он настолько раздроблен и раскидан по просторам сети, что мне кажется не лишним собрать всё в одном месте и последовательно изложить.
Сегодня я опять постараюсь привлечь Ваше внимание к некоторым сторонам и тонкостям работы с графикой в Java. Я уже кратко описал в предыдущей статье некоторые доступные средства и способы создания компонентов и UI, но это лишь вершина айсберга. Именно поэтому я хочу уделить отдельное внимание (и статью) именно работе с графикой. Естественно имеется в виду Graphics2D – Java 3D это большая отдельная тема (возможно о ней еще пойдет речь в дальнейшем, но не сегодня).
Итак, из предыдущей статьи Вам уже должны быть известны некоторые основы построения компонентов — постараемся расширить эти знания.
Начнем с того, что если рассматривать любой компонент с точки зрения MVC – он состоит из 3ех частей:
Model – модель, которая хранит в себе данные о состоянии компонента и на основе которой строится внешний вид
View – непосредственно визуальное отображения компонента
Controller – отвечает за управление компонентом (события от клавиатуры, мыши и прочих устройств ввода)
Фактически, все стандартные компоненты Swing построены по паттерну MVC. К примеру в JButton — ButtonModel отвечает за поведение и состояние кнопки (Controller и Model), а ButtonUI в свою очередь за внешнее её представление (View). В итоге на долю самого класс JButton практически ничего не остаётся. Речь пойдет по большей части о реализации внешнего представления компонентов (View), и если уточнять — о Graphics2D, на основе которого, фактически, рисуется весь интерфейс.
Не буду спорить, что на данную тему есть множество различного материала, но он настолько раздроблен и раскидан по просторам сети, что мне кажется не лишним собрать всё в одном месте и последовательно изложить.
+74
Символьное решение задач нелинейного программирования
5 min
13KВведение
С появлением библиотеки SymPy для решения математических задач появились дополнительные возможности, позволяющие отображать результаты в символьной форме.
Подробное описание использования символьных вычислений приведено в публикации [1] под названием «Введение в научный Python» в разделе «Символьные вычисления».
Расширение области применения символьных вычислений на решение отдельных задач нелинейного программирования надеюсь будет способствовать популяризации Python в том числе и как альтернатива дорогостоящих математических пакетов.
Постановка задачи
Привести примеры символьных вычислений для безусловного экстремума дифференцируемой нелинейной функции цели с определением достаточных условий существования экстремума по матрице Гессе. Рассмотреть так же задачу условного нелинейного программирования с линейными ограничениями при помощи множетелей Лагранжа.
Для того, чтобы определиться с терминологией приведу следующее определение [2]. Задачей нелинейного программирования (задачей НП) называется задача нахождения максимума (минимума) нелинейной функции многих переменных, когда на переменные имеются (не имеются) ограничения типа равенств или неравенств.
Символьное вычисление безусловного экстремума дифференцируемой функции трёх переменных
Несмотря на сложность решаемых задач при символьном решении всё становится простым и наглядным. Рассмотрим листинг первого примера.
+8
Принт-сервер на linux с интеграцией в AD
12 min
49KВ данной статье я хотел поселиться опытом по созданию принт-сервера на базе linux с интеграцией в AD. Под интеграцией понимается ввод linux сервера в домен Windows и расшаривание Cups принтеров через Samba, включая драйвера принтеров. Возможно коряво выразился, но если проще, то это выглядит так — для того, чтобы установить принтер пользователю Windows, достаточно нажать«установить новый принтер», вывести список принтеров в AD и клацнуть на нужный принтер — принтер установится автоматически с установкой всех необходимых драйверов. При этом, все права на управление, доступ, печать подтянутся из AD.
Часть 1. Тонкости настроек
Исходные данные
- Домен контроллер — Windows Server 2008 R2 (AD, DNS, DHCP) IP — 10.10.15.31
- Имя домена — INITIAL
- Принт сервер — ОС linux (я использую OpenSUSE 13.2 x64, kernel 3.16.7-42-default) IP — 10.10.15.11
- kerberos 1.12.2-24.1
- winbind 4.2.4-40.1
- LDAP 2.4.39-8.9.1
- Samba 4.2.4-40.1
- CUPS 1.5.4-21.9.1
+26
Попиксельная заливка экрана в Wolfenstein 3D
4 min
42KTranslation
В коде id Software порой встречаются бесподобные жемчужины. Самая знаменитая — это, конечно, 0x5f3759df, удостоившаяся даже комикса на xkcd. Здесь же речь пойдёт о заливке экрана: пиксели закрашиваются по одному в случайном порядке, без повторов. Как это сделано?
+150
Резервное копирование не «для галочки». Часть первая: мониторинг, бэкапы баз данных и реплики
6 min
23KСоздание скриптов резервного копирования всегда представляется простой, нудной и очень обычной задачей. Напиши скрипт, поставь его в крон, проверь, что он сработал — казалось бы все, да? Но это только верхушка айсберга, а под водой скрывается огромное количество проблем. Все помнят недавную проблему на gitlab, когда оказалось, что операция по удалению данных была проведена не на резервном, а на основном сервере БД, бэкапы оказались размером в 0 байт, бэкапы в S3 недоступны, но, на счастье, резервная копия оказалась на одном из других серверов.
Как быть уверенным, что резервное копирование действительно работает? И что даже если скрипты работают, то данные в архивах есть? Что бэкапится именно то, что нужно? По нашей статистике, проблемы с резервным копированием происходят раз в 21 день. Если вы не проверяли ваши бэкапы дольше этого времени — возможно, у вас есть проблемы. В посте мы расскажем о своем опыте по созданию системы резервного копирования в гетерогенной инфраструктуре из 2000 машин, 20 терабайт ежедневных бэкапов самых разных систем, проблемах, которые мы встречали на своем пути, и как мы их решаем.
Как быть уверенным, что резервное копирование действительно работает? И что даже если скрипты работают, то данные в архивах есть? Что бэкапится именно то, что нужно? По нашей статистике, проблемы с резервным копированием происходят раз в 21 день. Если вы не проверяли ваши бэкапы дольше этого времени — возможно, у вас есть проблемы. В посте мы расскажем о своем опыте по созданию системы резервного копирования в гетерогенной инфраструктуре из 2000 машин, 20 терабайт ежедневных бэкапов самых разных систем, проблемах, которые мы встречали на своем пути, и как мы их решаем.
+23
Улучшаем интерфейс Java-приложения
27 min
100KTutorial
Добрый день, Хабражитель!
Достаточно много различной раздробленной информации существует на тему работы со Swing и графикой в просторах интернета, а также на тему интерфейсов Java-приложений. Кто-то твердит о том, что Java морально устарела и десктоп-приложения на Java не имеет смысла писать, кто-то с пеной у рта доказывает обратное. В то же время работа идет, приложения пишутся и встают очередные проблемы. В предыдущей статье я уже привел небольшой список полезных библиотек для исключительных случаев, но нередко бывает так, что никакая сторонняя библиотека не позволяет сделать то, что Вам нужно. Именно в такой момент стоит задуматься о возможной необходимости написания своих компонентов.
Итак, в данном посте я постарался изложить самые важные и значимые на мой взгляд моменты по работе со Swing и графикой — как создавать компоненты, как стилизовать интерфейс, чего делать не стоит и многое другое…
Достаточно много различной раздробленной информации существует на тему работы со Swing и графикой в просторах интернета, а также на тему интерфейсов Java-приложений. Кто-то твердит о том, что Java морально устарела и десктоп-приложения на Java не имеет смысла писать, кто-то с пеной у рта доказывает обратное. В то же время работа идет, приложения пишутся и встают очередные проблемы. В предыдущей статье я уже привел небольшой список полезных библиотек для исключительных случаев, но нередко бывает так, что никакая сторонняя библиотека не позволяет сделать то, что Вам нужно. Именно в такой момент стоит задуматься о возможной необходимости написания своих компонентов.
Итак, в данном посте я постарался изложить самые важные и значимые на мой взгляд моменты по работе со Swing и графикой — как создавать компоненты, как стилизовать интерфейс, чего делать не стоит и многое другое…
+108
Генерация документов — взгляд изнутри
3 min
4.9KСоздание модуля генерации документов только на первый взгляд может показаться делом простым. На самом деле, чтобы создать такой модуль, надо решить несколько проблем, без решения которых его реализация будет неполноценной. Функционал генератора документов должен уметь решать проблемы, идущие в виде требований из реальной жизни. Рассмотрим одну из множества проблем.
+5
Swing. Десять полезных простых вещей
4 min
72KХочу поделиться недавним опытом разработки апплетов на Swing и рассказать про подводные камни, приемы найденные и использованные в процессе работы.
+24
Information
- Rating
- Does not participate
- Location
- Витебск, Витебская обл., Беларусь
- Date of birth
- Registered
- Activity