Задать вопрос
  • Python. Как переподключиться к известной сети wifi через определённый период?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    А причем здесь python? И надеюсь, операционка у вас openbsd?!
    Проставьте уж теги нормальные!
    Ответ написан
  • Как использовать мои ArrayList в другом Java классе?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Вам стоит почитать про поля класса и их геттеры/сеттеры, конструкторы класса, инициализацию полей класса, их видимость. ( Например здесь - developer.alexanderklimov.ru/android/java/class.php или https://metanit.com/java/tutorial/3.1.php )
    Например можно переделать ваш класс так (это очень на скорую руку, так чтобы было понятней).

    package com.antek.memgen.gui;
    
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    public class Objects {
    
    	public static class ItemsNames {
    
    		private Map<String, List<String>> laptops = new HashMap<>();
    		private Map<String, List<String>> phones = new HashMap<>();
    
    		public ItemsNames() {
    			List<String> dell = new ArrayList<>();
    			List<String> hp = new ArrayList<>();
    			List<String> apple_comps = new ArrayList<>();
    
    			List<String> nokia = new ArrayList<>();
    			List<String> xiaomi = new ArrayList<>();
    			List<String> apple_phones = new ArrayList<>();
    
    			// initialize computers
    			dell.add(0, "DELL Inspiron");
    			dell.add(1, "DELL Latitude");
    			hp.add(0, "HP Pavilion");
    			hp.add(1, "HP_Omen");
    			apple_comps.add(0, "McBook Air 11");
    			apple_comps.add(1, "McBook Air 13");
    
    			// initialize phones
    
    			nokia.add(0, "Nokia 3310");
    			nokia.add(0, "Nokia 5.1");
    			xiaomi.add(0, "Xiaomi redmi note 3 pro");
    			xiaomi.add(1, "Xiaomi Mi 9T Pro");
    			apple_phones.add(0, "Iphone 8S");
    			apple_phones.add(0, "Iphone 11 Pro");
    
    			laptops.put("dell", dell);
    			laptops.put("hp", hp);
    			laptops.put("apple", apple_comps);
    
    			phones.put("nokia", nokia);
    			phones.put("xiaomi", xiaomi);
    			phones.put("apple", apple_phones);
    		}
    
    		public List<String> laptopNames(String brand) {
    			return laptops.get(brand);
    		}
    
    		public List<String> smartPhonesNames(String brand) {
    			return phones.get(brand);
    		}
    
    	}
    
    	public static void main(String[] args) {
    
    		// Simple tests
    
    		ItemsNames items = new ItemsNames();
    
    		items.laptopNames("apple").forEach(System.out::println);
    
    		items.smartPhonesNames("apple").forEach(System.out::println);
    
    	}
    
    }
    Ответ написан
    2 комментария
  • Нужно ли знать ОС программисту Java?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Да, нужно! Как минимум нужно общее представление. Так как любая программа выполняется в окружении операционной системы.
    Взять серверную часть. У вас не просто запускается tomcat/jboss/jetty/что-то-там-еще. У вас скорее всего стоит база данных, прокси-сервер. Есть мониторинг, оркестрация, сети... все это сильно зависит от операционной системы, настроек, прав доступа. Если в этом совсем ничего не понимать, то простые ошибки, типа занятого порта или лимита на открытые дескрипторы, можно искать днями.
    В результате, и тесты проходят, и все работает, а нагрузку не держит! Или крашится с непонятным результатом.
    Я уж не говорю про десктопные приложения, утилиты, cli и gui.
    Если хотите делать реально переносимые приложения, придется немного глубже копать, чем ява.
    Ну и пример. Сейчас пишу, да-да, аудиоплеер с биндингом к gstreamer. Разрабатываю на маке, отлаживаю в линуксе, а целевая система - на arm с armbian. Как-то так.
    Ответ написан
    Комментировать
  • Linux, аудит доступа к файлам, есть ли такое?

    leahch
    @leahch Куратор тега Linux
    3D специалист. Dолго, Dорого, Dерьмово.
    Да, есть, причем очень разный.
    1) Есть inotify - внутренний механизм ядра по слежению за файлами
    2) Есть SELinux - система безопасности
    3) есть auditd
    Ответ написан
    Комментировать
  • Как организовать работу с общими сущностями для клиент-серверного приложения?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Заливайте в redis например.
    Ответ написан
    Комментировать
  • Что такое сервлет?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Ну пойдем.
    1) Сервлет - не аналог CGI, и не аналог PHP
    Если уж говорить про аналоги, то ближе всего это FastCGI, но тоже очень далеко.
    В отличии от CGI/FastCGI - это ресурс, который:
    - имеет четко заданный жизненный цикл с сохранением состояний на приложение, сессию, запрос
    - имеет ресурсы, передаваемые ему сервером приложения (авторизация, внешние ресурсы, ресурсы приложения, ресурсы запроса, ресурсы сессии)
    - может включать в себя так называемые фильтры пре/пост обработки
    - может взаимодействовать с ресурсами приложения и контейнера

    В рамках сравнения с PHP, сервлет не имеет встроенного языка шаблонов. И прямой аналог этомы - JSP, которые компилируются перед исполнением в тот же сервлет.

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

    3) Напрямую на сервлетах сейчас достаточно редко пишут, хотя по быстрому набросать websocket очень даже можно. Обычно используют фреймфорки типа spring, javalin, jooby, vaadin, wicklets, tapesty и т.д. (их сотни под разные нужды и задачи!). Все эти фреймворки (библиотеки и обертки) делают удобным работу с API сервлетов, языками шаблонов (их тоже - десятки) и взаимедействием с ресурсами.

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

    5) кроме сервлетов появились и новые фреймворки, расчитанные на микросервисы, и не обеспечивающие спецификацию сервлетов, например jooby, javalin и т.д.
    Вот код простого, боевого, приложения, в котором уже есть web-сервер, держащий нагрузку в несколько тысяч RPS.
    import io.javalin.Javalin;
    
    public class HelloWorld {
        public static void main(String[] args) {
            Javalin app = Javalin.create().start(7000);
            app.get("/", ctx -> ctx.result("Hello World"));
        }
    }
    Ответ написан
    9 комментариев
  • Как дешифровать WebSocket на Java?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    А в чем собственно проблема то? Вот на спринге и клиент и сервер.
    https://www.baeldung.com/java-websockets
    Стандартный servlet api тоже поддерживает, как и современные сервлет-контейнеры, что tomcat, что jetty.
    Ответ написан
    Комментировать
  • Как получить интернет в поезде?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Как технический специалист, которые обслуживает кое-какие системы в поездах дальнего следования, могу сказать, что волшебной таблетки здесь нет! У нас с нашими системами катается около 300 вагонов по разным направлениям. Связь в пути через 3G/4G дерьмовая везде, кроме как на узловых станциях и в городах. Если хотите ее как-то улучшить - берите GSM модем в выносной антенной, но это тоже не сильно спасет :-(
    Лучший способ быть на связи - купите или арендуйте спутниковый терминал или телефон ~ 300 руб в сутки. Телефоны и тарифы здесь - iridium-russian.ru
    С передачей данных сложнее - только 3G/4G, и то как я описал выше.

    Итого: для вас только 3. Офлайн интернет. Плюс в местах остановок очень возможно у вас будет 3/4G.
    Здесь есть одно но - 4G у вас практически не будет рядом с большими вокзалами - соты перегружены, если днем/вечером, ночью связь будет.
    Ответ написан
    8 комментариев
  • Jinja2. В чем отличия extends от include?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Разница конечно же есть, и значительная. Extends расширяет существующий шаблон, а include добавляет в нужное место кусок шаблона.

    Представим ситуацию с достаточно большим шаблоном, где нужно поменять только часть страницы. Базовый шаблон выглядит примерно так
    <!-- parent -->
    {%block заголовок%}
    {%block левый_блок%}
    {%block правый_блок%}
    {%block тело%}
    {%block подвал%}

    Если наследоваться от этого шаблона, то получится примерно так
    <!-- chlid -->
    {% extends parent %}
    {%block левый_блок %}
    {%block тело %}

    В противном случае нам пришлось бы инклюдами подключать все остальные блоки.
    Ответ написан
    3 комментария
  • Какой Java GUI фреймворк лучше сейчас использовать?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Рекомендую платформу rcp на которой сделан эклипс https://www.vogella.com/tutorials/EclipseRCP/artic...
    Меньше писать придется, чем на fx. Но fx никакой не депрекейтед!
    Ответ написан
    Комментировать
  • Как скачать видео по прямой ссылке?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    А все зависит от формата видео. Оно может быть в формате hls, тогда само видео изначально разбито на маленькие кусочки. Тогда нужно скачать индексный файл в формате m8u , где указаны все видеофрагменты.
    Ответ написан
    Комментировать
  • На чем пишут десктоп приложения на Java/C#?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    JavaFX вполне годное поделие. Пишу на нем сейчас плеер специфический. Очень похож на свинг, но есть и очень приятные отличия, например бинбинг проперти. В отличии от свинга можно делать гораздо больше.
    Да, еще SWT от эклипса, но давно под него не программировал.
    Ответ написан
    Комментировать
  • Как получить дробную часть числа?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    BigDecimal вас спасет. И да, с даблом такое сплошь и рядом. Пример не в кассу, но показателен.
    Double toBeTruncated = new Double("3.5789055");
    
    Double truncatedDouble = BigDecimal.valueOf(toBeTruncated)
        .setScale(3, RoundingMode.HALF_UP)
        .doubleValue();
    Ответ написан
    Комментировать
  • Скорость архивации архива? От чего зависит?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Зависит от частоты процессора,, иногда от количества ядер, от быстродействия памяти. И конечно от алгоритма сжатия, причем «максимальное сжатие» и «максимальное быстродействие» вещи прямо противоположные, максимальное сжатие самое медленное! От диска, его быстродействия, и от количества памяти зависимость очень маленькая, все современные диски справляются замечательно и в несколько потоков, не говоря уж про SSD.
    На сегодня один из самых быстрых lz4 -https://github.com/lz4/lz4/blob/dev/README.md
    Ах да, не все сжимается одинаково хорошо. Например картинки,аудио и видео -файлы уже достаточно хорошо ужаты, в них и так применяются достаточно хорошие алгоритмы компрессии, и дополнительно сжимать их практически бесполезно. Более того, размер после сжатия может и увеличиться!
    Ответ написан
    Комментировать
  • Как зайти на сайт через ipv6 при условии, что он его поддерживает?

    leahch
    @leahch Куратор тега Linux
    3D специалист. Dолго, Dорого, Dерьмово.
    1) проверить, что на клиентской стороне это v6 работает ipv6.google.com
    2) есть куча калькуляторов ip непример ipcalc
    3)обычно выдают подсеть как минимум 64. А проверить диапазон см п 2
    4 ) если нет п 1, то настроить какой нтбудь туннель типа toredo
    Ответ написан
    2 комментария
  • Как на C++ дергать логи из syslog?

    leahch
    @leahch Куратор тега Linux
    3D специалист. Dолго, Dорого, Dерьмово.
    Проблема с логами, что они не специфицированы, от слова - совсем. Формат файлов логов разный в зависимости от системы логирования, syslog делает одно, rsyslog делает второе, апач- третье, и т.д. причем еще есть ротация этих логов, которая запускается по крону (обычно).
    Так что боюсь, парсер логов придется писать самому, либо поискать готовую библиотеку на c/c++. На ум библиотек не приходит, но есть программы-собиратели логов типа logstash, которые могут преобразовывать логи к какому-то единому знаменателю и кидать например в базу данных. Так вот из базы данных логи легче всего выдернуть, тем более на C.
    Ответ написан
    3 комментария
  • Почему синтаксическая ошибка?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Скобочки посчитайте в строке с курсором и выше!
    Ответ написан
    Комментировать
  • MacBook Air 2010 для новичка mac?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Нет, полноценно работать не сможете! Либо ставить совсем старую OSX, но будут проблемы с сертификатами. Либо не брать. Да и дорого за такую машинку - в два раза цену скинуть и годится.

    Этот мак используется как печатная машинка, если только систему не урезали по самое "не могу". Но нужно ли себе портить впечатление?
    Ответ написан
    1 комментарий
  • Как реализовать OAuth2 сервер на своем веб-сервере?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Есть несколько библиотек, начиная от apache shiro и заканчивая scribejava. Можно огласить и весь список - https://oauth.net/code/java/
    А уж как прикрутить конкретную либу к вашему приложению - не скажу, код глядеть нужно. Но рекомендую scribejava или Apache Shiro. последняя посложнее, так как работает через Pac4j
    Ответ написан
    Комментировать
  • Что является сервером приложений?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Не знаю, почему все ругаются на диаграмму. Вполне традиционная. Просто сервера приложений обычно предоставляют кучу "коннекторов", одним из них может являться и http.

    В вашем случае tomcat + spring являются и web-сервером и сервером приложений. Или если сказать по другому. Tomcat - контейнер для web-приложений, а spring - приложение для web. Томсат - web-сервер, Spring - web-приложение. В один Tomcat можно упихнуть десятка три-четыре web-приложений на Spring.
    Ответ написан
    6 комментариев