• Какой тип данных у переменной a?

    bingo347
    @bingo347
    Crazy on performance...
    У переменной a указан тип встроенный массив [T; n]. Но у такого типа нет метода get_unchecked_mut(). Он есть у среза на массив [T]
    Тут нужно понять как в Rust работает оператор точка.

    Во-первых, мало кто пишет, но операторов точка на самом деле в Rust целых 2:
    - Доступ к полю структуры/кортежа/юниона
    - Вызов метода
    Rust различает их по наличию круглых скобок:
    struct S {
        a: i32,
        f: fn(),
    }
    
    impl S {
        fn a(&self) {}
    }
    
    let s = S { a: 0, f: || {} };
    s.a; // Доступ к полю
    s.a(); // Вызов метода
    (s.f)(); // Вызов функции по указателю, который лежит в поле f

    С доступом к полю все просто, компилятор преобразует его в смещение в памяти где это поле лежит относительно самой структуры.
    А вот с вызовом метода все интереснее, Rust пытается рассахарить его в одну из следующих конструкций в следующем порядке:
    S::a(s);
    S::a(&s);
    S::a(&mut s);
    <S as Deref>::Target::a(S::deref(&s));
    <S as DerefMut>::Target::a(S::deref_mut(&mut s));
    <<S as Deref>::Target as Deref>::Target::a(<S as Deref>::Target::deref(S::deref(&s)));
    <<S as DerefMut>::Target as DerefMut>::Target::a(<S as DerefMut>::Target::deref_mut(S::deref_mut(&mut s)));
    // ...
    и так пока либо не найдет вариант, который компилируется, либо пока не обнаружит что для очередного типа не реализован трейт Deref.
    Подробнее можно почитать тут: https://doc.rust-lang.org/stable/nomicon/dot-opera...

    У всех массивов есть Deref к слайсу, в core библиотеке прописано что-то вроде:
    impl<T, const N: usize> Deref for [T; N] {
        type Target = [T];
        fn deref(&self) -> &[T] {
            // ...
        }
    }
    За счет этого все массивы (а так же векторы, у которых тоже Deref к слайсу) получают методы слайса. И по тому же принципу String получает методы str.

    Ну и кстати, неявный вызов deref может еще происходить при взятии ссылки.

    Ну и из комментов к вопросу:
    Что тут делает unsafe код как раз понятно
    Однозначно понятно, он здесь делает UB так как обращается к памяти владелец которой неизвестен.
    Ответ написан
    1 комментарий
  • Не рано ли изучать Rust?

    Zoominger
    @Zoominger Куратор тега IT-образование
    System Integrator
    1 комментарий
  • Линукс есть ли махонький dns сервер как альтернатива файлу hosts?

    @ProFfeSsoRr
    Сис.админ по Linux
    bind и powerdns - это "большие" dns серверы, которые умеют вообще всё. Есть "поменьше", расчитанные в первую очередь на кэширование, маленькие роутеры и т.п - dnsmasq, unbound и coredns.
    Ответ написан
    Комментировать
  • Какие есть средства мониторинга соединений nginx?

    @AstonMartin Автор вопроса
    Как вариант, стал использовать еще goaccess
    Ответ написан
    Комментировать
  • Как программировать электронные чернила?

    uvelichitel
    @uvelichitel
    habrahabr.ru/users/uvelichitel
    Комментировать
  • Как программировать электронные чернила?

    samodum
    @samodum
    Какой вопрос - такой и ответ
    Ответ написан
    Комментировать
  • Практическое использование схем в Postgresql - когда они нужны?

    В целом, понимайте схемы как пространства имен. Схемы помогают логически организовать структуру БД. Различные приложения или компоненты приложений внутри себя имеют более высокую связность, чем между собой, тоже самое и с данными в БД - часто таблицы сами по себе организуются в логические группы, причем внутри группы связей довольно много (внешние ключи, какие-то общие хранимые процедуры и т.д.), а между этими группами - мало или нет вовсе.

    Важно понимать, что различные БД плохо подходят для логического группирования, т.к. разбиение по базам данных нужно скорее для администраторов, а не для приложений. Плюс, в большинстве СУБД, где существует понятие схемы, возможно ставить внешние ключи на таблицы в другой схеме, но нельзя на таблицы в другой БД. Иными словами, отдельные БД удобно создавать тогда, когда вы разделяете данные абсолютно не связанных приложений или сервисов. Например, складского учета и форума поддержки пользователей. С другой стороны, если вы хотите логически разделить таблицы в соответствии с компонентами одного приложения (например, корпоративный портал: 4 таблицы для поддержки авторизации, 10 таблиц для поддержки форума, еще 5 для чата со службой поддержки или отделом продаж) - то именно схемы будут удобным механизмом для этого.

    Если сформулировать коротко, то разбиение на базы данных - это для администраторов БД, а разбиение на схемы - это для администраторов данных и разработчиков приложений, чтобы им же было легче.

    А что будет если несколько юзеров будут на одну public-схему коннектиться?

    Помимо того, что схема - это пространство имен, в большинстве СУБД это еще и пространство безопасности. Даже в рамках одного многокомпонентного приложения имеет смысл ставить границы безопасности для ограничения возможных потерь и разрушений в случае компрометации одного из компонент.

    Вот допустим, у вас есть отдельная схема для таблицы авторизации и аутентификации и отдельная - для корпоративного форума. Сервис авторизации у вас выполнен отдельно от форума (например, авторизация выдаёт токены пользователю, с которыми он потом может зайти на форум). С точки зрения безопаности было бы логичным выдать сервису авторизации и форума различных пользователей в базе - тогда, при взломе форума невозможно будет получить доступ к паролям в базе или изменить права на портале, подправив данные в таблице ролей. Конечно, многие СУБД разрешают ставить права на отдельные таблицы, однако схема в данном случае играет роль контейнера и позволяет проставить единые правила для всех таблиц внутри неё.

    то есть при работе в постгре предпочтительнее вместо отдельных баз делать разные схемы в одной

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

    Вот вам еще хороший пример. У вас есть приложение для ведения бухгалтерии и складского учёта на фирме. При этом сложилось так, что вам нужно хранить на одном сервере данные нескольких разных фирм (например, вы предоставляете готовый сервис под ключ нескольким клиентам). В этой ситуации более чем логично хранить данные разных клиентов в разных БД, а данные бухгалтерского и складского учета - в различных схемах в рамках одной БД конкретного клиента.
    Ответ написан
    2 комментария
  • Rust в автопилотах для автомобилей?

    devalone
    @devalone
    ̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻
    C/C++ может быть недостаточно безопасен (утечки памяти, падения)

    Утечки памяти происходят не от C++, а от недостаточной компетентности программиста, в современном C++ память отлично управляется контейнерами и умными указателями(с помощью магии, как в джаве, только лучше) и зная их сложно написать утечку, а ручное управление по прежнему осталось для тех случаев, когда нужна максимальная производительность. Падения, опять же, чаще всего происходят из-за неправильного обращения к памяти(например обращение к освобождённой памяти) и эти проблемы опять же решены в современном C++. Но если вы конечно захотите выстрелить себе в ногу, C++ конечно же вам позволит это сделать.
    на Assembler-е распознавание изображений не напишешь

    Напишешь, только смысла нет, а шансов ошибиться и выстрелить в ногу случайно гораздо больше.
    Python и Java будут работать очень медленно

    Скорость понятие относительное, в системах реального времени важна скорость реакции, т.е. если впереди появилось нечто похожее на человека, система должна среагировать не больше чем за сколько-то мс. В python и Java препятствием этому может стать, например, внезапная сборка мусора.
    Ответ написан
    Комментировать
  • Как сегодня верстают такие бордеры?

    profesor08
    @profesor08 Куратор тега CSS
    Псевдоэлементы в помощь:
    Ответ написан
    2 комментария
  • Есть ли сайт, где собраны общепринятые практики программирования?

    Moskus
    @Moskus
    Естественно, нет, потому что всё, что вы описали - это не какое-то тайное знание, которое можно только запомнить, а логичные приёмы, которые следуют из знания фундаментальных принципов и анализа требований к продукту. Если попытаться заменить фундаментальные знания таким сборником прецедентов, он получится гигантским и совершенно непригодным для освоения - столько всего просто нельзя запомнить. Объем фундаментальных знаний - на порядки меньше объёма частностей, которые из них выводятся, но сложность этих знаний, при этом, выше. Кто фундаментальные знания не осилил, остаётся говнокодером, пока не осилит.
    Ответ написан
    Комментировать
  • Какой выбрать Python фреймворк для системы парсинга сайтов?

    EvilsInterrupt
    @EvilsInterrupt
    System programming, Reversing Engineering, C++
    Scrappy

    Из минусов :
    * Сложность установки на системе Windows. Поэтому один раз нужно будет поставить . Задокументировать процесс установки.
    * У меня были проблемы с кодировками, но это возможно у меня что-то с руками было. Обратите на это свое внимание

    Из плюсов:
    * Многим известен
    * Структурирован
    * Много информации по нему
    Ответ написан
    3 комментария
  • Какой выбрать Python фреймворк для системы парсинга сайтов?

    JabbaHotep
    @JabbaHotep
    Пытаюсь минимизировать ручную работу
    Писать свой фреймворк с нуля, достаточно тяжелая задача. Сам участвовал в разработке 1 Perl фреймворка, 2-х на Python и одного на Ruby и еще одного на Go (все проприетарные) :) Однако дает возможность выстроить любую архитектуру под свои нужды. Это имеет смысл если объемы большие - сотни и тысячи парсеров и не устраивает архитектура существующих фреймворков.
    Пункты 3 и 4 никак друг другу не противоречат, данные вы храните централизованно в базе. Задачи запускаете распределенно через систему управления задачами (воркеры запускающие парсеры, могут находиться на разных хостах). Прокси должны быть обязательно, вне зависимости от степени распределенности.
    По поводу желания запускать только парсинг часть, не уверен что это возможно из коробки, но могу предложить обходной путь. Пишется 2 скрапера - один краулер, второй парсер, который парсит локальные страницы.
    Ответ написан
    Комментировать
  • Как въехать в программирование (ООП, паттерны)?

    @Wentixon
    Шаблоны проектирования с человеческим лицом
    К сожалению, не успел к началу вопроса, многое уже посоветовали, но эту статейку вроде не успели еще кинуть. Недавно нашел ее и просто поразился как просто и доступно это изложено + с примерами кода на php. Просто шикарный перевод великолепной статьи!

    От себя же хочу сказать, что единственный способ понять паттерны - это столкнуться с проблемами которые они решают, ибо паттерны ни что иное как шаблоны решения каких то проблем (и предотвращения). Так что делаем вывод - нет проблем, не может быть и решений (конечно, вы просто не осознаете, что они есть, так как проект растет довольно медленно и чаще это какие то правки или добавление нового функционала, который не зависит от старого). Я очень долго пытался с ними разобраться, пробовал читать все перечисленные книги, но вроде читаешь такой и типа понимаешь, но с другой стороны какбы и нет. Вроде понятно, но где это применять хрен знает. Вообщем, как уже сказали, нужны реальные проблемы и тогда открываешь книгу с решениями этих проблем и думаешь какое решение выбрать. Это как с рецептами.. Хочешь что то приготовить, можешь как бы и сам, но не факт, что вкусно получится, тогда открываешь книгу проверенных рецептов и начинаешь применять все по шагам, опираясь при том на ингридиенты, которые у тебя имеются.

    Так что посоветую 2 варианта изучения.
    1) Тупо работаешь над сложные проектами, только действительно сложными, а не сайтиками на cms. И со временем ты начинаешь встречаться с проблемами. Тогда открываешь паттерны и тебе не придется даже как то их особо понимать, потому что это будет естевственно для тебя. Я думаю ты используешь ide вместо редактора кода. Но к примеру я помню тот момент, когда я пользовался саблаймом и знал, что есть ide, но я писал на тот момент простые вещи и когда мне говорили, почему я не юзаю ide, ведь в ней столько всего, я не понимал их потому что мне и саблайма за глаза хватало. Но пришло время, когда надо было то и се и саблайма стало мало. И тут открываю ide, а там уже есть все необходимое и думаешь в такие моменты, как я раньше этим не пользовался. А дело в том, что раньше и не надо было. Может неудачный пример, но вы поняли ) Конечно, этот вариант изучения не совсем реален, по скольку сложный проект еще найти надо, да еще попасть в команду, которая не говнокодит, так как и крупные проекты бывают достаточно плохо написаны. Но можно как вариант к примеру делать свою cms и применять в ней как можно больше паттернов.

    2) Тупо садитесь и изучаете паттерны (как и делал я). Но не просто изучаете, а к какждому паттерну придумываете как можно больше проблем, которые может у вас были или могут быть, так как паттерны в большинстве случаях любят описывать в метафорах, но чаще это получается слишком абстрактно, поэтому нужно чтобы вы придумали свои конкретные задачи, где бы вы попробовали применить этот паттерн. И второй этап - садитесь и пишите эти задачи. Тупо открываете свой яп и реализовываете паттерн. При чем несколько раз с разными проблемами.

    Также советую четко понять uml диаграммы. Таким образом, чтобы освежить паттерн вы не будете читать примеры, а просто посмотрите диаграмму и сразу вспомните, зачем он нужен и как его можно реализовать.
    Вот пожалуй и все
    Ответ написан
    1 комментарий
  • Какие методы противодействия Ddos атакам существуют, что вообще есть по теме полезного?

    RicoX
    @RicoX
    Ушел на http://ru.stackoverflow.com/
    1. Как понять что тебя ддосят, если твой сервер лежит и не отвечает? мало ли что там может быть такого убаюкивающего для него. Как понять, что идет именно ддос?

    Ну на большинстве серверов все-таки стоит система мониторинга, которая и показывает аномальный рост определенного показателя сервера, если ситема не стоит и вы еще можете попасть на сервер, то смотрится ручками, если уже не можете попасть удаленно то смотрите через IP-KVM, все прекрасно видно по каунтерам.
    2. Что можно сделать самому на сервере, чтобы максимально быть готовым к ддосу? Кроме правил iptables есть ли еще какие-то фичи?

    Зависит от количества свободных денег, тут как обычно противодействие оружия и брони, кто больше вложил тот и победил, ваши правила фаирвола для ДДоС до задницы, помогут только от простого ДоС, при нормальном ДДоС вас проще всего снести атакой на полосу и вообще не заморачиваться тем, что там у вас настроено - это дешево и эффективно.
    3. Законно ли перенаправлять атакующий трафик назад? С одной стороны, он сам нарвался же. С другой, зараженные сервера ботнета могут быть полезными, вдруг там порносайт какой, а я его ответным трафиком положу... Есть ли где-то инструкции или чтиво по теме отражения атак?

    ДДосят не с одного адреса, ну перенаправляйте, поднимите на свой сервак нагрузку в 2 раза, ляжете вдвое быстрее. Представьте что вокруг вас стоит 1000 человек и каждый плюет в вас, сможете от всех отплеваться?
    4. если я купил много прокси серверов и провожу ддос атаки на свой с целью проверить нагрузки и отказоустойчивость, это я тоже закон нарушил? Ботнет же, атаки во все поля....

    Атаки не проводят с proxy серверов, с таким же успехом можно атаковать со своего тостера. Для проверки поведения сервера под нагрузкой есть специальные инструменты, например hping, ab, yandex tank .... их достаточно, чтоб понять как поведет себя сервер под определенной атакой, смотреть просто, по плечу атаки, чем больше плече, тем проще уложить ваш сервер, многим сервакам достаточно атаки с одной машины чтобы лечь полностью.
    5. Отслеживается ли вообще активность таких атак как-то по сети? Не зря же китайцы фаервол себе захерачили, наверное отслеживается? Почему тогда школьников не попересажали еще, вероятно, отслеживается плохо?

    Кому нужно, те отслеживают, большинству начхать. Чтоб отслеживать надо не слабо вложиться в коллекторы трафика, купить систему анализа, нанять спецов по работе с ней, этим занимаются только богатые фирмы, посмотрите цены на оборудование того-же Arbor - поймете начиная с какого уровня компании есть смысл с этим заморачиватся, а не уходить под чужую защиту.
    6. Как ведут себя провайдеры? им проще клиента отключить, как я понимаю, верно? Но если ДНС прописаны на сервера хостинг провайдера, как его не выброси, атаки пойдут именно туда. Все равно придется фильтровать как-то... Как вообще борятся с атаками хостинги и провайдеры? Не сидят же они сложа руки?

    Если мы говорим о хостерах, то мелкие уходят под защиту, крупные имеют свое оборудование для борьбы в автоматическом режиме, если клиента постоянно атакуют, а он не хочет платить за защиту, то его дешевле отключить. Если мы говорим про ISP, то в большинстве случаев им насрать и дешевле пропускать весь трафик, чем анализировать его, у ISP очень жирные каналы и начинают они чесаться если ДДоС уж очень серьезный, на сегодня это за 100 гигабит полосы, тогда начинают блочить атакуемые адреса на BGP, заворачивая в null.

    Из книг и советов - лучший гугл, ищите список возможных атак, потом по каждой атаке читаете отдельно методы противодействия, защита от серьезной атаки, не уровня hping у школьника - это очень дорого.
    Ответ написан
    2 комментария
  • Magic Mouse - люфт

    pietrovich
    @pietrovich
    Там люфт максимум миллиметр, недостатком это назвать нельзя

    Люфт в 1mm не является недостатком в изделии ~5x10x2см !? Мне этого не понять.
    Ответ написан
    2 комментария