Как стать автором
Обновить
4
0
Артем Ларин @artem_larin

Java-разработчик

Отправить сообщение

Перевод числа в строку с помощью FPU

Время на прочтение9 мин
Количество просмотров6.7K

Часто требуемое для вывода результатов расчетов преобразование числа с «плавающей точкой» из формата IEEE-754 в текстовую строку в «научной» нотации (т.е. с показателем степени «E») не является совсем уж тривиальной задачей. В силу обстоятельств автору пришлось самостоятельно «изобретать велосипед» такого преобразования. Причем хотелось сделать это максимально эффективно, в полной мере используя аппаратные возможности обработки чисел.

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

Читать далее
Всего голосов 12: ↑10 и ↓2+16
Комментарии23

Как я сделал бота, который контролирует моих сотрудников, следит за моими тренировками, весом и чтением книг

Время на прочтение4 мин
Количество просмотров7K
Привет, меня зовут Антон Ланцов, мне 26 лет. Я рыжий и у меня всегда миллион идей, некоторые из них я реализую успешно, некоторые нет.

Контроль сотрудников


В 2014 году я купил франшизу «Клаустрофобии» (квесты в реальности). Это был мой первый серьезный бизнес, где требовалось контролировать сотрудников. Ребят, которые вели квесты, мы называли «Операторы квеста».

Ежедневно нам приходилось контролировать операторов и собирать следующую информацию:

  1. Время прихода на локацию (клиенты могли прийти в любой момент, а чек был от 2500 рублей, любая потеря критична и досадна).
  2. Время пересменки (чтобы локация не оставалась без оператора).
  3. Время ухода с работы.
  4. Поломки и неисправности квестов (требовалось узнавать это оперативно, чтобы вызвать инженера, а то полетят плохие отзывы, что квест не работает).
  5. Уборка.
  6. Количество игр в день.
  7. Выручка за день.

В то время мы прекрасно обходились общим чатиком во «ВКонтакте» и Google Sheets:

  1. Время прихода на локацию. Пришел — пришли фоточку в чатик.
  2. Время пересменки — пришли фоточку в чатик обоих операторов.
  3. Время ухода с работы — пришли фоточку в чатик перед уходом.
  4. Поломки и неисправности квестов. Все в Google-таблицу с описанием и фото.
  5. Уборка — фоточка в чатик
  6. Количество игр в день — Google-таблица отлично справлялась и с этим.
  7. Выручка за день — Google-таблица и для этого.

Все это работало только тогда, когда оператор не забывал об этих ежедневных отчетах, которые занимали всего 3‑4 минуты. Напоминать в каждый чат (а чатов было два, так как локаций с квестами у нас было две) было очень утомительно каждый день, да и тот, кто должен был напоминать операторам, мог и сам забыть.

Система очень сильно зависела от памяти человека и легко любой косяк оправдывался «Ой, я забыл(а)...»

Об автоматизации мы только мечтали, ведь API у «Google Таблиц» и боты во «ВКонтакте» появились намного позже, чем 2014 год. А потом все никак не доходили руки. Вроде все работает и пусть себе работает.
Читать дальше →
Всего голосов 35: ↑9 и ↓26-12
Комментарии17

AnyStub, библиотека заглушек соединений в Java

Время на прочтение10 мин
Количество просмотров6.5K

В отличие от множества платформ Java страдает от недостатка библиотек заглушек соединений. Если вы давно в этом мире, то наверняка должны быть знакомы с WireMock, Betamax или даже Spock. Многие разработчики в тестах используют Mockito для описания поведения объектов, DataJpaTest с локальной h2 базой данных, Cucumber тесты. Сегодня вы познакомитесь с легковесной альтернативной, которая поможет справиться с разными проблемами, с которыми вы могли сталкиваться используя эти подходы. В частности, anyStub пытается решить следующие проблемы:


  • упростить кофигурацию тестового окружения
  • автоматизировать сбор данных для тестов
  • остаться в тестировании вашего проложения и избежать тестирования чего-то ещё
