Как стать автором
Обновить
16
0
Александр Зарипов @Askell

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

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

CO2-Лампа (mh-z19)

Время на прочтение7 мин
Количество просмотров23K
co2-lampe-main

Тут уже довольно часто рассказывали про датчик mh-z19 и про esp8266, а так же не забывали упоминать и про протокол mqtt.

Я всё это почитал и решил объединить вычитанное в одном устройстве. Собственно на картинке это оно и есть.
Читать дальше →
Всего голосов 36: ↑35 и ↓1+34
Комментарии27

Как сделать дозиметр и привязать его к Android

Время на прочтение3 мин
Количество просмотров155K
image


Здравствуйте, в данной статье я хотел бы поделиться опытом о том как прошел путь от идеи до готового устройства.
Мне очень нравиться читать Хабр, и вот я наткнулся на статью о том как быстро и без хлопотно можно привязать дозиметр к iphone (статья). Статья написанная lexeresser меня очень заинтересовала и мне захотелось попробовать сделать такую привзяку, но наткнулся на сложности: первый момент — бытовой дозиметр, который описывается купить не так просто, нашел всего два на продаже и они продаются не в России, второй момент — в статье описывалась программа для iphone, а у меня смартфон на Android. Я поставил себе задачу уложиться в 1000 рублей, т.к. дозиметры стоят от 3500 рублей. Чтобы уложиться в бюджет я решил не искать готовое устройство, а сделать самому, а программу для андроида создать. Данный проект я назвал SyGeiger и он не несет коммерческую идею, он просто для фана: Смогу ли я?
Читать дальше →
Всего голосов 83: ↑78 и ↓5+73
Комментарии165

JMeter: забудьте про BeanShell Sampler

Время на прочтение7 мин
Количество просмотров32K
С помощью стандартных элементов тест-плана в Jmeter можно сделать многое, но далеко не всё. Для расширения функциональности и реализации более сложной логики принято использовать BeanShell Sampler — как-то во всём мире так исторически сложилось. И во всём мире от этого периодически страдают, но продолжают есть кактус.
Читать дальше →
Всего голосов 12: ↑11 и ↓1+10
Комментарии2

Откуда в Java всплывают проблемы с кодировками и возможная причина падения марсианского зонда

Время на прочтение7 мин
Количество просмотров61K
Планета Марс уже не первый год населена роботами. То тут, то там появляются беспилотные электрокары и летающие дроны, а в программах, написанных на Java, с завидной регулярностью всплывают проблемы с кодировками.

Хочу поделиться своими мыслями о том, почему это происходит.
Читать дальше →
Всего голосов 71: ↑48 и ↓23+25
Комментарии53

Какие бывают типы OutOfMemoryError или из каких частей состоит память java процесса

Время на прочтение3 мин
Количество просмотров205K
Если вы словили OutOfMemoryError, то это вовсе не значит, что ваше приложение создает много объектов, которые не могут почиститься сборщиком мусора и заполняют всю память, выделенную вами с помощью параметра -Xmx. Я, как минимум, могу придумать два других случая, когда вы можете увидеть эту ошибку. Дело в том, что память java процесса не ограничивается областью -Xmx, где ваше приложение программно создает объекты.

image

Читать дальше →
Всего голосов 76: ↑73 и ↓3+70
Комментарии39

Система проветривания комнаты на основе «малинки» и «Детектора СО2»

Время на прочтение4 мин
Количество просмотров20K
Мода на умные дома захлестнула весь интернет, каждый нынче хочет сделать лампочку, которая умеет выключаться через интернет или пощёлкать вентилятором в туалете. Мой опыт был достаточно прост: я хотел сделать систему, которая умеет автоматически проветривать комнату, ни больше, ни меньше.

После обдумывания принципа работы системы пришел к некоторым выводам, которые и решил реализовать. По задумке, весь функционал системы делится на три составляющие: «мозги» которые всем управляют, система открывания форточки/или включение вентилятора и сам датчик который следит за качеством воздуха в помещении. Вот о сенсоре качества воздуха далее я и расскажу, плюс немного затрону тему интеграции его с “мозгами” умного дома.
Читать дальше →
Всего голосов 26: ↑20 и ↓6+14
Комментарии40

Справочник по синхронизаторам java.util.concurrent.*

Время на прочтение14 мин
Количество просмотров277K
Целью данной публикации не является полный анализ синхронизаторов из пакета java.util.concurrent. Пишу её, прежде всего, как справочник, который облегчит вхождение в тему и покажет возможности практического применения классов для синхронизации потоков (далее поток = thread).

В java.util.concurrent много различных классов, которые по функционалу можно поделить на группы: Concurrent Collections, Executors, Atomics и т.д. Одной из этих групп будет Synchronizers (синхронизаторы).



Синхронизаторы – вспомогательные утилиты для синхронизации потоков, которые дают возможность разработчику регулировать и/или ограничивать работу потоков и предоставляют более высокий уровень абстракции, чем основные примитивы языка (мониторы).
Читать дальше
Всего голосов 45: ↑41 и ↓4+37
Комментарии15

