Pull to refresh
2
0

Пользователь

Send message

Groovy как скриптовый язык и DSL для Java

Reading time8 min
Views28K

Зачем?


При разработке разного рода ПО, например, задач мониторинга или обслуживания, я сталкиваюсь с необходимостью поддержки в программе выполнения сценариев, описывающих или выполняющих некоторый набор действий. И специфика такова, что добавление или изменение таких сценариев в ПО не должно требовать пересборки или перезапуска ПО.

Наверное, самыми простыми примерами таких сценариев, с которыми все сталкивались в том или ином виде, могут служить обычные пакетные файлы — bat или sh.
Читать дальше →
Total votes 16: ↑15 and ↓1+14
Comments3

Обратная сторона Open Source-славы: как угрожают автору curl

Reading time6 min
Views75K

Прим. перев.: уникальная история, что всколыхнула интернет в эти дни, показывает неожиданную сторону того, что могут «заслужить» авторы самых популярных Open Source-проектов. Ниже представлен перевод недавней заметки из блога шведского программиста Daniel Stenberg — оригинального автора и главного разработчика curl, обладателя премии Polhem Prize (вручается в Швеции за выдающиеся инженерные достижения).

Как вам, наверное, известно, в своем блоге я публикую забавные электронные письма, которые периодически приходят мне на адрес. Ну, знаете, когда мне пишут о проблемах с каким-то своим устройством (вроде автомобиля), потому что мой email где-то там засветился.

Мне иногда советуют завести новый адрес или указать другой в файле лицензии к curl, но, откровенно говоря, все эти странные письма ни разу не доставляли проблем, а лишь служили очередным напоминанием о непростых вызовах, которые ставит перед людьми современная жизнь, зацикленная на технологиях. Ну и, конечно, всегда забавно узнавать, где еще можно встретить curl.

Увы, не все эти письма забавны.

Читать далее
Total votes 138: ↑128 and ↓10+118
Comments154

Двойная бухгалтерская запись в реляционной БД

Reading time9 min
Views19K

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


Разобраться и избежать кучи граблей в этом деле мне помогла данная статья. При этом информации по теме "как сделать свою платежную систему" довольно мало, а в учебниках по бухучету программисту сходу разобраться не так просто (и очень нудно). Надеюсь, этот материал окажется полезным тем, кто только собирается что-то такое делать.


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


Введение


Многие компьютерные системы, использующие реляционные БД, хранят в них какую-то финансовую информацию о балансах и транзакциях. При этом при проектировании и разработке такой БД часто встает вопрос, а как именно хранить эту информацию. Обычно выбор стоит между дешевой "простой записью" и более сложной "двойной записью".



Лука Пачоли, автор самой старой (15 век) дошедшей до нас книги с описанием принципов двойной записи


В системе с "простой записью" числовые значения записываются только один раз. В системе с "двойной записью" каждое значение записывается дважды, как кредит (положительное значение) и как дебет (отрицательное значение). При этом есть набор правил, определяющих связь между этими значениями. Эти правила вам легко опишет любой опытный бухгалтер, хотя он может и не представлять, как именно они могут быть представлены в реляционной БД.


Основные правила таковы:

Читать дальше →
Total votes 26: ↑23 and ↓3+20
Comments50

Пионеры новых технологий: Вадим Арцев рассказал, как перестал быть незрячим

Reading time4 min
Views16K


В пятницу 28 июня первые пользователи технологии vOICe vision встретились со слабовидящими людьми, чтобы рассказать о новом способе восприятия пространства, которому они научились благодаря сенсорному замещению.

Трое молодых людей первыми в России овладели навыками Звукового Зрения и смогли вновь видеть мир, оставаясь слепыми. Вадим, Руслан и Ислам – так зовут основателей и первых членов «Клуба Звукового Зрения». У них разные взгляды на жизнь и разные истории. Но то, что их объединяет заметно каждому.

