All streams
Search
Write a publication
Pull to refresh
62
0
Николай Зубач @zuborg

Highload

Send message
Сжечь электричества посетителям на 100к, чтобы положить себе в карман 5к…
Бабло непобедимо, что ещё сказать…
Все-таки имеют )
Вы ж не забывайте, что 5% на современном 6ТБ диске и 5% на 60ГБ дисках времен, когда разрабатывались ext и другие фс — это две большие разницы.
Хотя да, я согласен в том, что 5% на больших многоТБ дисках и массивах — это уже перебор, действительно, резерв в 5% уже не актуален.
Самое смешное в этой истории (истерии? :) для меня в том, что рут к этому резерву вообще никакого отношения не имеет (ну, исключая то, что руту все же получится записать больше, чем остальным). Это место резервируется из соображений производительности — пустые области получаются большего размера, в них проще (и быстрее) находить свободные блоки для новых данных, ну и меньше фрагментация файлов, что для шпиндельных дисков крайне существенно. Современные SSD тоже имеют подобную систему — они показывают операционке меньший объем, чем установлено чипов, чтобы иметь резерв свободных блоков для новых данных или поврежденных блоков (которые ремапятся).

Так что на шпиндельных дисках стоит оставлять этот резерв 5-8 процентов, а на SSD можно вполне безопасно уменьшить до 1-2 процентов (небольшой резерв все же стоит делать, иначе при сильном заполнении диска будет больше нагрузка на проц и сильнее фрагментация файлов).
Увы, у меня нет подходящей картинки, чтобы подобрать иллюстрацию, что я чувствую, когда смотрю на код
func upgradeUser(endpoint, username string) error {
    getEndpoint := fmt.Sprintf("%s/oldusers/%s", endpoint, username)
    postEndpoint := fmt.Sprintf("%s/newusers/%s", endpoint, username)

    _, err := compose(
        http.Get,
        func(req *http.Response) ([]byte, error) {
            return ioutil.ReadAll(req.Body)
        },
        newUserFromJson,
        newUserFromUser,
        json.Marshal,
        func(buf []byte) (*http.Response, error) {
            return http.Post(
                postEndpoint,
                "application/json",
                bytes.NewBuffer(buf),
            )
        },
    )(getEndpoint)
    return err
}


Если описать словами, то это не «а, ну тут все понятно», а что-то ближе к «wtf здесь происходит вообще?»

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

На всякий случай напоминаю, что при дизайне Go немаловажную роль играла простота и читаемость кода )
Я считаю, что лучше иметь на экране десяток проверок err != nil, чем сложнозавернутую конструкцию, которую и сам с трудом разберешь через пару месяцев. Не в PerlGolf же играем.
Ну она и будет одинаковой, 50лет 0дней 0секунд например — это момент встречи в системе координат летавшего близнеца.
t это координата, но не одна, а в системе отсчета каждого из близнецов. t1 и t2, грубо говоря.
Исходно t1 = t2. А после полета они расходятся: t1 = t2 — delta. Там, где для первого близнеца событие происходит в момент 50лет 0дней 0секунд — для второго оно же отмечается по координате 50лет 10дней 0секунд.
Расширение multimaster и его поддержка в ядре, которые есть только в версии Postgres Pro Enterprise, дают возможность строить кластеры серверов высокой доступности (High Availability).

А зачем рядовому проекту PgPro Standart без HA, не подскажете?
Т.е. рядовому проекту PgPro не светит?
Антивирус = ремень безопасности

Я читал Ваш комментарий. Дело в том, что антивирус != ремень безопасности. Это все лишь аналогия. Точно так же можно провести не менее корректную аналогию антивируса с фонариком, который находит часть опасных объектов, но не дает защиты в случае проникновения, а файрвол с ремнями безопасности, который дает кое-какую защиту в случае происшедшего проникновения, хотя и не помогает избежать его.
Вашу аналогию можно и развернуть:
Антивирус: покупайте наш суперфонарик с автоподсветкой опасностей на дорогах — с ним вы будете под надежной защитой. Теперь можно кататься и без ремней безопастности!
Обычный пользователь: я вот пользуюсь суперфонариком и теперь гоняю как хочу и где хочу. Сосед мой, правда, в аварию попал, но это он сам виноват, нечего в Гарлем было шастать.
Продвинутый пользователь: катайтесь дальше со своим фонариком, а я лучше ремень безопастности пристегну…
Уточню, что в данном случае решающими являются права на собственно папку /home/user/left-shoe/, а не $HOME (/home/user/).

А так да, права на содержимое файла не определяют права на его имя (или отсутствие имени) в данной папке.
Что такое диаметр ЧД, если это не горизонт событий?