Читать дальше →
Всего голосов 7: ↑7 и ↓0+7
Комментарии14

Обучающие настольные игры для программистов

Время на прочтение16 мин
Количество просмотров15K
На рынке труда в Java-разработке наблюдается интересная ситуация. Активных резюме разработчиков больше 100 000 и на одно резюме приходится одна вакансия. В то же время работодатели и кадровые агентства жалуются на недостаток кадров, и, несмотря на тысячи резюме, найти хорошего специалиста тяжело. Например, Java-разработчик продукт дефицитный: встречается редко, сокращения их не касаются, зарплаты растут, а конкуренция падает. Исследовать причины явления мы не будем, а расскажем об одном из способов, как можно эту проблему решать.



Искать технических специалистов можно долго, но работа не ждет, поэтому приходится принимать на работу не достаточно квалифицированные кадры и обучать в процессе. Из вариантов: самообучение в свободное время или курсы и семинары в рабочее, но можно выбрать и игры. Артём Ларин (artem_larin) расскажет почему традиционные способы обучения ненадежны и почему игры — в чём-то лучше остальных.
Всего голосов 26: ↑26 и ↓0+26
Комментарии5

Собеседование на английском: как пройти его не хуже сына маминой подруги

Время на прочтение6 мин
Количество просмотров32K


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

Во многих случаях «иноязычные» рабочие интервью при успешном прохождении позволяют прорубить окно не только в Европу, но и во многие другие страны мира, включая те, что расположены за океаном. О том, как лучше проходить англоязычные собеседования, мы и поговорим в этой статье.
Читать дальше →
Всего голосов 32: ↑29 и ↓3+26
Комментарии6

Асинхронные схемы. Вычисление логических функций непосредственно по графу событий. Часть 1

Время на прочтение5 мин
Количество просмотров5K
В последней статье я уже упоминал о существовании альтернативных способов вычисления логических функций. В этой статье начну знакомить с вычислением логических функций непосредственно по событийному описанию (например STG). Тут не надо путать событийные описания с описаниями через состояния (пример — диаграмма изменений). Сам метод родился для синтеза асинхронных схем, но при желании его можно использовать и при синтезе синхронных схем. Отличительными чертами метода являются: 1) полный отказ от использования такого понятия как состояние (при объяснении я конечно буду ссылаться на это понятие); 2) существенное сокращение вычислений за счет использования информации о соседних состояниях. При машинных вычислениях это позволяет существенно сократить время вычислений и радикально решить проблему нехватки памяти при взрыве состояний. При ручных вычислениях метод позволяет при достаточной сноровке оперировать поведениями с сотнями сигналов. Речь конечно же идет о вычислении минимальных функций.

Читать дальше →
Всего голосов 14: ↑12 и ↓2+10
Комментарии0

«Профит велик. Мы получили множество свобод, которыми не обладали раньше», — Владимир Плизга о микросервисах

Время на прочтение31 мин
Количество просмотров13K

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


Сегодня мы поговорим о внедрении микросервисной архитектуры в Центре Финансовых Технологий (ЦФТ) — группе компаний, работающих в области информационных технологий для финансового сектора с 1991 года. То есть это организация, где качество продукта чрезвычайно важно, от него зависят реальные деньги.


В свою очередь, Владимир Плизга последние 6 лет погружен в разработку бэкенда интернет-банков и сопутствующих сервисов в ЦФТ, где активно топит за микросервисы и прочие модные штуки. Чтобы пообщаться с ним, я приехал прямо в офис ЦФТ, сделал сэлфи и обязательную фотку красного слона :-)


