LINUX.ORG.RU

можно поругать мою поделку - регистрация, аутентификация, сессии

 , , ,


0

2
★★★★★

Последнее исправление: den73 (всего исправлений: 1)

Вообще, печально, что на ЛОРе такое отношение к тем, кто просто хочет протестировать свое изобретение. Обязательно надо написать что-то обидное же.

Cirno
()

Удваиваю beastie. Вебом должен заниматься модуль, который отвечает чисто за веб и ничего больше. А у тебя получается как у меня на работе: всё занимаются всем. Просишь того парня, который за dba накатить базу, а он говорит, мол давай сделаю тебе батник, сам накатывай. И я понимаю, что мне придётся решать все проблемы, которые потенциально может вызвать этот батник. У тебя в коде примерно тоже самое и юзер за каким-то чёртом дёргает http.
Я делал на той неделе одну простую штуку на ноде. Она получает запрос по http, делаёт запрос к базе, засовывает результат в кеш на n секунд и отдаёт его. Так вот, чтобы добавить туда метод в api нужно просто дописать в конфиг запрос с параметрами и их типы, потому что я не настолько работяга, чтобы залазить каждый раз в код веб сервера, прописывать туда route, обработчики и т.п.
Стремись к тому, чтобы у тебя код не просто делал регистрацию юзеров, а решал общую задачу - получить запрос, преобразовать его в sql, выполнить, попутно дёргая кучку колбеков.

crutch_master ★★★★★
()
Последнее исправление: crutch_master (всего исправлений: 1)
Ответ на: комментарий от crutch_master

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

Cirno
()
Ответ на: комментарий от Cirno

А кто сказал, что комментарии должны плодотворно влиять на разработку? Этот клоун всех заутомил ещё на этапе изобретения своего языка, потом ещё больше заутомил, кудахтая о том, что есть фейл, а что есть вин, и закономерно оказалось, что даже примитивные вещи он реализовать не может. Не в моих интересах чтобы такие люди попадали в погромирование, в Макдональдсах очереди стоят, некому заказ принять, все погромируют

anonymous
()
Ответ на: комментарий от Cirno

Вообще, печально, что на ЛОРе такое отношение к тем, кто просто хочет протестировать свое изобретение. Обязательно надо написать что-то обидное же.

Бесплатные советы? Нет! Плати для самоутверждения критикующего.

anonymous
()
Ответ на: комментарий от Cirno

Спасибо! Тут интернет, не все тут добрые, такова жизнь.

den73 ★★★★★
() автор топика
Ответ на: комментарий от crutch_master

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

Дальше твои замечания делятся на две части.

1. Плохая модульность. Согласен. Но надо сначала решить задачу, а потом уже наводить архитектуру. Пока что всё вполне постижимо (мной). А так вообще модули и SOLID в реальной жизни - это не аксиома, а одна из осей инженерного компромисса. У них тоже есть своя цена - увеличение многословности.

2. Ты рекомендуешь data-driven подход. Это хорошо, когда есть эн конфигураций и известны оси, по которым производится их настройка. В моём случае это пока не так, хотя конфиг-файл у меня тоже есть и в нём порядка 10 значений.

den73 ★★★★★
() автор топика
Ответ на: комментарий от crutch_master

Нее, ну его нахер с такими импортами.

Вроде там придумали, как это делать по-нормальному:

https://habr.com/ru/post/421411/

Я, правда, не понял, не страдает ли оно от уязвимости, если код релиза в гитхабе будет изменён (а это ведь возможно).

den73 ★★★★★
() автор топика
Ответ на: комментарий от den73

Нет конечно. Они с бекенда не обновляют без релогина, в этом беда.

Deleted
()
Ответ на: комментарий от den73

2. Если ты залогинен, и тебе пришли деньги, то баланс не обновится до релогина. Даже хуже - у тебя было 100р, тебе пришло 500 - ты не можешь отправить 200р, потому что форма говорит «НЕДОСТАТОЧНО СРЕДСТВ».

Они там что, проверку баланса делают на фронтенде, что ли?

А, ну получается что так :) Причем альтернатив тинькову нет для меня, но их веб меня просто убивает. И я знаю что у других еще хуже.

