Pull to refresh
4K+
464
vvzvlad@vvzvlad

Любопытен. Ленив. Вреден.

0,5
Rating
1 144
Subscribers
Send message

@moderator как там насчет запрета на ИИ-контент? Статья — чистая генерация же.

Что вы несете за чушь? У вас половина текста обороты ллм, причем тут невозможность (!) юридически (!!) передать диалог дословно?

Разложим по фактам, а не по фантазиям сервисного центра.

Ахахаха, а вы текст на этой же видеокарте генерировали или нет?

Да, очень хорошо и понятно обьяснено.

Ох, если вайбкодер даёт такой промпт, то он уже не совсем вайбкодер. 

Некоторые из них даже не знают на каком языке их проект написан...

Ну, т.е. мы переходим от критики ллмок как таковых к критике плохих кодеров, я правильно понял?

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

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

А наивный ответ на «напиши простой аналог lru_cache»:

Хз, кто вам там что пишет без вытеснения
Простейшая реализация на OrderedDict:
pythonfrom collections import OrderedDict
from functools import wraps


def lru_cache(maxsize=128):
    def decorator(func):
        cache = OrderedDict()

        @wraps(func)
        def wrapper(*args, **kwargs):
            key = (args, tuple(sorted(kwargs.items())))
            if key in cache:
                cache.move_to_end(key)       # отметить как недавно использованный
                return cache[key]
            result = func(*args, **kwargs)
            cache[key] = result
            if maxsize is not None and len(cache) > maxsize:
                cache.popitem(last=False)     # выкинуть самый старый
            return result

        return wrapper
    return decorator
Использование:
python@lru_cache(maxsize=2)
def slow_square(n):
    print(f"вычисляю {n}")
    return n * n

slow_square(2)  # вычисляю 2
slow_square(2)  # из кеша
slow_square(3)  # вычисляю 3
slow_square(4)  # вычисляю 4 — теперь 2 вытеснен
slow_square(2)  # вычисляю 2 (снова)
Ключевые моменты этой реализации:
OrderedDict поддерживает порядок вставки, а move_to_end позволяет дёшево обновлять «свежесть» элемента — это и есть суть LRU. При переполнении popitem(last=False) удаляет самый давно использованный.
Формирование ключа (args, tuple(sorted(kwargs.items()))) — упрощённое. Настоящий functools.lru_cache использует _make_key, который аккуратнее обрабатывает порядок аргументов и типы. Здесь есть ограничение: все аргументы должны быть хешируемыми (как и в оригинале).
Если хочется ближе к оригиналу — добавить статистику и метод сброса:
pythonfrom collections import OrderedDict
from functools import wraps


def lru_cache(maxsize=128):
    def decorator(func):
        cache = OrderedDict()
        hits = misses = 0

        @wraps(func)
        def wrapper(*args, **kwargs):
            nonlocal hits, misses
            key = (args, tuple(sorted(kwargs.items())))
            if key in cache:
                cache.move_to_end(key)
                hits += 1
                return cache[key]
            misses += 1
            result = func(*args, **kwargs)
            cache[key] = result
            if maxsize is not None and len(cache) > maxsize:
                cache.popitem(last=False)
            return result

        def cache_info():
            return {"hits": hits, "misses": misses,
                    "maxsize": maxsize, "currsize": len(cache)}

        def cache_clear():
            nonlocal hits, misses
            cache.clear()
            hits = misses = 0

        wrapper.cache_info = cache_info
        wrapper.cache_clear = cache_clear
        return wrapper
    return decorator
Стоит иметь в виду: настоящий functools.lru_cache написан на C, потокобезопасен (блокировка вокруг обновления кеша) и использует кольцевой двусвязный список вместо OrderedDict. Для учебных целей и однопоточного кода версия выше эквивалентна по поведению; для многопоточности нужно обернуть доступ к cache в threading.Lock.

А что делает живой копирайтер? Он пишет конкретику, которую можно проверить: сколько часов держит зарядка, за сколько секунд коннектится, что слышно, а что нет. И — самое важное — он называет недостаток. 

Хахахахахахахаххахахахахахах. Ххахаах. Ха-ха. Нет.

То там появится еще один ноль при передаче.

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

Очень сильный разбор. 

В каком блин месте он сильный? Это дефолтная жвачка от ллмки, в которой повторяются стандартные нарративы аналитиков, которые просто рисуют график “в будущее”.

Ура. Интересно, насколько будет соблюдаться в корпоративных блогах.

Но вы же и правда школьник, который пишет нейрослоп

Ну и в целом чтобы придумать как именно это решать даже с небольшими ресурсами надо десяток лет пожить с этой ошибкой в проде. Щас-то с послезнанием хорошо говорить “это было ошибкой”.

Вся разработка — личная инициатива, на личном устройстве и личных ключах, не в ИТ-контуре компании

Описанное в статье не является публичным мнением должностных лиц компании. Это не инвестиционная рекомендация.

Какой смысл увольнять стадеров,

несли нет — берете нового стажёра.

Меня терзают смутные сомненья. А старого вы куда предлагаете деть?

А ведь нас предупреждали что это половина книги..

А вы можете сказать где заканчивается серьезный спор и начинаются передергивания?

Контора сами знаете кого

1
23 ...

Information

Rating
2,531-st
Location
Москва, Москва и Московская обл., Россия
Date of birth
Registered
Activity

Specialization

Product Manager, Business Analyst
Senior