Окружающий мир за них «видит» футуристическое устройство на глазах, отдалённо напоминающее очки виртуальной реальности. Оно фиксирует пространство вокруг с помощью камеры и в буквальном смысле переводит изображение в звуковую дорожку, рисуя окружающую «картинку» уже в воображении ребят.

Технология vOICe vision разработана с одной целью – научить незрячих людей видеть. И участники клуба уверены, что это возможно. В разной степени каждый из них уже научился это делать.
Читать дальше →
Total votes 68: ↑62 and ↓6+56
Comments52

30+ вопросов о служебных и неслужебных программах

Reading time16 min
Views7.7K

Всем привет!


Тут недавно был спор о правах на компьютерную программу, о котором достаточно много говорили публично, и в котором я с коллегами принял некоторое участие. В результате возникло большое количество вопросов о том, как такое могло случиться, как себя вести, чтобы такого не было, и т. п. Причем вопросы возникли как со стороны условных «работников»-программистов, так и со стороны «работодателей». И это несмотря на то, что на Хабре довольно много хороших публикаций на эту тему, например, вот.


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

Читать дальше →
Total votes 16: ↑16 and ↓0+16
Comments11

Как мы сломали старую хибару и построили на ее месте небоскреб

Reading time9 min
Views4.4K
Зураб Белый, руководитель группы, практика Java, рассказывает свою историю работы в проекте для одной крупной компании и делится накопленным опытом.

Как я заселился…


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

Расскажу немного о проекте в целом. Это официальный портал одной крупной компании с общей информацией, новостями, акциям и другим контентом. Все маркетинговые рассылки содержат ссылки на те или иные страницы сайта, т. е. нагрузка стабильно средняя, но в отдельные моменты времени может достигать высоких значений. Особое внимание требует стабильность и доступность веб-приложения — каждая минута простоя сервиса ведет к большим убыткам у заказчика.
Читать дальше →
Total votes 13: ↑10 and ↓3+7
Comments5

Введение в Spring, или что делать, если по всему проекту @Autowired и @Component, а вы не понимаете, что это

Reading time6 min
Views112K
Приветствую тебя, Хабр!

Эта статья будет полезна тем, кто уже начал изучать Java и даже успел добиться некоторых успехов в понимании Java Core, и вот услышал слово Spring. И, возможно, даже не один раз: знание Spring Framework, как минимум, фигурирует в описаниях множества вакансий для джавистов. Эта статья поможет вам взобраться на самую первую ступеньку: понять общую идею столь популярного фреймворка.

Начнем издалека. Существует такое понятие как Inversion of Control, по-русски – Инверсия управления, сокращенно – IoC. IoC — один из принципов, приближающий наш код к слабосвязанности. IoC — это делегирование части наших обязанностей внешнему компоненту.

Существуют разные реализации IoC подхода, нас интересует одна из них — Dependency Injection, внедрение зависимостей. Что это такое, название говорит само за себя, так что раскрыть ее я постараюсь на примере. Мы пишем приложение, автоматизирующее работу сети магазинов. Есть классы Shop (магазин) и Seller (продавец). У класса Seller имеется поле типа Shop — магазин, в котором работает продавец. Вот мы и столкнулись с зависимостью: Seller зависит от Shop. Теперь задумаемся, как в объект Seller попадет объект Shop? Есть варианты:

  • Внедрить его через конструктор и сразу, при создании продавца, указывать магазин, в котором он работает:

public class Seller {
    
    private Shop shop;

    public Seller(Shop shop) {
        this.shop = shop;
    }
}

  • Создать сеттер и с помощью его вызова устанавливать продавцу магазин:

public class Seller {

    private Shop shop;

    public void setShop(Shop shop) {
        this.shop = shop;
    }
}

Перечисленные два способа — это реализация Dependency Injection (но пока еще это не IoC). И, наконец, мы подобрались к спрингу: он предоставляет еще один способ внедрять зависимости (а тут уже IoC).
Читать дальше →
Total votes 19: ↑14 and ↓5+9
Comments11