Deleted
()
Ответ на: комментарий от level1

Можно чуть поконкретнее? Про форматирование сразу скажу - его делает машина, что-то там в VS Code - т.е. оно стандартное.

den73 ★★★★★
() автор топика
Ответ на: комментарий от Deleted

Могильное этого недостатка лишено. Десктоп ад. Пусть горят в Аду.

А так то ведь крутые по совокупности. Но порой вымораживают.

dk-
()
Ответ на: комментарий от WitcherGeralt

Чем? Ну лента новостей и карточек лишняя типа. Хотя порой там интересное. А так все нужное есть.

dk-
()
Ответ на: комментарий от Deleted

Вас тут пятипалых таких много и чё? ))

Deleted
()
Ответ на: комментарий от beastie

Ой, ты уже тут, не заметил сразу, сорян за лишний каст

Deleted
()
Ответ на: комментарий от den73

Но надо сначала решить задачу, а потом уже наводить архитектуру.

Тогда ты будешь решать задачу 2 раза.

Если твой DBA не хочет делать свою работу

Дело в том, что он не dba, а вместо dba. У нас в принципе тут нет такого понятия, как dba. Я не жалуюсь, это - аналогия.

В моём случае это пока не так

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

crutch_master ★★★★★
()
Ответ на: комментарий от den73

Страдает конечно, там же хеша нет. Откуда он будет знать, что там за релиз. Если поставишь хеш код может внезапно перестать собираться. А еще репозитории иногда удаляют. Тупиковый импорт совершенно.

crutch_master ★★★★★
()
Ответ на: комментарий от dk-

Лента неиллюзорно бесит. Зачем это в мобильном банке? Плюс дизайн в целом убого выглядит, а ещё чатик с поддержкой жутко бажный.

WitcherGeralt ★★
()
Ответ на: комментарий от den73

https://github.com/budden/semdict/blob/master/pkg/user/registrationform.go#L2...

	var user RegistrationData
	user.Nickname          = ...
	user.Registrationemail = ...
 	user.Password1         = ...
	user.Password2         = ...

        if appErr := doRegistrationFormSubmit(...), appErr == nil {

И в доке нужен не подстрочник, а описание того, что в функции действительно значимого происходит.

level1 ★★
()
Ответ на: комментарий от crutch_master

Я не жалуюсь, это - аналогия.

А я не принимаю эту аналогию, потому что дело именно в этом. Когда я пишу что-то в одно лицо, мне проще держать всё в голове, чем развести x10 писанины только ради удовлетворения каких-то заповедей. Когда проект разделён на мельчайшие модули, в которых 90% формы и только 10% содержания, мне настолько тоскливо это видеть, что я не могу себя заставить хоть что-то делать. Это реальная проблема, и я понимаю, что это моя проблема. Но вообще с т.з оптимизации процесса разработки границы модулей должны быть по границе людей, проектов, атомарных команд. Если наблюдается «три единства классицизма», т.е. единство времени, места и действия, то это один модуль. Потому что он загружается в голову целиком и постигается тоже целиком. Я в это верю. Если чел один, то границы модулей - по границе повторного использования. У меня единичный функционал, который я не собираюсь (пока) повторно использовать.

Если ты хочешь сделать что-то повторно используемое, то сразу встаёт вопрос: как переиспользовать, что параметризовать. Это отдельный вопрос и он не простой. Решать его на раннем этапе - это преждевременная оптимизация. Пока у меня задача, если она есть - это сделать конкретное приложение. А модуль аутентификации я начал писать не ради модуля аутентификации, а по той причине, что не нашёл готового. Т.е. я делал его не ради повторного использования, а ради однократного.

Я понимаю, что всё, что я пишу - это ересь и что ни в какой команде меня не поймут. Так, пишу для себя, чтобы хотя бы самому не разубедиться, что я сделал для своих целей правильно :)

den73 ★★★★★
() автор топика
Ответ на: комментарий от crutch_master

Тогда ты будешь решать задачу 2 раза.

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

den73 ★★★★★
() автор топика
Ответ на: комментарий от crutch_master

В итоге будет конфиг-файл проекта по которому будет понятно кто где и зачем.