Обсуждаемые темы:


  • Зачем нужны микросервисы;
  • Как с ними жить (судьба REST и SOAP, statefull vs. stateless, переход от монолита к микросервисам, совместимость с legacy и многое другое);
  • Микросервисные технологии (Spring Cloud Netflix, Zuul, ...), какие с ними проблемы, что нужно допиливать;
  • Документация: на русском или английском? Написание и генерация документации (Swagger, SpringMVC, SpringFox). Архитектурные диаграммы — нужны ли, в чем рисовать, как хранить;
  • Мониторинг, восстановление от сбоев;
  • Ну и самое главное: стоит ли игра свеч?


(слева — Владимир, справа — olegchir)

Читать дальше →
Всего голосов 29: ↑28 и ↓1+27
Комментарии0

htop и многое другое на пальцах

Время на прочтение26 мин
Количество просмотров300K


На протяжении долгого времени я не до конца понимал htop. Я думал, что средняя загрузка [load average] в 1.0 означает, что процессор загружен на 50%, но это не совсем так. Да и потом, почему именно 1.0?

Затем я решил во всём разобраться и написать об этом. Говорят, что лучший способ научиться новому — попытаться это объяснить.
Читать дальше →
Всего голосов 138: ↑130 и ↓8+122
Комментарии45

Null, великий и ужасный

Время на прочтение5 мин
Количество просмотров127K

Ошибка дизайна


Именно так и никак иначе: null в C# — однозначно ошибочное решение, бездумно скопированное из более ранних языков.


  1. Самое страшное: в качестве значения любого ссылочного типа может использоваться универсальный предатель — null, на которого никак не среагирует компилятор. Зато во время исполнения легко получить нож в спину — NullReferenceException. Обрабатывать это исключение бесполезно: оно означает безусловную ошибку в коде.
  2. Перец на рану: сбой (NRE при попытке разыменования) может находится очень далеко от дефекта (использование null там, где ждут полноценный объект).
  3. Упитанный пушной зверек: null неизлечим — никакие будущие нововведения в платформе и языке не избавят нас от прокаженного унаследованного кода, который физически невозможно перестать использовать.

Этот ящик Пандоры был открыт еще при создании языка ALGOL W великим Хоаром, который позднее назвал собственную идею ошибкой на миллиард долларов.

На самом деле все не так плохо
Всего голосов 56: ↑45 и ↓11+34
Комментарии290

Anemic Domain Model [Перевод]

Время на прочтение4 мин
Количество просмотров38K
На фоне своего увлеченного изучения DDD, я прочел статью Мартина Фаулера от 25 Ноября 2003 года Anemic Domain Model. Иногда для лучшего понимания материала я перевожу его на русский язык. Вот я и решил поделиться переводом.
Перевод авторский и местами очень смысловой.

Ссылка на оригинал.

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



Бледная Доменная Модель

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

Узнать немного о DDD
Всего голосов 13: ↑9 и ↓4+5
Комментарии4

Spring: ваш следующий Java микрофреймворк

Время на прочтение6 мин
Количество просмотров56K

В этой статье мы поговорим о новой концепции в готовящемся к выходу Spring Framework 5 которая называется функциональный веб-фреймворк и посмотрим, как она может помочь при разработке легковесных приложений и микросервисов.

Читать дальше →
Всего голосов 28: ↑27 и ↓1+26
Комментарии42

Почему во время apt-get upgrade запускается игра Dwarf Fortress?

Время на прочтение2 мин
Количество просмотров35K
Большую популярность на ресурсе Ask Ubuntu снискал весьма странный вопрос пользователя Linux-дистрибутива Ubuntu. По его словам, в некоторых случаях при обновлении системы с помощью sudo apt-get upgrade происходит то, чего он совсем не может ожидать: запуск игры «Dwarf Fortress». История оказалась поучительной…

Читать дальше →
Всего голосов 88: ↑81 и ↓7+74
Комментарии17

Шесть простых примеров по Mockito (перевод)