java.net.URL или старый конь борозды не испортит

Время на прочтение3 мин
Количество просмотров12K
Первое, что мы сразу вспоминаем, когда видим класс java.net.URL — это то, что он такой же матерый, как и первая версия java (@since JDK1.0). Второе — он встречается почти во всех java программах. Третье — чаще всего в нем используют протоколы file, jar и http.



А можно ли с помощью java.net.URL получить данные по протоколу CIFS/SMB, SCP, из HDFS — файловой системы хадупа или из maven репозитария? А получить изображение с веб камеры одной строчкой new URL('camel:/webcam:spycam?resolution=HD720').openStream()?
Узнаем как работать с такими URL в java и groovy
Всего голосов 13: ↑10 и ↓3+7
Комментарии3

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

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

Решение 1


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

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

Распределённая система кеша ehcache для приложений любого уровня

Время на прочтение3 мин
Количество просмотров29K
Сегодня я хотел бы рассказать об одном интересном проекте, который вам пригодится при проектировании и реализации сложных веб-приложений на платформе Java. Речь идёт о ehcache — универсальной системе распределённого кеширования для Java приложений и сервлетов. Это необычно небольшое приложение (честно, такого уровня системы, размером в несколько сотен Кб это редкость, при этом высокого качества), которое реализует кеш как динамический (в оперативной памяти), так и дисковый кеш, причём изначально спроектированное для работы с кешами большого объёма (порядка гигабайтов) и в распределённых системах.

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

Hibernate cache

Время на прочтение6 мин
Количество просмотров183K
Довольно часто в java приложениях с целью снижения нагрузки на БД используют кеш. Не много людей реально понимают как работает кеш под капотом, добавить просто аннотацию не всегда достаточно, нужно понимать как работает система. Поэтому этой статье я попытаюсь раскрыть тему про то, как работает кеш популярного ORM фреймворка. Итак, для начала немного теории.

Прежде всего Hibernate cache — это 3 уровня кеширования:
  • Кеш первого уровня (First-level cache);
  • Кеш второго уровня (Second-level cache);
  • Кеш запросов (Query cache);

Кеш первого уровня

Кеш первого уровня всегда привязан к объекту сессии. Hibernate всегда по умолчанию использует этот кеш и его нельзя отключить. Давайте сразу рассмотрим следующий код:
SharedDoc persistedDoc = (SharedDoc) session.load(SharedDoc.class, docId);
System.out.println(persistedDoc.getName());
user1.setDoc(persistedDoc);

persistedDoc = (SharedDoc) session.load(SharedDoc.class, docId);
System.out.println(persistedDoc.getName());
user2.setDoc(persistedDoc);

Возможно, Вы ожидаете, что будет выполнено 2 запроса в БД? Это не так. В этом примере будет выполнен 1 запрос в базу, несмотря на то, что делается 2 вызова load(), так как эти вызовы происходят в контексте одной сессии. Во время второй попытки загрузить план с тем же идентификатором будет использован кеш сессии.
Один важный момент — при использовании метода load() Hibernate не выгружает из БД данные до тех пор пока они не потребуются. Иными словами — в момент, когда осуществляется первый вызов load, мы получаем прокси объект или сами данные в случае, если данные уже были в кеше сессии. Поэтому в коде присутствует getName() чтобы 100% вытянуть данные из БД. Тут также открывается прекрасная возможность для потенциальной оптимизации. В случае прокси объекта мы можем связать два объекта не делая запрос в базу, в отличии от метода get(). При использовании методов save(), update(), saveOrUpdate(), load(), get(), list(), iterate(), scroll() всегда будет задействован кеш первого уровня. Собственно, тут нечего больше добавить.
Читать дальше →
Всего голосов 26: ↑26 и ↓0+26
Комментарии28

Коллекции в Java: о чём многие забывают

Время на прочтение6 мин
Количество просмотров142K
Из опыта code-review и ответов на StackOverflow набралось немало моментов, касающихся Java Collections API, которые мне казались очевидными, но другие разработчики о них почему-то не знали или знали, но не чувствовали уверенности их применять. В этой статье я собираю в общую кучу всё, что накопилось.

Содержание:


  1. List.subList
  2. PriorityQueue
  3. EnumSet и EnumMap
  4. Set.add(E) и Set.remove(E) возвращают булево значение
  5. Map.put(K, V), Map.remove(K), List.set(idx, E), List.remove(idx) возвращают предыдущий элемент
  6. Map.keySet() и Map.values()
  7. Arrays.asList может быть ключом
  8. Collections.max
  9. LinkedList, Stack, Vector, Hashtable
Читать дальше →
Всего голосов 58: ↑57 и ↓1+56
Комментарии37

Добавляем WiFi к Raspberry Pi всего за $2

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


Разного рода хаков для мини-ПК Raspberry Pi Zero, вышедшего в тираж пару недель назад довольно много. Правда, пока что большая часть — простенькие приемы, типа впайки WiFi модуля, что и хаком особо назвать нельзя. Сейчас начинают появляться более интересные вещи, среди которых — использование SDIO для добавления WiFi модуля. Причем USB при этом не используется, порт остается функциональным.

