LINUX.ORG.RU

Сообщения dimuska139

 

На чём разрабатывать бэкенд под Linux: Java или ASP.NET?

Обычно в бэкенд-разработке юзаю php и Go (ещё немного Python), но регулярно слышу и читаю где попало о том, что это «не серьёзные инструменты». Понятное дело, что особо близко не принимаю к сердцу подобные заявления, но возникла мысль изучить для себя (по крайней мере, пока что) либо Java, либо ASP.NET Core для написания различных «серьёзных» API. Понятно, что для себя без разницы что изучать, но хотелось бы определиться.

Мне ASP.NET Core, на первый взгляд, приглянулся (в плане синтаксиса, т.к. Typescript напоминает, с которым я имел дело), но задался вопросом: насколько удобно вообще разрабатывать на нём под Linux? Или это всё же лучше делать на стеке Microsoft? Гуглил, читал - мнения у людей расходятся. Кто-то за Java топит, кто-то - за C#. Кто-то вообще пишет, что Java умирает, нафиг никому не упала, и ничего нового на ней не начинают.

 ,

dimuska139
()

Перезагрузка вместо выключения

Столкнулся с неприятной ситуацией: компьютер под Linux Mint 20 вместо выключения перезагружается. То есть он как бы выключается, но, спустя мгновение, вновь включается. Выключить можно либо зажав кнопку на системном блоке, либо нажав её один раз, находясь в Bios. Причём началось это внезапно, и я не могу установить какую-то закономерность. Комп - новый, месяца 2-3 ему, проблема появилась месяц назад примерно.

Казалось бы, при чём тут Linux? Однако у меня есть старый жесткий диск с Виндой - и при выключении в Винде такой проблемы нет. Что я предпринимал (безуспешно), чтобы решить проблему?

  • Выключил Wake-on-LAN в Bios (на самом деле, он и был выключен)
  • Сбрасывал Bios
  • Вытаскивал LAN-кабель
  • Перепробовал различные варианты выключения через терминал (shutdown -h now в том числе)
  • Обновил Bios
  • На пустой новый SSD установил Linux Mint (подумал, может кривой апдейт прилетел) - аналогичная ситуация наблюдается и на чистой системе
  • Отключал все жёсткие диски и ssd, оставлял только m2 с системой
  • Отключал все подключённые к USB устройства, кроме мыши, ставил в другие разъёмы и т.п. - бесполезно.
  • В /etc/default/grub прописал GRUB_CMDLINE_LINUX_DEFAULT="quiet acpi=force reboot=acpi splash"

Ничего не помогает. Подскажите, пожалуйста, что ещё можно проверить? Закралась мысль, что что-то с блоком питания, но тогда странно, что Винда нормально выключается. Да и блок питания новый.

OS: Linux Mint 20

Ядро: 5.4.0-53-generic

Комп: AMD Ryzen 9 3900X/GIGABYTE X570 AORUS MASTER/2*16ГБ/RTX2060S-8ГБ/512ГБ/4ТБ

 , , ,

dimuska139
()

ORM vs SQL

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

Понятно, что если не использовать ORM, то производительность приложения будет, скорее всего, повыше, и понятно, что ORM обычно накладывает определённые ограничения.

Но приведу пример. У меня есть API-эндпоинт, возвращающий список некоторых сущностей. Там есть вариантов сортировки штук 10, штук 20-30 вариантов опциональной фильтрации и пагинация. Причём для некоторых вариантов фильтрации нужно делать дополнительные JOIN или подзапросы. Я это реализовал через Doctrine DBAL - и получилось довольно удобно и вполне читабельно. Генерируемый SQL-запрос оптимальный и вполне шустро работает.

Но вот чего понять не могу, неужели вы (при разработке без ORM и квери-билдеров) руками конкатенируете строку запроса? Если да, то как вы потом эту адскую лапшу кода разбираете и как контролируете, чтобы запрос не получился невалидным (где-то пробел забыли и т.п.)?