Время на прочтение6 мин
Количество просмотров198K
Маленький комментарий:
/*
Решил ознакомиться с тем, что из себя представляет эта библиотека, и отыскал замечательную статью, прочтение которой я хотел бы закрепить, для чего и решил перевести её на русский.
Конечно же, принимается конструктивная критика.
Надеюсь, что комментарии будут полезнее самой статьи, как это обычно и бывает. ;)
*/

Mockito — прекрасная мок-библиотека для Java. Я очарован тем, как легко её использовать в сравнении с другими подобными библиотеками из мира Java и .NET. В этой статье я привожу всё, что Вам потребуется для старта, в шести очень лёгких примерах.
Читать дальше →
Всего голосов 13: ↑11 и ↓2+9
Комментарии8

Пишем кеш с определенным временем хранения объектов с использованием java.util.concurrent

Время на прочтение4 мин
Количество просмотров22K
Не так давно, мне выпала задача, написать кеш, который сам себя чистит по истечению некоторого определенного времени. Требования к нему были следующие:
  1. Легковесность
  2. Потокобезобасность

В общем-то и все. До написания данной задачи с java.util.concurrent дела не имел. На мысль использования этого пакета меня натолкнул один мой коллега, у которого было нечто подобное, но не соответствовало тому функционалу который был нужен. Итак, начнем:

В качестве ключа будет выступать внутренний класс, который помимо прямого назначения будет определять он является «живым» или его можно удалить с кеша, так как время его существования подошло к концу:
Читать дальше →
Всего голосов 29: ↑25 и ↓4+21
Комментарии24

java.util.concurrent. Часть первая: Зачем и почему?

Время на прочтение4 мин
Количество просмотров29K
Часть первая, в которой множеством слов раскрывается смысл существования этого API
Эта статья, хоть и не является прямым переводом, основана на статье Брайана Гетца Concurrency in JDK 5.0

Читать дальше →
Всего голосов 49: ↑39 и ↓10+29
Комментарии29

Java Logging: история кошмара

Время на прочтение13 мин
Количество просмотров130K

Вступление


Тернист и извилист путь Java-платформы к правильному способу записи строчек в лог-файлы. История logging в Java довольно познавательна в плане изучения особенностей Open Source, в том числе его взаимодействия с корпорациями и единичными программистами. Я собираюсь рассказать столько, сколько возможно, об истории развития Java logging, а также о том, к чему все пришло и как жить дальше.
Вперед и с песней!
Всего голосов 148: ↑146 и ↓2+144
Комментарии89

Java EE, JCA и jNode 2.X announce

Время на прочтение12 мин
Количество просмотров11K

Доброго времени суток, %username%.
Скажу сразу, на 99% данный пост про Java EE Connector Architecture, с примерами кода. Откуда взялся 1% про Fidonet вы поймете в самом конце.

Резюме для ленивых
JMS и JCA — родственники, входящие принимает MessageDrivenBean, исходящие отправляются через ConnectionFactory.
Минимальный пакет для входящего соединения — 4 класса, для исходящего — 8 классов и настройка адаптера на стороне сервера приложений.
Дальше — только подробности и боль


Для начала — история вопроса и решение бизнес-задачи.

Постановка задачи


Мне поставили задачу об интеграции существующей бизнес-системы («система А» ) с другой системой, которая была разработана много лет назад и понимает только собственный протокол передачи данных («система B»). Модифицировать чужие системы нельзя, соответственно задача свелась к написанию некой шины/прокси. Интеграция состоит в передаче туда-сюда сообщений с конвертацией их в процессе из одного формата в другой.

Система «А» имела много современных механизмов интеграции, самым простым для использования были признаны веб-сервисы. Под это дело был оперативно запилен стандартный интеграционный скелет для JEE — JAX-WS+EJB+JMS для гарантированной доставки сообщения.
А вот для работы с системой «B» стандартных средств не было. Робкие попытки поработать с сетью из контекста EJB успехом не увенчались, гугл подсказал два варианта решения проблемы: костылить сервлеты для работы с non-http или написать JCA-адаптер. Понятно, что был выбран второй путь — с JCA я до этого не работал, а узнать что-то новое всегда интересно.
Читать дальше →
Всего голосов 8: ↑8 и ↓0+8
Комментарии5

