Pull to refresh
-30
Александр Лебедев @Amikkoread⁠-⁠only

Разработчик

Send message
>> загрузить это добро в навигационные программы.
Точно! Вместо информации о камерах, которая в навигаторах сейчас.
Водитель обязан соблюдать скоростной режим везде: как на аварийно-опасных участках, так и в лесу, где проезжает 1 машина в час. Штрафовать за превышение нужно в обоих случаях одинково жёстко. Камеры ставить в обоих случаях, и чем больше, тем лучше. Очевидно, что аварийно-опастные участки можно просто сплошняком закрыть видео-наблюдением (и это нужно сделать), а вот участки в пустынной местности в силу своей необъятности будут контролироваться точечно. Так вот места этих точек установки камер должны быть закрытой информацией. Дабы водитель не знал где камера и чувствовал над собой дамоклов меч штрафа постоянно, а не когда навигатор подскажет «впереди камера».

Разглашение информации о местах установки камер должно быть законодательно запрещено, и должны быть административные введены меры против подобного софта и его производителей. Чтобы никаких «впереди камера» в навигаторах не было.
Не достаточно. Во-первых, у каждой из сторон переговоров должен быть свой переводчик просто вследствие того, что доверять чужому человеку в вопросах точной передачи информации без намеренных или случайных искажений — глупо.
Во-вторых, качество перевода с родного языка на неродной и с неродного на родной обычно отличается, если только переводчик не идеальный билингв, знающий оба языка с детства одинаково совершенно.
Нужен российский аналог Гитхаба, удобный, бесплатный для оупенсорса и мелкого не-оупенсорса. По идее спрос уже есть (я бы вот перенёс свои полтора проекта), так что ждём когда кто-то подсуетится и застолбит эту нишу.
Про декораторы функций (и методов) всё пережёвано уже много раз.
О декораторах классов бы статью.
Вспомнился изумительный Стивенсон))
Многим невдомек, — объясняет Ави...

— Многим невдомек, — объясняет Ави, — что слово, которое мы произносим и пишем «нирвана», правильнее транслитерируется «нирдвана» или «нердвана». Это — нердвана. Ядро, вокруг которого возникла Акихабара. Сюда пасокон отаку отправляются за нужными деталями.


— Кто-то?


Пасокон отаку. Фанатики персональных компьютеров, — говорит Ави. — Здесь, как и во многом другом, японцы дошли до невообразимой крайности.


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


— Как кстати! — говори Ави. — Нам надо поговорить о проводах.


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


— Расскажи мне о проводах, — говорит Рэнди.


— Можно не объяснять, как сильно мы зависим от подводных кабелей, — начинает Ави.


— Мы — это Крипта или общество в целом?


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


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


— И что?


— Провода уязвимы.


Они проходят мимо лотка, специализирующегося на «банановых» штекерах. Целый ряд занимают пестрые розетки «крокодилов», прищепленных к картонным кругам...



(«Криптономикон»)
Спасибо! Это должно бы быть в самой статье. А то слова перечислили, а как произносить, не написали.

А если я радикальный интроверт и предпочитаю обедать в одиночестве?

В какой-нибудь джаве было бы
class MockUsersRepository implements FindableByIdInterface, ProvidesAuthenticationInterface
что ровно то же самое множественное наследование, которое обозвали словом implements. Собственно, как написали в комменте ниже, наличие интерфейсов на уровне синтаксиса — результат того, что разработчики компилятора не шмогли или поленились реализовать полноценное множественное наследование и предоставили вместо него легковесный суррогат — интерфейсы.

Питон динамический язык. За строгими проверками во время компиляции — это к товарищам C#, Java…

pass — это просто элемент синтаксиса. Впрочем, в сколько-нибудь нетривиальных случаях вместо pass пишут док-строку к методу.
"""Method description."""

В этом файлике две публичные функции get_token, rotate_token и один публичный класс CsrfViewMiddleware. Прочие функции приватные в соответствии с соглашением об именовании.
from abc import ABC, abstractmethod
from typing import Mapping, Optional
import hashlib


def hashfunc(string: str) -> str:
    return hashlib.md5(string.encode("utf-8")).hexdigest()


class Request(ABC):
    @property
    @abstractmethod
    def form(self) -> Mapping[str, str]:
        pass