Хотелось бы услышать противников использования ORM и квери билдеров, как вы решаете такие задачи? И на что маппите результаты запросов? На обычные массивы, не на объекты?

 ,

dimuska139
()

Какие есть реальные преимущества написания Rest API на Java?

Всем привет! Напишите по своему опыту, какие есть реальные преимущества и недостатки создания Rest API на Spring + Hibernate? Интересует в сравнении с Go/NodeJS/Python/Php. Например, в каких случаях API лучше пилить именно на Java?

 ,

dimuska139
()

PostgreSQL процесс OKA

Периодически (закономерность не смог установить) PostgreSQL 12 запускает некий процесс с названием OKA. Все бы ничего, но он сжирает почти всю память. Нашел в папке PostgreSQL файлы oka и oka.pid, судя по всему, отвечающие за этот процесс.

Что это за процесс и почему он отъедает столько памяти?

 ,

dimuska139
()

Выбор блочного редактора для админки сайта

Всем привет! Подскажите, пожалуйста, есть ли какие-то аналоги блочного редактора Gutenberg (который в Wordpress), но которые можно юзать в своих проектах? Есть вообще EditorJS, но хотелось бы иметь какую-то альтернативу, на которую, если что, можно будет перескочить. Гугл не помогает. Такое ощущение, что кроме EditorJS и Gutenberg редакторов такого типа больше и не существует вовсе.

P.s. сразу же поясню, чем привлекают именно блочные редакторы:

  • Контент отдается не в html, а в json, что позволяет для каждого блока определять свои правила и особенности рендеринга при отрисовке страницы потом. Грубо говоря, при рендеринге страницы json-контент статьи в js объекты (блоки) декодируешь, потом по ним циклом идешь и отрисовываешь в зависимости от типа блока так, как хочешь, html-теги убираешь или добавляешь, если надо.
  • Возможность создавать свои блоки (например, блок с калькулятором ипотеки или рекламный блок, которые можно размещать между абзацами статей - в обычных редакторах, отдающих html, придется парсить html для того, чтобы это реализовать)
  • Нет лишних html-тегов

 , , ,

dimuska139
()

Валидация multipart/form-data в Gin/Gonic (Golang)

Не получается валидировать multipart/form-data. Есть два поля: img (картинка) и alt (текст). Как правильно валидировать ситуацию, когда юзер картинку не передает? Делаю вот так:

type ImageUploadForm struct {
	Alt    string `form:"alt" binding:"required"`
	Img  *multipart.FileHeader `form:"img" binding:"required"`
}

func (ctr *imagesController) Upload(c *gin.Context) {
	var imgForm forms.ImageUploadForm
	if err := c.MustBindWith(&imgForm, binding.FormMultipart); err != nil {
		c.Error(err)
		return
	}
        /// Тут дальше обработка, к проблеме уже не относится
}

Код довольно сильно упростил, но, думаю, понятно. Проблема в том, что так не работает. То есть если не указать alt при сабмите формы, то MustBindWith кидает ошибку - все в порядке. Но если не отправлять файл в img, то MustBindWith ошибку почему-то не возвращает. Вопрос: почему и как сделать правильно?

P.s. в заголовке Content-Type передаю multipart/form-data - тут все ок

 ,

dimuska139
()

Linux Mint Cinnamon масштабирование интерфейса для одного монитора

Использую ноутбук и монитор, подключенный к нему. На ноутбуке монитор с более высоким разрешением - из-за этого картинка на мониторе ноутбука более мелкая, что создает дискомфорт при работе. Смена разрешения на ноутбуке на более низкое не сильно помогает. В Винде эта проблема решается с помощью масштабирования интерфейса одного из мониторов. В Linux Mint Cinnamon можно, судя по всему, масштабировать интерфейс только сразу на двух мониторах, что в данном случае бессмысленно. Можно ли как-то настроить масштабирование только для экрана ноутбука?

 , , ,

dimuska139
()

Импорт пакетов в Go из подгрупп Gitlab