Умный парсер числа, записанного прописью

Reading time10 min
Views29K


Пролог


Добрый день, уважаемые читатели. В данной статье я расскажу о том, как распарсить число, записанное прописью на русском языке.


Умным данный парсер делает возможность извлечения чисел из текста с ошибками, допущенными в результате некорректного ввода или в результате оптического распознавания текста из изображения (OCR).


Для ленивых:
Ссылка на проект github: ссылка.


Читать дальше →
Total votes 137: ↑136 and ↓1+135
Comments59

Шпаргалки по безопасности: REST

Reading time5 min
Views26K


REST — чрезвычайно популярная архитектура веб-приложений. Для вызова функций на сервере используются обычные HTTP-запросы с задаваемыми параметрами (для структуризации параметров обычно используют JSON или XML), при этом, строгого стандарта для REST-архитектуры не существует, что добавляет ей гибкости (и, конечно, немного хаоса).
Читать дальше →
Total votes 27: ↑23 and ↓4+19
Comments9

Как я создал систему установки принтеров на работе

Reading time9 min
Views43K
image

Здравствуй, уважаемый %user%. Сегодня я расскажу о том, как я написал пользовательскую систему для обеспечения возможности пользователям самим устанавливать требуемые для них принтеры. Немного расскажу о месте где я работаю, чтобы было понятно зачем я это сделал. Заранее скажу, что о существовании компонента роли в Windows Server 2012 R2, которая даёт возможность установить принтер с браузера я знал. Но мне хотелось изобрести свой велосипед, да и ограничения здесь будут наверное в фантазии. Кому стало интересно добро пожаловать под кат. Для не терпеливых сразу скажу, что скриншоты в конце статьи.
Читать дальше
Total votes 39: ↑37 and ↓2+35
Comments85

Логирование HTTP запросов в Spring Boot с использованием Бобины

Reading time3 min
Views13K

Приветствую, дорогие друзья!


Сегодня я хочу продемонстрировать потрясающий пример того, как Бобина может помочь в очень распространённой ситуации — логирование HTTP запросов и ответов в Spring Boot.


Даже больше! Мы будем логировать только сообщения HTTP в отдельные файлы.

Читать дальше →
Total votes 12: ↑10 and ↓2+8
Comments3

Умный дом / Обновления в Lazurite

Reading time3 min
Views8.8K

Всем добрый день! Продолжаю развивать свой проект Lazurite. За последние несколько месяцев было проведено много работы по оптимизации и улучшению программы. Об основных изменениях хочу рассказать вам. Прошлая публикация.


Читать дальше →
Total votes 11: ↑10 and ↓1+9
Comments18

Chrome Audit на 500: Часть 1. Лендинг

Reading time16 min
Views22K
В инструментах разработчика браузера хром есть вкладка «Audit». На ней расположился инструмент который называется Lighthouse, служит он для анализа насколько хорошо сделано веб приложение.

image

Недавно я решил протестировать одно приложение и ужаснулся результатам. Сразу по нескольким разделам оценка находилась в красной зоне. Я принялся изучать что же с моим приложением не то. И нашел в результатах анализа большой список очень полезных рекомендаций, выполнил их и получил 500 баллов. В результате приложение стало запускаться значительно быстрее, а я пересмотрел несколько концепций относительно метода построения приложений. А в этой статье я хочу поделиться самыми интересными решениями к которым я пришел.
Читать дальше →
Total votes 48: ↑43 and ↓5+38
Comments39

Готовим полнотекстовый поиск в Postgres. Часть 2

Reading time7 min
Views20K

В прошлой статье мы оптимизировали поиск в PostgreSQL стандартными средствами. В этой статье мы продолжим оптимизацию с помощью индекса RUM и проанализируем его плюсы и минусы в сравнении с GIN.

Читать дальше →
Total votes 36: ↑36 and ↓0+36
Comments4

Spring Data JPA: что такое хорошо, и что такое плохо