Вообще-то плотность (средняя) ЧД падает с ростом массы — ЧД с массой в 2 раза больше занимает объем в 8 больше, т.е. плотность в 4 раза меньше.
пухлая и рыхлая ЧД
— чего уж мелочиться, можно сразу «ЧД с повышенной гравитационной постоянной» или «ЧД с пониженной скоростью света»:
image
При захвате рудников стоит отдавать предпочтение тем из них, которые заняты топовыми ботами (имеющими большее кол-во золота) — увеличивает шанс победы.

Просчитывать рекурсивно план захвата будет ресурсоемко, а без учета ходов противников ещё и малодейственно. Проще примитивно выбрать ближайшие N (с учетом текущего здоровья) доступных к захвату шахт (скорректировав их вес (1/dist) на ценность отбивания их у противников) и посчитать, движение в каком направлении имеет максимальное увеличение суммы весов этих N шахт). Это будет работать вполне неплохо, хотя и не всегда оптимально.

Ну и следует учитывать, что удачная стратегия заключается вовсе не в эффективном захвате шахт, а в успешном выживании и успешной охоте на других ботов. Иначе все эти эффективно захваченные шахты достанутся более умному боту ) Так что лучше посчитать в глубину план взаимодействия с другими ботами, а не просто захват шахт.
Интересная статья, прочитал с удовольствием.
Только не хватает голосовалки ))
— КК, подай мне мяч!
— Чувак, хорош уже прикалываться, не видишь, что ли, что я тут заперт в этой комнате, как я тебе подам мяч? Да и нет тут никаких мячей.
— Ладно, ладно, не кипятись, пошутить уже нельзя…

— КК с ручками и ножками, подай мне мяч!
— Этот? Держи!
Статья интересная, но у меня есть некоторые замечания и дополнения )

Во первых, присутствует некоторая неточность в использовании терминологии.
Можно наделять термостат способностью к мышлению, но надо уточнять, что имеется в виду под собственно «мышлением». То же относится к «пониманию», «восприятию», «смысл» и подобным терминам.

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

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

Так что согласиться с тем, что термостату доступно «понимание» и уж тем более «мышление» я не могу.

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

Чем более развитый организм, тем больше разных рецепторов он имеет, может воспринимать больше аспектов окружающей среды и больше нейронов (либо более эффективно) может использовать для моделирования окружающего мира (и себя в нем). Кстати, в буддизме эта концепция присутствует в виде «я — это зеркало».

Вот чем заняты все успешные организмы — они с помощью своего сознания адекватно моделируют окружающий мир и выживают, избегая опасностей, а получая ништяки. А у особо продвинутых, модель мира которых включает их самих — присутствует и самосознание :) Компьютерам, думаю, такое тоже будет под силу, рано или поздно.
В свое время запрогал бота, который работал чисто на эвристиках — никакого перебора в глубину! Т.е. cpu практически вообще не потреблялся. Даже на первое место выскакивал временами )
Но вручную тюнить и расширять эвристики быстро надоело, а до автоматического тюнинга не дошел, метапрограммирование штука непростая )
Уж лучше пусть только ICANN, чем ICANN и кто-то ещё.
Не лучше.
Куда бы мы не перенесли зону ответственности — она остается точкой отказа.

От пассивного прослушивания мы защищаться научились хорошо, проблема в активном вмешательстве в трафик, а эта возможность есть у всех провайдеров. Можно записать отпечаток сертификата в какой-то DSN-record, чтобы подтвердить, что сертификат не поддельный, но это не поможет, если атакующий подменит DNS ответ. Он может внедрить https-прокси, поддельный DNS, заблокировать трафик проверки и т.д. и т.п.

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

Сейчас каждый сертификат выдается одним CA. Его компроментация, блокирование на уровне провайдера или просто отказ вызывает проблемы. А вот если сертификат подписан десятком СА или блокчейном, то подменить его или заблокировать проверку отзыва уже не получится.
возможность блокировать протоколы VPN
— возможность заблокировать конкретные протоколы да, есть. Но для того чтобы заблокировать VPN полностью, надо заблокировать вообще все, кроме некоторых протоколов, и за теми следить от и до. Например, вполне можно гонять трафик через SSH-тунель — так что, Китай закроет SSH для частных лиц? Или поднять openvpn или другой тунель на 443-м порту (хотя тут Китай как раз использует MiTM, не https трафик заблокировать можно). Есть IP-over-DNS. Да, в конце концов, можно запустить IP-over-HTTP — будет как в том анектоте про dialup модем на IP-телефонии, но если это не публичный сервис, а приватный сайт, то найти и заблокировать его будет непросто.

Information

Rating
Does not participate
Location
Киев, Киевская обл., Украина
Date of birth
Registered
Activity