Пользователь Hackaday.io с ником ajlitt некоторое время задумался о возможности добавления WiFi модуля к таким платам, как Raspberry Pi A+ и Raspberry Pi Zero. Дело в том, что у Raspberry Pi B+, например, несколько USB портов, и один из них можно без проблем занять соотвествующим WiFi модулем. Но у Zero и A+ портов минимум, и подключать к ним WiFi модуль не всегда представляется возможным. Решение умельца оказалось довольно оригинальным. Дело в том, что у Raspberry Pi есть специальный GPIO-разъем с пинами, и к этому разъему можно подключать различные устройства, в том числе, и SDIO-девайсы. Эту особенность «малинки» и было решено использовать.
Читать дальше →
Всего голосов 21: ↑19 и ↓2+17
Комментарии11

Эволюция Java на примере чтения строк из файла

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



Многие из нас помнят

'до Java 7' мучения:


        BufferedReader reader = null;
        try {
            reader = new BufferedReader(
                        new InputStreamReader(
                            new FileInputStream(FILE_NAME), Charset.forName("UTF-8")));
            String line;
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }
        } catch (IOException e) {
            // log error
        } finally {
            if (reader != null) {
                try {
                    reader.close();
                } catch (IOException e) {
                    // log warning
                }
            }
        }

Читать дальше →
Всего голосов 34: ↑18 и ↓16+2
Комментарии17

Используем «Яндекс Музыку» вне браузера

Время на прочтение2 мин
Количество просмотров121K
Недавно мне захотелось поработать с «Яндекс Музыкой» не через браузер. Как выяснилось, у них нет открытого api, и дело оказалось не тривиальным. Да и ничего готового найти не удалось.

Те, кому лень читать, могут сразу перейти к результату — python-yamusic.
Читать дальше →
Всего голосов 46: ↑38 и ↓8+30
Комментарии15

Распределенный музыкальный плейер на Raspberry Pi

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

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

(Да, пост во многом пересекается с постом Распределенный аудиоплеер на Odroid U2, но чуть проще в настройке)
Читать дальше →
Всего голосов 108: ↑105 и ↓3+102
Комментарии52

Raspberry PI и JAVA: пристальный взгляд

Время на прочтение4 мин
Количество просмотров68K
Недавно на хабрахабре вышла статья о java на raspberry pi, увидев название которой было много ожиданий, а под катом оказался банальный Hello World!

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

1. Сравнима ли скорость работы java на малинке и настольном компьютере?
2. Насколько удобно работать с java на raspberry?
3. Есть ли адекватные библиотеки для работы с GPIO?

Вот на эти вопросы я и попробую дать ответы в этой статье.

Кому интересно: добро пожаловать под кат (графики и фотографий обнаженной малинки там не будет)
Читать дальше →
Всего голосов 52: ↑45 и ↓7+38
Комментарии62

Работа с JMS сообщениями и MDB в JEE

Время на прочтение4 мин
Количество просмотров80K
Работа с сообщениями подразумевает взаимодействие между компонентами системы посредством передачи сообщений. JMS позволяет реализовать это взаимодействие в java приложении, а MDB бины позволяют асинхронно обрабатывать получаемые сообщения на сервере приложений без дополнительных усилий по асинхронной обработке.

Ниже представлен простой пример обработки JMS сообщения с помощью MDB.
Читать дальше →
Всего голосов 12: ↑8 и ↓4+4
Комментарии5

Что такое HEPA-фильтр: принципы работы и неочевидные факты

Время на прочтение6 мин
Количество просмотров270K
Приветствуем вас в блоге компании Тион Умный микроклимат. Тема статьи — HEPA-фильтры.

Это высокоэффективные фильтры, главная цель которых – удалять из воздуха мелкодисперсные частицы, в том числе PM2.5 и PM10 (с диаметром менее 2,5 и 10 мкм соответственно). HEPA – это не бренд и не марка, а класс фильтров, который определяется международным и национальным стандартами ЕН 1822-1:2009 и ГОСТ Р ЕН 1822-1-2010.



Давайте посмотрим на HEPA-фильтр «с расстояния вытянутой руки», расскажем про принцип его работы и основные эффекты, благодаря которым происходит осаждение частиц на фильтре.
Читать дальше →
Всего голосов 62: ↑60 и ↓2+58
Комментарии70

Диагностируем причину, выживаем в JAR hell: не дышим серой и не варимся в котле

Время на прочтение6 мин
Количество просмотров20K
Бывает что в крупном проекте работающем в jvm, внезапно обнаруживается что приложение не работает и даже не запускается при обновлении какой-либо из зависимостей проекта. Такое же возможно из-за любого другого события, которое изменило порядок следования библиотек в classpath приложения.


Добро пожаловать в JAR hell
Всего голосов 19: ↑17 и ↓2+15
Комментарии0

Информация

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