Reading time13 min
Views89K

Крошка-сын к отцу пришел
И спросила кроха
— Что такое хорошо
и что такое плохо

Владимир Маяковский


Эта статья о Spring Data JPA, а именно в подводных граблях, встретившихся на моём пути, ну и конечно же немного о производительности.

Читать дальше →
Total votes 23: ↑22 and ↓1+21
Comments12

Julia, Градиентный спуск и симплекс метод

Reading time10 min
Views14K


Продолжаем знакомство с методами многомерной оптимизации.


Далее предложена реализация метода наискорейшего спуска с анализом скорости выполнения, а также имплементация метода Нелдера-Мида средствами языка Julia и C++.

Читать дальше →
Total votes 24: ↑24 and ↓0+24
Comments8

Клубок единомышленников

Reading time11 min
Views16K
Как выживать в турбулентной корпоративной среде. Только для теоретического изучения.

Не знаю, как вам, а мне приходилось работать в достаточно турбулентной корпоративной среде, и не один раз.

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

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

Не скажу, что я стал прям акулой – такой цели не было. Но я нашел некое срединное состояние, когда выживание стало не только возможным, но и несложным, и даже прикольным. Как игра.

Попробую сформулировать, тезисно, основные правила, которые я для себя вынес, может они кому-то пригодятся.

На полное раскрытие темы не претендую, высших истин не открываю, обобщений старался избегать, ничего никому не навязываю.
Читать дальше →
Total votes 44: ↑37 and ↓7+30
Comments32

Написание плагина к Redmine

Reading time8 min
Views18K
Про систему управления проектами Redmine наверное многие слышали, а некоторые возможно даже использовали в своей работе. Redmine — довольно гибкая кроссплатформенная система, написанная на известном фреймворке Ruby on Rails. Как и большинство подобных систем, Redmine позволяет расширять свою функциональность за счет сторонних плагинов. В данный момент уже имеется более тысячи таких плагинов на разный вкус и цвет. Я хочу рассказать об одном из них и о том как написать плагин к Redmine на его примере.
Читать дальше →
Total votes 38: ↑38 and ↓0+38
Comments16

Be a security ninja: secret level

Reading time2 min
Views15K


Информационная безопасность — одна из дисциплин, набирающих бешеную популярность в последние годы. Мы решили помочь всем желающим и организовали цикл бесплатных вебинаров по ИБ. Сегодня мы публикуем видеозаписи заключительного цикла вебинаров, посвященных практической информационной безопасности.
Total votes 35: ↑32 and ↓3+29
Comments0

Валидация в Java-приложениях

Reading time16 min
Views44K

Этот текст посвящен различным подходам к валидации данных: на какие подводные камни может наткнуться проект и какими методами и технологиями стоит руководствоваться при валидации данных в Java-приложениях.


Validation


Я часто видел проекты, создатели которых вообще не утруждались выбором подхода к валидации данных. Команды работали над проектом под невероятным давлением в виде сроков и размытых требований, и в итоге у них просто не оставалось времени на точную, последовательную валидацию. Поэтому, код валидации у них разбросан повсюду: в сниппетах Javascript, контроллерах экранов, в бинах бизнес-логики, сущностях предметной области, триггерах и database constraints. В этом коде было полно операторов if-else, он выбрасывал кучу исключений, и попробуй разберись, где там у них валидируется этот конкретный кусок данных… Как результат, по мере развития проекта становится тяжело и дорого соблюдать и требования (зачастую довольно путаные), и единообразие подходов к валидации данных.


Так есть ли какой-то простой и изящный способ валидации данных? Способ, который защитит нас от греха нечитаемости, способ, который соберет всю логику валидации воедино, и который уже создан за нас разработчиками популярных Java-фреймворков?


Да, такой способ существует.

Читать дальше →
Total votes 17: ↑16 and ↓1+15
Comments5

Information

Rating
Does not participate
Location
Витебск, Витебская обл., Беларусь
Date of birth
Registered
Activity