class MockRequest(Request):
    def __init__(self, dummy_form: Mapping[str, str]) -> None:
        self.dummy_form = dummy_form

    @property
    def form(self) -> Mapping[str, str]:
        return self.dummy_form


class Identifiable(ABC):
    @abstractmethod
    def get_id(self) -> int:
        pass


class Authenticable(ABC):
    pass


class User(Identifiable, Authenticable):
    def __init__(self, id: int, email: str, password_hash: str
                 ) -> None:
        self.id = id
        self.email = email
        self.password_hash = password_hash

    def get_id(self) -> int:
        return self.id

    def get_email(self) -> str:
        return self.email

    def get_password_hash(self) -> str:
        return self.password_hash

    def __repr__(self) -> str:
        return f"id=={self.id}, email=={self.email}, password_hash=={self.password_hash}"


class FindableById(ABC):
    @abstractmethod
    def find_by_id(self, id: int) -> Optional[Identifiable]:
        pass


class ProvidesAuthentication(ABC):
    @abstractmethod
    def find_using_credentials(self, email: str, password: str
                               ) -> Optional[Authenticable]:
        pass


class MockUsersRepository(FindableById, ProvidesAuthentication):
    def __init__(self):
        self.dummy_users = (
            User(1, "example@company.ru", hashfunc("123")),
            User(2, "test@ya.ru", hashfunc("456")),
            User(3, "foobar@gmail.com", hashfunc("789")),
        )

    def find_by_id(self, id: int) -> Optional[Identifiable]:
        return next((
            user for user in self.dummy_users if user.get_id() == id),
            None
        )

    def find_using_credentials(self, email: str, password: str
                               ) -> Optional[Authenticable]:
        for user in self.dummy_users:
            if user.get_email() == email \
                    and user.get_password_hash() == hashfunc(password):
                return user
        return None


class AuthController:
    def login(self, request: Request,
              repository: ProvidesAuthentication):
        user = repository.find_using_credentials(
            request.form["email"], request.form["password"])
        # debug print:
        print(f"user: {user}")
        if user:
            ...  # login and redirect to '/index'
        else:
            ...  # render template login_form.html


if __name__ == "__main__":
    authController = AuthController()
    request = MockRequest({
        "email": "test@ya.ru",
        "password": "456",
    })
    users_repository = MockUsersRepository()

    authController.login(request, users_repository)

Интерфейсы — это концепция в голове у разработчика а вовсе не ключевое слово «interface» в языке. На python и ruby эта концепция прекрасно реализуется.
и не рассматриваете использование PHP в своём следующем проекте, то вы что-то делаете неправильно

Я понимаю использование в существующих проектах, которые уже написаны на PHP и работают. Но на кой мне PHP в следующем проекте, когда есть современные, намного лучше спроектированные языки, не обременённые обратной совместимостью с древним легаси.
>> скучный контент, зачастую с ненормативной лексикой
По последней ссылке в этой фразе (со слова «лексикой») контент скорее юмористический)

Вы занимаетесь ерундой. Тем единицам, кто и так придумывал хорошие пароли, вы только осложните жизнь своими политиками, а подавляющее большинство будет как и раньше использовать нечто стандартное, чего в заданном админами блеклисте нет, но все рядом сидящие коллеги в курсе. И на бумажке писать ничего не надо, это может быть что-то типа 345dfh#$% (из соседних клавиш на клавиатуре на основе переключений раскладки и зажимания шифта), что легко запомнить, и все это будут юзать. Вы, конечно, потом, через пару месяцев, добавите и это в блеклист, но народ ведь быстро наловчится сочинять новые лёгкие пароли, удовлетворяющие хотелкам админов.


То же относится к идиотской практике принудительно заставлять менять пароль раз в n месяцев. На какой пароль будут менять? Правильно — например, на тот же самый с приписанной единичкой в конце. С каждой «сменой» пароля цифра инкрементируется. Сам так делаю)

1 апреля, кто-то читает теги

Вот с какой целью вы добавляете это в теги? (и ещё несколько публикаций грешат тем же)


Розыгрыш не должен быть подписан «это розыгрыш».

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

Information

Rating
Does not participate
Location
Москва и Московская обл., Россия
Registered
Activity