Так все мои обработчики помещаются на одной странице текста, откуда можно за одно нажатие кнопки перейти и понять, что они делают. Но не будем спорить, оба подхода имеют право на жизнь. Возможно, для показа твой вариант и лучше.

den73 ★★★★★
() автор топика
Ответ на: комментарий от crutch_master

Страдает конечно, там же хеша нет.

Там есть ещё вендоринг, т.е. ты копируешь нужные тебе версии в свой репозиторий и дальше не зависишь от сторонних репозиториев. Я только не знаю, сделали ли они, чтобы можно было не патчить исходники, а просто сказать, что «github.com/budden/semdict» - это такая-то директория. Возможно, в статье про это написано - у меня пока руке не дошли.

Как раз есть повод, значит посмотрим:

Как я понял, они вот это сейчас предлагают в качестве решения:

https://golang.org/cmd/go/#hdr-Module_proxy_protocol

Т.е. подмена модуля происходит на уровне сети, ты скачиваешь зависимости не из интернета, а из «своего интернета». Надо сказать, я бы до такого не додумался. Когда я придумывал библиотеки в Яре, я додумался до наличия в проекте файлика, который разрешал бы имя библиотеки в способ её получения, и давал бы ей имя, локальное в пределах проекта. Поддержка этого файлика - отдельный вопрос, например, можно было бы написать инструмент для этого. В голанге есть неоднозначность, например, errors уже неоднозначен, можно заимпортировать разное и поиметь проблем. Т.е. то, что алиасом библиотеки является одно слово - это будет проблема с масштабированием. По сути, в голанге примерно так же и сделали.

Идея в том, что имя библиотеки привязано к интернету, в целом здравая, т.к. интернет гарантирует глобальную уникальность. приятно ли видеть экспорты в виде такой простыни в каждом исходнике - не факт. Зато система проста и однозначна, а ведь Голанг - это Оберон, так что это вполне в духе языка.

den73 ★★★★★
() автор топика
Последнее исправление: den73 (всего исправлений: 1)
Ответ на: комментарий от crutch_master

Кстати не, конечно же, они недодумали, т.к. они потом стали вводить url-ы с версиями. Т.к. в принципе возможно применение двух разных версий одной и той же библиотеки в одном проекте. Например, взять какой-нибудь конвертер файлов - там понадобятся разные версии читалки для разных версий формата.

den73 ★★★★★
() автор топика
Ответ на: комментарий от den73

Т.е. подмена модуля происходит на уровне сети, ты скачиваешь зависимости не из интернета, а из «своего интернета»

Но зачем так извращаться? Можно просто скопировать код себе в src/lib/ и делать импорт оттуда.

Идея в том, что имя библиотеки привязано к интернету, в целом здравая

Чем? Гитхаб через n лет закроют и ты будешь бегать править ссыкли по всему проекту?
Ты просто пишешь make и проект просто собирается и всё. Ничего больше не нужно.

crutch_master ★★★★★
()
Последнее исправление: crutch_master (всего исправлений: 2)
Ответ на: комментарий от den73

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

crutch_master ★★★★★
()
Ответ на: комментарий от level1

