Как стать автором
Обновить
24
0.6
JSON Statham @Finesse

Пользователь

Отправить сообщение

Клонировать структуру опций внутри NewServer. Или передавать в NewServer не указатель на структуру, а саму структуру.

Всё же в сообщении указывается, что он не просто экспортировал услуги по разработке ПО:

по статье 275.1 УК России (сотрудничество на конфиденциальной основе с иностранным государством, международной либо иностранной организацией)

пресечена противоправная деятельность гражданина России, связанная с установлением и поддержанием отношений сотрудничества на конфиденциальной основе с иностранной организацией, в целях оказания содействия в деятельности, заведомо направленной против безопасности РФ

Обожаю такой размер. У меня был 12 mini, сейчас 13 mini, причём второй, потому что я купил новый в момент снятия с официальной продажи, чтобы «освежить» аккумулятор. В своё время рассматривал варианты на Android с похожим размером: конкурентов просто нет. Надеюсь, Apple выпустит модель SE в корпусе mini.

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

В iOS 18 завезли

Тест на мультитач показал поддержку 5 одновременных касаний. Странно, ведь даже бюджетные смартфоны на Android распознают 10 касаний

Зачем больше на таком маленьком экране?

А теперь самая печальная сторона смартфона, его аккумулятор

Да, есть проблема. В 13 mini чуть получше. Я бы предпочёл увеличить толщину для аккумулятора, заодно камеры бы перестали выпирать.

поддерживает замедленную съемку в Full HD со скоростью до 240 кадров в секунду

Немного занудный факт, но это называется «ускоренная съёмка» или «замедленное воспроизведение». Замедленную съёмку (timelapse) он тоже поддерживает.

Значит, REPEATABLE READ запрещает не только запись, но и чтение. То есть в статье недоработка. Спасибо.

Вы пишите, что аномалия «потерянное обновление» возможна только на уровнях изоляции READ UNCOMMITTED и READ COMMITTED. Также вы пишите, что на уровне изоляции REPEATABLE READ никто параллельно не может изменять или удалять строки, которые транзакция уже прочитала. Значит ли это, что REPEATABLE READ запрещает не только запись, но и чтение? Иначе я не понимаю, как этот уровень защищает от такого состояния гонки:

-- Транзакция 1
START TRANSACTION;
SELECT balance FROM users WHERE id = 1;
-- Возвращает 100

-- Транзакция 2 (исполняется параллельно другим процессом)
START TRANSACTION;
SELECT balance FROM users WHERE id = 1;
-- Возвращает 100

-- Транзакция 1
UPDATE users SET balance = 100+10 WHERE id = 1;
COMMIT;
-- Пополнение баланса потеряется из-за следующего выражения

-- Транзакция 2
UPDATE users SET balance = 100+15 WHERE id = 1;
COMMIT;

Понятно, что конкретно этот пример можно исправить, написав атомарное изменение баланса за 1 запрос. Но мне интересна именно такая форма транзакции, чтобы лучше понять, как работает изоляция.

P.S. Понравилось, как вы демонстрируете параллельные транзакции в статье.

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

Для вашего примера руки чешутся написать 2 простых запроса запроса с ORDER BY id и LIMIT 1, в крайнем случае объединить их в один с помощью UNION ALL.

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

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

То, какой смысл вы вложили в мой комментарий и свой ответ, выбивается из общего контекста обсуждения. Конечно я имею ввиду современные процессоры, интересные сегодняшнему потребителю, потому что речь идёт про состояние Intel сегодня. Это же common sense.

О чём речь?

Apple отказалась от x86, Microsoft партнёрится с Qualcomm для выпуска флагманских ноутбуков на ARM, в отрасли аренды серверов решения на ARM выгоднее чем аналоги на x86.

Предлагаете процессором 2004 года конкурировать с Apple M3 и Snapdragon X Elite?

Мир активными темпами переводит компьютеры на ARM из-за кратно большей энергоэффективности, а Intel до сих пор не представил ни один такой процессор. Intel отстала от жизни, и не хочет признавать это.

Всем 40+ (позволил себе сократить ваше выражение без потери смысла) когда-то было по 20 и многие в этом возрасте были за полный либерализм во всем.

Предполагаю, работает это так. Они увидели последствия либерализации (тяжёлые 90-е), разочаровались и решили для себя, что лучше «стабильность».

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

Можно положить код сервера в тот же пакет.

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

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

Чем ваш пример принципиально лучше? Так же как в статье, у вас каждый не дефолтный параметр требует 1 вызов функции или 1 присвоение.

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

Можно сделать для структуры опций конструктор, который будет устанавливать дефолтные значения, а прикладной код будет менять те, которые ему интересны:

// Библиотека

type serverOptions struct {
    Port       int
    Timeout    time.Duration
    EnableLogs bool
}

func NewServerOptions() *serverOptions {
    return &serverOptions{
        Port:       8080,
        Timeout:    60,
        EnableLogs: false,
    }
}

func NewServer(opts *serverOptions) *server {
    // ...
}

// Прикладной код

serverOptions := NewServerOptions()
serverOptions.Port = 9090
serverOptions.EnableLogs = true
server := NewServer(serverOptions)

Или передавать структуру дефолтных опций в колбэке функции, создающей сервер (что по сути является тем же самым, что предложил автор статьи):

// Библиотека

type ServerOptions struct {
    Port       int
    Timeout    time.Duration
    EnableLogs bool
}

type serverConfig func(*ServerOptions)

func NewServer(configure serverConfig) *server {
    options := &ServerOptions{
        Port:       8080,
        Timeout:    60,
        EnableLogs: false,
    }
    configure(options)

    return createServer(options)
}

func createServer(options *ServerOptions) *server {
    // ...
}

// Прикладной код

server := NewServer(func (options *ServerOptions) {
    options.Port = 9090
    options.EnableLogs = true
})

пройдя путём знатного пердолинга

Или комбинируя вызовы родных функций конфигурации

Скорее выглядит как противоугонная система, то есть чтобы краденные iPhone нельзя было продать на крупные запчасти (тем самым уменьшая интерес к воровству). Хотя если бы это было причиной, то Apple могла бы продавать «чистые» запчасти отдельно.

Есть ли тепло и страсть друг к другу, или дети просто склеивают ваш брак?

1
23 ...

Информация

В рейтинге
1 821-й
Зарегистрирован
Активность