Pull to refresh

Comments 23

В общем-то даже тот факт, что мозги кроманьонцев в среднем большего размера, чем у современного человека намекает, что тогда интеллект был в целом более востребованным.

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

Я не очень хорошо понял, что вы хотели сказать.
Создаётся впечатление, что вы не согласны с тем, что интеллект ранее был более востребован, чем сейчас и думаете, что гораздо больше была востребована физическая сила и дыхалка.
И у вас сарказм. В этом ключе и буду отвечать.


Касательно дыхалки, столь необходимой для охоты на мамонта


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


Касательно транспортировки


Конечно, транспортировать мамонта труднее, чем сидеть на диване, но вооще разделил на части и понёс.


Касательно кроманьонцев, убалтывающих неандертальцев


У среднестатистического неандертальца мозг был ещё крупнее, чем у среднестатистического кроманьонца.
Так что поди ты такого уболтай.


Ну и в общем про мышцы и мозги


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

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

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

Если вы хотите что-то узнать — задайте вопрос. В ваших комментах нет ни одного вопроса.

Что статья про web-приложения, а не про кроманьонцев.

Пожалуй, способ донести вашу мысль более туманно, придумать было непросто.


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


Об этом, собственно, ветка коментариев. Зачем вы в ветке коментариев, посвящённой вопросу о том, нужен интеллект для охоты на мамонтов, или нет, написали, что статья про веб-приложения :)?

Потому что статья про web-приложения. И если приглядываться внимательнее, то на картинке — персонажи из компьютерной игры Far Cry (компьютерная графика бросается в глаза даже тем, кто в принципе не знает, что такое компьтерная графика). Зачем вы с коллегой kk86 в статье про web-приложения с КДПВ из компьютерной игры начали обсуждать необходимость интеллекта в охоте на мамонтов — это вопрос из раздела "загадочные тайны безграничной Вселенной". Ну, коллега, допустим, блеснул знанием английского. А чем блеснули вы?

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


Хотя, наверное, на ваш вопрос можно ответить проще и короче. За нашим с kk86 обсуждением необходимости интеллекта в охоте на мамонтов в комментариях к статье про веб-приложения стоит та же загадочная и таинственная сила, что побудила вас в начале статьи про веб-приложения рассуждать о необходимости интеллекта в охоте на мамонтов и даже вставить туда картинку с мамонтами и кроманьонцами. Мистика :). Особенно мистически всё выглядит, если учесть, что мамонты и кроманьонцы из компьютерной игры. Это же всё в корне меняет!


Ну и это. kk86 блеснул своей эрудицией в области жизни первобытных людей, а не знанием английского языка. Могли бы заметить и оценить :(. Хотя, возможно для вас знание английского — серьёзное достижение, по сравнению с которым пещерные люди просто чушь, не стоящая внимания.

Поэтому приоритетом в web-разработке должен быть понятный код, а не код минифицированный, код красивый или код быстроработающий.

+1 за понятный код.

Иначе получается трудноподдерживаемый монстр, который поддерживает армия программистов.
И сложность все время только возрастает. :)

Пока же создание очередного web-приложения зачастую начинается с проектирования собственной структуры данных для аутентификации пользователей.

