Всё же в сообщении указывается, что он не просто экспортировал услуги по разработке ПО:
по статье 275.1 УК России (сотрудничество на конфиденциальной основе с иностранным государством, международной либо иностранной организацией)
пресечена противоправная деятельность гражданина России, связанная с установлением и поддержанием отношений сотрудничества на конфиденциальной основе с иностранной организацией, в целях оказания содействия в деятельности, заведомо направленной против безопасности РФ
Обожаю такой размер. У меня был 12 mini, сейчас 13 mini, причём второй, потому что я купил новый в момент снятия с официальной продажи, чтобы «освежить» аккумулятор. В своё время рассматривал варианты на Android с похожим размером: конкурентов просто нет. Надеюсь, Apple выпустит модель SE в корпусе mini.
При записи видео в приложении нет возможности поставить на паузу (только стоп), что кажется абсолютной глупостью
В iOS 18 завезли
Тест на мультитач показал поддержку 5 одновременных касаний. Странно, ведь даже бюджетные смартфоны на Android распознают 10 касаний
Зачем больше на таком маленьком экране?
А теперь самая печальная сторона смартфона, его аккумулятор
Да, есть проблема. В 13 mini чуть получше. Я бы предпочёл увеличить толщину для аккумулятора, заодно камеры бы перестали выпирать.
поддерживает замедленную съемку в Full HD со скоростью до 240 кадров в секунду
Немного занудный факт, но это называется «ускоренная съёмка» или «замедленное воспроизведение». Замедленную съёмку (timelapse) он тоже поддерживает.
Вы пишите, что аномалия «потерянное обновление» возможна только на уровнях изоляции 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.
Мир активными темпами переводит компьютеры на ARM из-за кратно большей энергоэффективности, а Intel до сих пор не представил ни один такой процессор. Intel отстала от жизни, и не хочет признавать это.
добавляет нюансов с тем, что в этой структуре считать не инициализированными значениями (т.е. где применять дефолты)
Можно сделать для структуры опций конструктор, который будет устанавливать дефолтные значения, а прикладной код будет менять те, которые ему интересны:
// Библиотека
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 могла бы продавать «чистые» запчасти отдельно.
Клонировать структуру опций внутри
NewServer
. Или передавать вNewServer
не указатель на структуру, а саму структуру.Всё же в сообщении указывается, что он не просто экспортировал услуги по разработке ПО:
Обожаю такой размер. У меня был 12 mini, сейчас 13 mini, причём второй, потому что я купил новый в момент снятия с официальной продажи, чтобы «освежить» аккумулятор. В своё время рассматривал варианты на Android с похожим размером: конкурентов просто нет. Надеюсь, Apple выпустит модель SE в корпусе mini.
В iOS 18 завезли
Зачем больше на таком маленьком экране?
Да, есть проблема. В 13 mini чуть получше. Я бы предпочёл увеличить толщину для аккумулятора, заодно камеры бы перестали выпирать.
Немного занудный факт, но это называется «ускоренная съёмка» или «замедленное воспроизведение». Замедленную съёмку (timelapse) он тоже поддерживает.
Значит, REPEATABLE READ запрещает не только запись, но и чтение. То есть в статье недоработка. Спасибо.
Вы пишите, что аномалия «потерянное обновление» возможна только на уровнях изоляции READ UNCOMMITTED и READ COMMITTED. Также вы пишите, что на уровне изоляции REPEATABLE READ никто параллельно не может изменять или удалять строки, которые транзакция уже прочитала. Значит ли это, что REPEATABLE READ запрещает не только запись, но и чтение? Иначе я не понимаю, как этот уровень защищает от такого состояния гонки:
Понятно, что конкретно этот пример можно исправить, написав атомарное изменение баланса за 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 отстала от жизни, и не хочет признавать это.
Предполагаю, работает это так. Они увидели последствия либерализации (тяжёлые 90-е), разочаровались и решили для себя, что лучше «стабильность».
Можно сделать их публичными. Затевалось всё не ради скрытых свойств сервера, а ради упрощения работы с большим количеством аргументов.
Можно положить код сервера в тот же пакет.
Почему глобальных. Код же делится на пакеты, можно даже сделать отдельный пакет для функций конфигурации сервера.
Не надо писать по функции для каждого параметра
Чем ваш пример принципиально лучше? Так же как в статье, у вас каждый не дефолтный параметр требует 1 вызов функции или 1 присвоение.
Можно сделать для структуры опций конструктор, который будет устанавливать дефолтные значения, а прикладной код будет менять те, которые ему интересны:
Или передавать структуру дефолтных опций в колбэке функции, создающей сервер (что по сути является тем же самым, что предложил автор статьи):
Или комбинируя вызовы родных функций конфигурации
Скорее выглядит как противоугонная система, то есть чтобы краденные iPhone нельзя было продать на крупные запчасти (тем самым уменьшая интерес к воровству). Хотя если бы это было причиной, то Apple могла бы продавать «чистые» запчасти отдельно.
Есть ли тепло и страсть друг к другу, или дети просто склеивают ваш брак?