У меня так:

	var rd RegistrationData
	rd.Nickname = c.PostForm("nickname")
	rd.Registrationemail = c.PostForm("registrationemail")
	rd.Password1 = c.PostForm("password1")
	rd.Password2 = c.PostForm("password2")
	appErr := doRegistrationFormSubmit(c, &rd)
	if appErr == nil {
Ты предлагаешь так:
	var user RegistrationData
	user.Nickname          = ...
	user.Registrationemail = ...
 	user.Password1         = ...
	user.Password2         = ...

        if appErr := doRegistrationFormSubmit(...), appErr == nil {
Отвечаю. RegistrationData - это не пользвоатель, а данные, которые аноним ввёл в форме регистрации. Пользователь тоже есть, и это другое - это тот, кто уже зарегистрировался. Так что rd - это название правильное в рамках моей раскладки понятий.

Насчёт if appErr := , - я это где-то подсмотрел и это достаточно популярно. Здесь хорошо то, что appErr определена только в рамках данного if , т.е. можно потом опять писать appErr :=

Но да, в определённых случаях громоздко. В случае, если помещается в одну строку, честно сказать, криминала не вижу.

Насчёт доки ты прав. Но я стараюсь, по «чистому коду», кодировать смысл функции в её названии, а линтер требует документацию для всех экспортов. В таких случаях я и пишу «на отженись». Что посоветуешь?

den73 ★★★★★
() автор топика
Последнее исправление: den73 (всего исправлений: 2)
Ответ на: комментарий от crutch_master

Можно просто скопировать код себе в src/lib/ и делать импорт оттуда.

Это один из их старых вариантов, вендоринг. Ты копируешь всё в vendor и оттуда берёшь. Но он требует патчить импорты прямо в исходных файлах, что, как ты понимаешь, «очень удобно».

Ничто не мешает иметь прокси, который возьмёт файлы из этой же локальной директории vendor, при этом патчить исходники не придётся. Это решит вопрос и с гроханьем либы.

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

den73 ★★★★★
() автор топика
Последнее исправление: den73 (всего исправлений: 2)
Ответ на: комментарий от den73

Но он требует патчить импорты прямо в исходных файлах, что, как ты понимаешь, «очень удобно»

В ../lib либы. В каждой либе .git/ В чём проблема?

Ничто не мешает иметь прокси

Ты предлагаешь пляски с прокси, но ради чего? Ты можешь сделать просто import "lib/mylib" и всё. Либы сложить в ../lib, в твоём проекте сделать на них ссылку, внутри каждой либы - её git, который ты можешь апдейтить и патчить как хочешь.

crutch_master ★★★★★
()
Ответ на: комментарий от den73

И я рад, что я запрыгиваю в этот поезд именно тогда, когда эта проблема уже решена

Не было никогда никакой проблемы.

crutch_master ★★★★★
()
Ответ на: комментарий от den73

Кстати, что происходит, если либа на которую ты сделал импорт ссылается на другую либу с гитхаба? npm помойка?

crutch_master ★★★★★
()
Ответ на: комментарий от den73

Вот я тебе отформатировал. Ты не видишь, что Registrationemail выбивается из ряда? И зачем с структуре с именем Registration дублировать это в поле?

А что добавляет 'Data' к пониманию имени?

appErr это по имени типа? - простого err, конечно, недостаточно.

Ну, пиши 'rd', 'c', 'data' если у тебя так мозг работает. Но я читать такое не буду.

level1 ★★
()
Ответ на: комментарий от den73

Никогда не было необходимости делать импорты прямо с гитхаба.

crutch_master ★★★★★
()
Ответ на: комментарий от crutch_master

Ты предлагаешь пляски с прокси, но ради чего?

Мой проект ссылается на pkg/errors и характеризует его как github.com/pkg/errors. Мой проект использует gin. gin использует github.com/pkg/errors. Дальше что?

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

den73 ★★★★★
() автор топика
Ответ на: комментарий от level1

Ты не видишь, что Registrationemail выбивается из ряда?

А, вот ты про что. Я не заметил. Ну да, можно было бы сделать по-другому.

Ну, пиши 'rd', 'c', 'data' если у тебя так мозг работает. Но я читать такое не буду.

Куда ты денешься? c *gin.Context, t *Testing.T. Это - стиль языка, его придумал не я, но я его, кстати, одобряю. Потому что я читаю код только в IDE, если не понимаю, что происходит, подвожу мышь и вижу типы. Такой код (с выводом типов) и предназначен для чтения в IDE.

den73 ★★★★★
() автор топика
Последнее исправление: den73 (всего исправлений: 1)
Ответ на: комментарий от den73

А вообще в математике всегда переменные обозначают одной буквой, и ничего. 2300 лет полёт нормальный.

den73 ★★★★★
() автор топика
Ответ на: комментарий от crutch_master

А в го нельзя никак делать импорт, кроме как через гитхаб?

Через адрес репозитория в интернете. Есть команда go get ./... которая автоматически загружает все зависимости, если ты хипстор. Соответственно, при прокси ставишь одну переменную окружения, и работаешь через прокси. Исходники не меняются, версии под контролем. Всё пучком.

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

den73 ★★★★★
() автор топика
Последнее исправление: den73 (всего исправлений: 2)
Ответ на: комментарий от crutch_master

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

den73 ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.