Говорят, эту проблему решают фреймворки. Или нет? :)
Говорят, эту проблему решают фреймворки. Или нет? :)
нет :(
cookiecutter https://github.com/pydanny/cookiecutter-django
Прекрасно решает эту, а также много других проблем. Писать велосипеды для авторизации и прочего каждый раз — не найс.

Я надеюсь, мы все-таки говорим за аутентификацию — она несколько до проблемы авторизации стоит. Сначала мы узнаем, с кем имеем дело, а у же потом — какие у него права доступа и к чему.


Cookiecutter Django is a framework for jumpstarting production-ready Django projects quickly

Допускаю, что cookiecutter прекрасно решает эту проблему для Django-проектов. Это как Ruby on Rails, только Django. А если ваш заказчик настаивает, чтобы backend вашего web-приложения был написан на PHP/Java/C#/JavaScript/… — какие фреймворки с готовой аутентификацией вы мне посоветуете? Или, допустим, ваш заказчик хочет иметь в своем web-приложении двухфакторную аутентификацию (через SMS — самый распространенный вариант)? Это ведь тоже уже достаточно "велосипед" — кукикаттер имеет решение этой проблемы хотя бы для Django-проектов?

Без проблем, думаю под каждый язык есть достаточно развитый фрэймворк. Под c# есть Asp.Net MVC со встроенной аутентификацией\авторизацией, которую при желании можно кастомизировать как душе угодно.

Было бы любопытно сравнить предлагаемые структуры данных, обеспечивающие аутентификацию, допустим, в Asp.Net MVC и в cookiecutter.

добавил бы в подборку «аспектов»:
— для серьезно-сложных разработок не забывать о хорошем тестировании (TDD)
— предпочитать готовые фреймворки и библиотеки разработке велосипедов с нуля (за редкими исключениям)

«аспект» адаптивность хорошо бы заменить другим, так как это понятие зарезервировано в области веб-решений под понятие гибкой работы фронта на разных устройствах (разные ОС, браузеры, разрешения екранов и тп). Например, обеспечение легкой модифицируемости архитектуры и кода ПО.

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

Спасибо за дополнения, коллега Vlad_fox.


Я, возможно не очень явно, тему тестирования затрагивал в "Там на неведомых дорожках...". TDD входит в конфликт с первыми двумя пунктами — приспосабливаемость (раз уж "адаптивность" устойчиво ассоциируется с версткой) и неопределенность. Поэтому у меня к нему очень настороженное отношение. Безусловно полезная вещь при наличии ресурсов и ясного представления о предмете разработки. При недостатке ресурсов или отсутствии ясного понимания что и как делать TDD становится обузой или тормозом. Но тестирование в том или ином виде (и лучше автоматическом) быть обязано — иначе "асфальт не натоптать" (если только толпы пользователей не запустить).


Необходимость использования готовых фреймворков и библиотек я пытался отразить в пунктах "Модульность" и "Муравейник". Тоже, наверное, достаточно неявно. Пока что мы даже на уровне данных еще не имеем каких-либо стандартов для даже таких древних "велосипедов", как аутентификация. Хотя, казалось бы, почему бы не выработать одну-две-три схемы для подобной структуры? Сколько я различных названий видел для первого поля аутентификационной формы — login, user, username, email. Можно ведь описать в XSD типовые структуры данных (одно- и двух-факторная аутентификация, с уникальным email'ом у пользователя или группой email'ов, с физическим представителем юридческого лица и т.д.) и преобразовывать структуру в SQL/NoSQL/Files/InMemory/… В Java подобные попытки делались. Я понимаю, что зафункционалить все стандартно на различных языках программирования невозможно, но на уровне структур данных можно найти консенсус, разве нет? Хотя наверно, проще написать свой "велосипед" на тему аутентификации, чем всем вместе договориться использовать единую схему данных.

Пока же создание очередного web-приложения зачастую начинается с проектирования собственной структуры данных для аутентификации пользователей.

yii2-user
FOSUserBundle
laravel-users
ZfcUser

Спасибо, коллега! Приятно видеть, что в PHP-среде есть подвижки в этом направлении. Вытащил в том или ином виде структуры данных для каждого из модулей:


yii2-user:


/**
 * User ActiveRecord model.
 *
 * @property bool    $isAdmin
 * @property bool    $isBlocked
 * @property bool    $isConfirmed
 *
 * Database fields:
 * @property integer $id
 * @property string  $username
 * @property string  $email
 * @property string  $unconfirmed_email
 * @property string  $password_hash
 * @property string  $auth_key
 * @property string  $registration_ip
 * @property integer $confirmed_at
 * @property integer $blocked_at
 * @property integer $created_at
 * @property integer $updated_at
 * @property integer $last_login
 * @property integer $flags
 *
 * Defined relations:
 * @property Account[] $accounts
 * @property Profile   $profile
 *
 * Dependencies:
 * @property-read Finder $finder
 * @property-read Module $module
 * @property-read Mailer $mailer
 *
 * @author Dmitry Erofeev <dmeroff@gmail.com>
 */

FOSUserBundle:


    /** @var mixed */
    protected $id;
    /** @var string */
    protected $username;
    /** @var string */
    protected $usernameCanonical;
    /** @var string */
    protected $email;
    /** @var string */
    protected $emailCanonical;
    /** @var bool */
    protected $enabled;
    /** @var string The salt to use for hashing. */
    protected $salt;
    /** @var string Encrypted password. Must be persisted.*/
    protected $password;
    /** @var string Plain password. Used for model validation. Must not be persisted. */
    protected $plainPassword;
    /** @var \DateTime */
    protected $lastLogin;
    /** @var string Random string sent to the user email address in order to verify it.*/
    protected $confirmationToken;
    /** @var \DateTime */
    protected $passwordRequestedAt;
    /** @var Collection */
    protected $groups;
    /** @var array */
    protected $roles;

Laravel:


        Schema::create('users', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
            $table->string('email')->unique();
            $table->string('password', 60);
            $table->rememberToken();
            $table->timestamps();
        });

ZfcUser:


    CREATE TABLE user
    (
        user_id       INTEGER PRIMARY KEY AUTO_INCREMENT NOT NULL,
        username      VARCHAR(255) DEFAULT NULL UNIQUE,
        email         VARCHAR(255) DEFAULT NULL UNIQUE,
        display_name  VARCHAR(50) DEFAULT NULL,
        password      VARCHAR(128) NOT NULL,
        state         SMALLINT
    ) ENGINE=InnoDB;

По ним можно видеть, какую функциональность в дополнение к аутентификации (не)предлагает соотв. модуль для соотв. фреймворка. Вполне возможно с одним фреймворком можно (будет) использовать разные модули с различными схемами данных, обеспечивающими различный функцонал (базовый, расширенный, специализированный). И вполне возможно, различные модули для различных фреймворков будут имплементировать одинаковые структуры данных. И вполне возможно, что эти структуры данных будут одинаковы не только для различных модулей различных PHP-фреймворков, но и для аналогичных модулей Java/C#/Python/… фреймворков.


Какая разница, на чем написан server side, если он работает с MySQL/Postrgres/MongoDB/Oracle/… и решает одни и те же задачи (authentication, password management, etc.)? Структуры данных должны соответствовать решаемым задачам, а не тому языку, на котором происходит обработка этих данных.

Sign up to leave a comment.

Articles