Три буквы, о которых Вы не знаете

Время на прочтение12 мин
Количество просмотров36K
Рассказывая людям на встречах и презентациях про технологию, относящуюся к области баз данных, я поражаюсь, какая огромная пропасть может быть между тем, чем человек занимается и в какой области он работает. Еще больше поражает, что такая пропасть может присутствовать и у технических специалистов. Я попробую пояснить – например, в карточке человека написано «Специалист по работе с базами данных», а на деле оказывается, что этот человек умеет настраивать бэкапы в RMAN-е, создавать индексы и перестартовывать инстансы. Все его знания в области баз данных умещаются в знание, как использовать эти три инструмента. Ах да, еще, конечно же, знание SGA. Поразительно, но возникает такое чувство, что человек определил себе рамки, в границах которых он что-то знает, а что происходит за этими рамками, ему кажется неинтересным и недостойным внимания.
Читать дальше →
Всего голосов 16: ↑10 и ↓6+4
Комментарии11

Ingram Micro и Odin Automation

Время на прочтение10 мин
Количество просмотров7.2K
Привет Хабр! Меня зовут Тимур Хакимьянов, я являюсь вице-президентом Odin Automation и руковожу разработкой платформы дистрибуции облачных сервисов и приложений. Информация о нашей компании в Рунете крайне скудна, несмотря на то, что нашими продуктами пользуется более 150 телеком-операторов, хостеров и провайдеров по всему миру, среди которых есть очень крупные и известные. При этом почти весь наш департамент разработки находится в России. Поэтому я хочу немного заполнить информационный вакуум и подробнее рассказать о том, кто мы такие и что делаем.
Читать дальше →
Всего голосов 16: ↑13 и ↓3+10
Комментарии7

Технология APS: облачный стандарт

Время на прочтение9 мин
Количество просмотров6.5K
Привет, Хабр! Меня зовут Тимур Низаметдинов, я работаю Senior Software Architect облачной экосистемы Odin (Ingram Micro). Сегодня я хочу рассказать вам об APS (Application Packaging Standard) — ключевой технологии, используемой для интеграции в платформу по продаже и потреблению облачных сервисов (SaaS marketplace) Odin Automation.

Про платформу





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

Odin Automation состоит из следующих компонентов:


  • Онлайн-магазин, задача которого привлечь конечных пользователей, а также представителей малого и среднего бизнеса, заинтересованных в приобретении таких продуктов, как Microsoft Office 365 или Dropbox for Business. Система помогает выбрать наиболее подходящие решения, сориентироваться в их возможностях и версиях.

  • Панель управления купленными сервисами (Контрольная панель / Self-management Control Panel), задача которой предоставить возможности управления, докупки (upsell) и перекрестной продажи (cross-sell) сервисов покупателю.

  • Система бизнес-поддержки (BSS, Business Support System), которая управляет рабочими процессами, инициирует процессы оплаты, предоставления (provisioning), биллинга и так далее.

  • Система поддержки операций (OSS, Operation Support System), которая занимается учетом, планированием и предоставлением услуг.

OSS управляет созданием сервисов и учетом их потребления. В случае облачных сервисов это становится нетривиальной задачей, ведь каждый сервис имеет собственный API. Для того чтобы решить эту задачу и нужен APS, предоставляющий системе поддержки операций единый API по управлению и учету облачных сервисов.


Читать дальше →
Всего голосов 25: ↑24 и ↓1+23
Комментарии0

Информация

В рейтинге
Не участвует
Откуда
Россия
Дата рождения
Зарегистрирован
Активность