• Как устроена АСУ ТП?

    @Wan-Derer
    Зобанели на Хабре, волки́ ;((
    Начал писать ответ, в итоге накатал целую статью :) Надо подождать модерации....
    Ответ написан
    Комментировать
  • Хочу сделать сервер (который будет отвечать) и клиент, можете помочь?

    @Wan-Derer
    Зобанели на Хабре, волки́ ;((
    Я совсем не знаю C#, поэтому из общих соображений:
    Тебе нужен WEB-сервер (backend). Наверняка у вас есть фреймворк, реализующий его, а также типовые шаблоны проектирования, например, шаблон MVC, Model-View-Controller.
    Model - это описание предметной области в виде набора взаимосвязанных объектов (иерархия классов). Модель может взаимодействовать с Repository - набор классов для обмена (чтения/записи) данных между объектами и базой данных (если она есть). Плюс Service - слой, в котором описана логика взаимодействия объектов модели между собой и с внешним миром (через контроллеры).
    Controller - это класс (классы), отвечающий за организацию точек доступа к твоему серверу из Интернета по протоколу HTTP.
    Например, когда человек набирает в браузере http://myserver.ru/users , то на твой сервер приходит HTTP GET-запрос на точку /users . В ответ ты должен выдать список пользователей.
    View - это часть приложения, отвечающая за взаимодействие с клиентом (ввод строки на сайте и печать ответа на экран). Она может быть реализована двумя способами:
    - с помощью шаблонизаторов: ты пишешь шаблон WEB-страницы в виде HTML-разметки и с помощью специального синтаксиса внедряешь туда свои C#-объекты. Шаблонизатор "оживляет" страницу: введённая пользователем строка попадает в нужный класс Service и там ты её обрабатываешь. А в нужное поле на страничке, опять же из Service поступает текст, который надо напечатать на экране.
    - ты пишешь отдельное приложение на JavaScript (TypeScript), которое загружается с твоего сервера в браузер и там исполняется, обмениваясь в backend информацией в виде JSON-строк.

    Где искать информацию. Думаю, её полно :) Книги, статьи, видео, главное правильно задать вопрос. Я вот спросил у Степика, и вроде что-то нашлось :) Уверен, если спросить у Ютуба, найдётся куча пошаговых инструкций как сделать WEB-сервер. Ну а потом уже можно вглубь: книги, документация.

    PS: щас тут мне скажут: "ну что ты новичку советуешь сразу фреймворк, пусть сначала руками поделает... ". Я не против, пусть поделает. Посоветуйте ему подходящие библиотеки, инструкции, учебные курсы и пусть делает :)
    Ответ написан
    1 комментарий
  • Java. Ссылка Класс::МетодЭкземпляра. Как реализовать метод?

    @Wan-Derer
    Зобанели на Хабре, волки́ ;((
    Вроде как и с нестатическими получается:
    public class Test {
    
      public static void main(String[] args) {
        
        MyClass myClass = new MyClass();
    
        Stream.generate(ToProcess::new).limit(10).map(myClass::process);
        
      }
      
    }
    
    
    class MyClass{
      ToProcess process(ToProcess obj){
        // processing
        return obj;
      }
    }
    
    
    class ToProcess {
    }

    По крайней мере, IDE-шка ошибок не даёт :)
    Ответ написан
    3 комментария
  • Стоит ли идти в Embedded разработку?

    @Wan-Derer
    Зобанели на Хабре, волки́ ;((
    Эмбед в России есть. Собственно, он всегда был: из советского перетёк в российский. И это не только госуха/война. Я знаю людей, которые занимаются вполне гражданскими темами, причём начинали они ещё во времена кооперативов. Направления разные: ЖКХ/Умный город, банкоматы/терминалы/киоски, промка, узкоспециальные темы (например, телевидение/телеком).
    На волне импортозамещения многие подняли объёмы, занялись более сложными проектами.
    Ковид, наверно, кого-то подкосил, Сисянкции... ну по-разному. Кого-то прибили, а кто-то ищет и находит новые возможности.
    Также развивается всякая беспилотная тема. Не только военная. МЧС, контроль дорожной обстановки, беспилотные авто, доставка. Вот недавно ехал по Москве, глядь, стоят две коробки Яндекс-доставки... на пешеходном переходе, ждут когда светофор переключится :)
    Ответ написан
    Комментировать
  • Что эффективней, чтение из файла или массив?

    @Wan-Derer
    Зобанели на Хабре, волки́ ;((
    Если возникает вопрос "память или файл?", это значит что есть какие-то проблемы хранения в памяти: данных много и памяти может не хватить, данные должны сохраниться при перезапуске приложения, данные должны быть доступны из других приложений/инстансов, что-то ещё.
    В таком случае задачу хранения/записи/чтения данных лучше поручить отдельному сервису. Про базы данных уже сказали, я немного дополню. Если данные можно свести к такому представлению как пара ключ-значение, можно использовать базы данных NOSQL или сервисы типа Redis. Помимо стандартного интерфейса доступа и высокой скорости, они обладают хорошим качеством - их можно конфигурировать.
    Допустим, ты поначалу настроил сервис на хранение данных в памяти, а потом решил что для надёжности надо отписывать данные на диск (все, не все, сразу, периодически и т.п.). Ты просто прописываешь соответствующий конфиг - и всё, сервис начинает работать по-другому. А для твоего приложения ничего не изменилось (ну, кроме скорости доступа).
    Ответ написан
    Комментировать
  • Как тестировать работу Service класса с базой данных или как сравнить два JPA entity объекта в тестах?

    @Wan-Derer
    Зобанели на Хабре, волки́ ;((
    Когда ты реализуешь equals() и hashCode(), логику этих методов ты определяешь сам, тебе не обязательно сравнивать все поля. Сравнивать то что тебе надо и так как надо - хоть фазу Луны со спином ретроградного Меркурия.
    Ответ написан
    Комментировать
  • Какие виды и специализации Java программистов бывают?

    @Wan-Derer
    Зобанели на Хабре, волки́ ;((
    Основные направления тебе перечислили, немного дополню.
    - есть очень сложный и очень старый энтерпрайз, например, банки. Бывают написаны на очень старой Java, говорят, даже 5 встречается :) Охренеть какая сложная предметная область. Тебе могут дать задание написать или исправить класс, а ты вообще в душе не шаришь что это и зачем. И так всю жизнь :)
    - есть системы типа SAP, которые надо не писать, а адаптировать под конкретного заказчика типа Аэрофлота. Делается это путём прописывания логики работы уже готовой системы, а также написания своих плагинов, в т.ч. на Java.

    Ну а если тебе нужен универсальный совет, то вот он:
    - не знаешь что учить - учи Spring, вакансии не дадут соврать;
    - обязательно познакомься с SQL - чтобы понимать не только JPA, но и "голые" запросы и уметь хотя бы немного в их оптимизацию;
    - познакомься с фронтендом на базе фреймворка, самый популярный React, хотя бэкендерам лучше заходит Angular. Это позволит на практике понять как происходит взаимодействие бэк-фронт, ну и вообще - расширит сознание :)

    С таким стэком и (желательно) домашним проектом искать работу будет легче и веселее :)
    Удачи!
    Ответ написан
    1 комментарий
  • Как разделять ответственность Product Owner и CTO?

    @Wan-Derer
    Зобанели на Хабре, волки́ ;((
    Если тебя определили в подчинение - значит так оно и есть. Он главный. Ты, конечно, должен иметь своё видение и пр. и должен его высказывать. Но заднее слово пока за ним. И основная ответственность тоже.
    Ты пока набиваешь опыт, взаимодействуешь с командой, анализируешь узкие места, планируешь улучшения. Главное - добиться полного взаимопонимания со своими сотрудниками.
    Со временем тебе будут больше доверять, а у техдира появятся новые замороки и не будет достаточно времени заниматься проектом. Это уже сейчас так - поэтому тебя и наняли. Так что постепенно проект перейдёт под твой контроль.
    Ответ написан
    Комментировать
  • Как правильно просить повышения зарплаты?

    @Wan-Derer
    Зобанели на Хабре, волки́ ;((
    Ситуация примерно моя. У нас весь коллектив работает на одном стеке, а я типа экспериментальный :) Поэтому мне сложно показывать свою значимость, у руководства голова забита совсем другими вопросами. Плюс тотальная удалёнка - сложно улучить подходящий момент для разговора.
    Ну, я просто написал шефу: так-сяк, я думаю, пора бы пересмотреть. В итоге получил задание как условие повышения, сейчас его делаю.
    Я думаю, в твоей ситуации инициатива полностью в твоих руках. Надо раз в пол-года (или с тем периодом, который был у тебя раньше) пинговать шефа на тему пересмотра. Разумеется, надо выбирать момент когда в лавке (по твоему мнению) дела идут нормально.
    А на собесы стоит походить чтобы понять актуальные цифры (к сож., в вакансиях их не публикуют). А размахивать оффером, конечно, не стоит.
    Ответ написан
  • Что это за разъём в ноутбуке?

    @Wan-Derer
    Зобанели на Хабре, волки́ ;((
    Привезли, лежал, а потом оказался без БП.... Ну да, ну да :)
    Тут проще взять внешнюю коробку HDD/SSD (USB-то у него есть?), переписать на неё файлы с CD и с неё ставить венду. А внешняя коробка - вещь полезная, в хозяйстве всяко должна быть.
    Ответ написан
  • Что делать, если я захожу на майнкрафт сервер и мне выдает эту ошибку?

    @Wan-Derer
    Зобанели на Хабре, волки́ ;((
    Что с этим делать?

    Прекратить играться и заняться наконец каким-то полезным делом.
    Ответ написан
    Комментировать
  • Как за 3-4 месяца прокачаться мидлу работающему в продуктовой компании?

    @Wan-Derer
    Зобанели на Хабре, волки́ ;((
    По-моему, лучший способ прокачки - пилить свой проект. На самых новых, модных и прогрессивных технологиях. Даже если сам проект не имеет какого-то смысла и новизны - пилить ради изучения тех самых технологий.
    Ответ написан
    2 комментария
  • Как в txt сгенерировать числа от 000001 до 999999?

    @Wan-Derer
    Зобанели на Хабре, волки́ ;((
    Если задача разовая, нагенерить их в Excel и скопипастить в редактор.
    Ответ написан
    Комментировать
  • Как в Reactor Netty отправить файл?

    @Wan-Derer Автор вопроса
    Зобанели на Хабре, волки́ ;((
    Оставлю таблетку для памяти :) Так работает:

    // GET /api/reports/download/{id}
    public Publisher<Void> download(HttpServerRequest req, HttpServerResponse resp) {
    
      try {
        String filePath = reportService.getFilePath(Integer.parseInt(req.param("id")));
    
        if (filePath == null) return resp.status(HttpResponseStatus.NOT_FOUND);
    
        Path file = Path.of(filePath);
        String filename =
          URLEncoder.encode(file.getFileName().toString(), StandardCharsets.UTF_8).replace("+", "%20");
    
        return resp
          .status(HttpResponseStatus.OK)
          .addHeader(ACCESS_CONTROL_ALLOW_ORIGIN, "*")     // CORS
          .addHeader(ACCESS_CONTROL_EXPOSE_HEADERS, "filename")
          .addHeader("filename", filename)
          .addHeader(CONTENT_TYPE, "application/octet-stream")
          .sendFileChunked(file, 0, file.toFile().length())     // or Files.size(file) ??
          ;
    
      } catch (Exception e) {
        return getErrorResponse(resp, e);
      }
    }
    Ответ написан
    Комментировать
  • Как перекодировать строки из windows 1251 в читаемый вид в java?

    @Wan-Derer
    Зобанели на Хабре, волки́ ;((
    Так получилось :)
    String a = new String("Øêàô ðàñïðåäåëèòåëüíûé îáðàçåö".getBytes("Windows-1252"), "Windows-1251");
    Ответ написан
    Комментировать
  • Как парсить imap4rev1, FETCH Response, message data?

    @Wan-Derer
    Зобанели на Хабре, волки́ ;((
    Я делал приём писем на обычном клиенте: https://jakarta.ee/specifications/mail/2.0/jakarta...
    Вроде, не так сложно получилось :)
    Почему-то оказалось что фреймворки не любят приём писем, в них в основном только отправка, пришлось делать руками :)
    Ответ написан
    2 комментария
  • Как клиенту самостоятельно менять фотографии в документе PDF?

    @Wan-Derer
    Зобанели на Хабре, волки́ ;((
    По-моему, единственный вариант для слабо подготовленного человека делать поточную работу - разработать (заказать) для него специальное приложение где есть ровно те функции, которые ему нужны:
    - загрузить шаблон документа и увидеть его превью;
    - загрузить изображение в предназначенное для него окошко шаблона;
    - подвигать/помасштабировать изображение в окошке;
    - сохранить документ в PDF.
    Ни один другой вариант не подойдёт (ну, разве что нанять человека, шарящего в Иллюстраторе и готового на потогонку).
    Я для похожей (но попроще) задачи рассматриваю формат для шаблона XSL-FO и библиотечку Apache FOP.

    ЗЫ: а так-то вообще странно что типография принимает PDF, там же качество убитое, не? По-моему, вариант школьника с Иллюстратором хорошо ложится на задачу (если я правильно её понял).
    Ответ написан
  • Как в Bootstrap поместить иконку на поле ввода?

    @Wan-Derer Автор вопроса
    Зобанели на Хабре, волки́ ;((
    Благодарю за подсказки. Если у кого-то возникнет аналогичный вопрос, оставлю то что у меня получилось (м.б. можно как-то попроще):
    <div className="mt-4 row">
      <label className="col-auto col-form-label">Фильтр:</label>
      <div className="col-7">
        <div className="input-group">
          <input type="text" className="form-control border-end-0"/>
          <span className="input-group-text bg-white">
            <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor"
                 className="bi bi-search" viewBox="0 0 16 16">
              <path
                d="M11.742 10.344a6.5 6.5 0 1 0-1.397 1.398h-.001c.03.04.062.078.098.115l3.85 3.85a1 1 0 0 0 1.415-1.414l-3.85-3.85a1.007 1.007 0 0 0-.115-.1zM12 6.5a5.5 5.5 0 1 1-11 0 5.5 5.5 0 0 1 11 0z"/>
            </svg>
          </span>
        </div>
      </div>
    </div>
    Ответ написан
    Комментировать
  • Как сделать только допустимые символы в переменную?

    @Wan-Derer
    Зобанели на Хабре, волки́ ;((
    Например, регуляркой:
    String a = "123-qwe-абв";
    
    String b = a.replaceAll("[^A-Za-z0-9]", "");
    
    System.out.println(a);
    System.out.println(b);
    Ответ написан
    Комментировать