Начну сразу с того, что эту тему я создал не для обсуждения GOPATH (юзаю модули, не актуально).

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

import "github.com/username/project"

То есть сначала идет домен, потом юзер, потом проект. Но, кроме Github, есть еще и Gitlab, например. И в нем могут быть группы, в которые вложены другие группы, в которых уже идут проекты. Как правильно сделать импорт таких библиотек? То есть что-то типа такого:

import "gitlab.com/username/customgroup/customsubgroup/project"

И это не работает. Уже извращался с replace (https://github.com/golang/go/wiki/Modules#when-should-i-use-the-replace-direc...) - не помогло.

Есть какие-то нормальные способы сделать импорт go-либы из Gitlab, которая находится внутри группы?

 , ,

dimuska139
()

Выбор перспективного фреймворка для REST Api

Всем привет. Пытаюсь выбрать «идеальный» бэкенд-фреймворк для REST Api либо на Питоне, либо на Go. Конкретные кейсы не озвучу, потому что скажешь «блог» - посоветуют Вордпресс. Выбор между этими языками странный, согласен, но все же. Выбираю между aiohttp (Python), fastapi (Python) и gin/gonic (Golang). Синхронщину типа Flask (Python) я отмёл, потому что, мне кажется, в плане производительности их в 2019 уже не особо перспективно использовать. Тем более, что особой разницы в плане «удобства» разработки, что на Flask, что на aiohttp нет (оба микрофреймворки), а второй явно шустрее. В Django много лишнего, а drf для него медленный очень - тоже отмел. Помогите определиться с выбором, на чем из перечисленного на текущий момент пилить REST Api более перспективно и удобно сайты среднего размера различной тематики у которых фронтенд в виде SPA? Ну, скажем, современный интернет-магазин. Есть ли вообще смысл юзать питоновскую асинхронщину нынче, когда есть го?

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

 , ,

dimuska139
()

Общие модели в Django

Всем привет! Делаю сайт на Django и задался вопросом архитектуры. Поясню: у меня в проекте есть статьи, пользователи и другие сущности, находящиеся в разных пакетах проекта (приложениях), но все они имеют изображения (где-то только одно, где-то их может быть много). Вижу два наиболее подходящих варианта: 1) Сделать отдельное приложение utils, в котором создать общую для всех изображений модель Image и сделать её универсальной. Модели, которые имеют изображения, с помощью ForeignKey или ManyToMany связываются с моделью Image. На мой взгляд, основной недостаток тут в том, что получается сильная связанность между приложениями. 2) В каждом приложении создать свою модель Image, поля которой будут различаться незначительно (а, возможно, и вовсе одинаковыми будут). Тут вижу недостаток в дублировании кода либо частичном, либо полном. Какой из этих двух вариантов вам кажется наиболее удачным?

 ,

dimuska139
()

Формы в React

Всем доброго времени суток, друзья! Являюсь бэкенд-разработчиком, но решил-таки освоить что-то из мира фронтенд-разработки помимо пресловутого jQuery. Выбрал React - и поначалу всё было гладко, пока не столкнулся с формами.

Мне нужно сделать форму для редактирования статей. То есть у меня есть компонента со списком названий статей и кнопками «редактировать» рядом с каждой. При нажатии на неё у меня должен выполняться аякс-запрос (получение самой статьи) и после этого должна открываться другая «страница» с формой, в которую подставлены значения из статьи (название, сам текст статьи и т.п.).

Вопрос заключается в том, что не понимаю, как правильно передать в компоненту «форма редактирования статьи» данные, которые вернул ajax. Через props - не катит, иначе будет readonly, через конструктор тоже, потому что объект компоненты «форма редактирования статьи» создаётся лишь один раз - при повторных нажатиях на «редактировать» буду видеть в форме значения предыдущей статьи. Как вообще это правильно делать? Очень не хочется юзать ref, потому что выглядит это как костыль какой-то.

 ,

dimuska139
()

RSS подписка на новые темы