• Как я использую git
    +2
    Вообще-то, у гита есть свои алиасы, но я понятия не имею, как их добавлять, т.к. мне лень изучать вопрос.

    Уже за это хочется поставить минус. Лень прочитать документацию — зачем вообще тогда берёшься за инструмент? Эта инфа есть в man git-config.


    Лично я в указанной ситуации (а у меня она часто возникает) делаю так: создаю коммит, где в сообщении добавляю префикс[to_squash], заканчиваю работу над веткой, делаю полный ребейз ветки на мастер (git rebase -i master) и переношу этот коммит под тот, к которому данная правка относится, с пометкой s (squash).

    Открой для себя autosquash! Почитай про git rebase --autosquash и git commit --fixup/--squash. Всё есть в man git-rebase и man git-commit. Если не лень изучать, кочнечно.

  • Самые полезные приёмы работы в командной строке Linux
    0

    Поэтому аналогом nohup на чистом шеле является такая конструкция: script.sh >&- 2> stderr.log <&- & disown. Такая команда закроет stdin и stdout, перенаправит stderr в файл лога, отправит задачу в фон и отсоединит от шела.

  • Сделать завтра. Как не тратить время на мелочи
    0

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

  • Сделать завтра. Как не тратить время на мелочи
    +1

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

  • Сделать завтра. Как не тратить время на мелочи
    +3

    Так и смысл все входящие фильтровать. Наверняка большинство дел совершенно для вас не важны и их можно смело выкинуть или делегировать. Я недавно для себя понял, насколько важно иметь перед глазами чёткую цель. Например: построить дом, выстроить карьеру, выстроить отношения в семье, развиться профессионально и как личность. Главное, чтобы их было немного, чтобы их удержать в себе и не распыляться, они должны быть чёткими и ясными, как яркий свет в конце туннеля. Тогда каждое новое входящее дело рассматривается сквозь призму высшей цели, то понятие «важное» vs «неважное» из абстрактных становятся очень конкретными. Либо это дело приближает лично тебя к твоей цели, и тогда она важное и его нужно распланировать и делать. Либо не приближает или, того хуже, отдаляет тебя, тогда оно автоматически отсеивается, выбрасывается в топку. Когда множество дел категоризируются как выжные, это первый признак того, что нет чётких ориентиров в жизни, либо целей слишком много, и силы распыляются. А силы (тут речь об умственных и духовных) у людей не безграничны.

  • У топовых разработчиков может быть жизнь за пределами программирования
    0

    На самом деле есть методики, позволяющие произвольно входить-выходить из потока. Одна из них, как ни странно, самая обычная медитация. На более простом и практичном уровне помогают всякие простые методики тайм-менеджмента, вроде «помидорки». При достаточной самодисциплине и прокачанной силе воли можно по желанию, сознательно входить в поток, и потом из него спокойно выходить, и при этом не испытывать жуткую выжатость и усталость.

  • Куча способов переиспользовать код в Rust
    +1

    Отвечал с телефона, автодополнение не всегда меня понимает правильно. Так что извините за странные опечатки. Надеюсь, из контекста понятно, что имелось в виду :)

  • Куча способов переиспользовать код в Rust
    +6
    1. В первом случае запятая после последнего элемента запрещена, во втором — обязательна. Вместе эти варианты покрывают оба случая, делая запятую в конце опциональной.


    2. Верно, нельзя. Чтобы реализовать трейт, нужно чтобы либо трейт, либо тип был в данном крейте.


    3. Можно сделать такую обёртку (паттерн называется newtype: struct NewType(OldType);). Нет, автоматически ничего само не реализуется, надо самому реализовать для нового типа нужные трейты. Можно облегчить себе участь, если реализовать трейт Deref, тогда трейты, методы которых принимают старый тип по ссылке (&self, &mut self), реализуются автоматом через Deref coercion.


    4. Да, можно. Через динамическую диспетчеризацию. Тип контейнера будет List<&(Animal + Filing)>. Тип элемента будет называться trait-object. Доступ к методами будет идти через таблицу виртуальных методов, на это есть строгие ограничения для трейтов (они должны быть object-safe). Полнее отвечать очень долго, лучше почитать доки, искать по западным ключевым словам :)
  • Куча способов переиспользовать код в Rust
    +2

    Прекрасный перевод. Спасибо!

  • В результате взлома известного opensource-хостинга были заражены дистрибутивы Audacity, Classic Shell и другие
    +6

    Что-то этот fosshub настолько популярен, что я первый раз узнал про него из этого поста.

  • Как отметить свои TODO, FIXME и ERROR в Xcode
    0

    Зачем здесь поднимать тяжёлый перл, если sed-а хватит за глаза?

  • Код Rust включен в Firefox 48
    0

    Ну в арчике из оф.реп ставится стабильный раст и карго. Растап нужен для найтли и бет разве что.

  • Введение в Iron: плавим руду на Rust
    +3

    Всё хорошо, только вот в статье перидочески путаются типажи и типы.
    Request, Response, IronRequest, IronResult, IronError, Iron, Mime, Chain — это всё типы, а не типажи.
    Это очень важное отличие, типажи нельзя инстанциировать, они определяют только поведение, интерфейс.

  • Код Rust включен в Firefox 48
    0

    Ну если про код из коммента, то да, в таком случае компилятор пропустит, но будет паника в рантайме.

  • Код Rust включен в Firefox 48
    0

    Погоди, но взятие по индексу ведь занимает массив, так что так просто его не модифицируешь, если где-то сохранились ссылки на значения, взятые по индексу. Или ты про что?

  • Код Rust включен в Firefox 48
    0

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

  • Код Rust включен в Firefox 48
    +5
    1. При использовании индексов есть проверка на выход индекса за границы массива (bounds check) в рантайме. Да, есть небольшой оверхед, но тут решили в сторону безопасности. Используете итераторы побольше, чтобы таких проверок избежать.


    2. Нет, такого сделать нельзя, борроу чекер при компиляции не пропустит.
  • Большие бинари в моем Rust?
    +6

    По поводу компиляций и оптимизаций, обновился только что до Rust 1.10.


    Исходники
    fn main() {
      println!("Hello, world!");
    }

    int main(int argc, char **argv) {
      printf("Hello, world!\n");
    }

    Компилирую так:


    $ rustc -C prefer-dynamic -C opt-level=3 hello.rs
    $ gcc -Os hello.c

    Результаты:


    $ ls -lh
    -rwxr-xr-x 1 kstep kstep 6.7K Jul 11 18:25 a.out
    -rwxr-xr-x 1 kstep kstep 7.9K Jul 11 18:24 hello
    
    $ strip -s a.out hello
    $ ls -lh
    -rwxr-xr-x 1 kstep kstep 4.4K Jul 11 18:25 a.out
    -rwxr-xr-x 1 kstep kstep 5.4K Jul 11 18:25 hello
    
    $ ldd hello
            linux-vdso.so.1 (0x00007ffdb5aeb000)
            libstd-e8edd0fd.so => /usr/lib/libstd-e8edd0fd.so (0x00007f4621eee000)
            libc.so.6 => /usr/lib/libc.so.6 (0x00007f4621b4d000)
            libdl.so.2 => /usr/lib/libdl.so.2 (0x00007f4621949000)
            libpthread.so.0 => /usr/lib/libpthread.so.0 (0x00007f462172c000)
            libgcc_s.so.1 => /usr/lib/libgcc_s.so.1 (0x00007f4621516000)
            /lib64/ld-linux-x86-64.so.2 (0x00007f46224b5000)
            libm.so.6 => /usr/lib/libm.so.6 (0x00007f4621212000)
    
    $ ldd a.out
            linux-vdso.so.1 (0x00007fffc0974000)
            libc.so.6 => /usr/lib/libc.so.6 (0x00007f5688810000)
            /lib64/ld-linux-x86-64.so.2 (0x00007f5688bb1000)

    Так что всё сопоставимо по размеру.

  • Рефакторинг при помощи композиции Клейсли
    +1

    Наконец-то вменяемое описание композиции Клейсли для инженеров, а не для математиков! Спасибо!

  • Книга «Head First. Изучаем Ruby»
    –1

    Субкласс, суперкласс? В переводе? Чем устоявшиеся русскоязычные термины не угодили? Старый добрый подкласс? Родительский класс?

  • Разработка игр на Rust. Обзор экосистемы
    +7

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

  • Техники захвата внимания пользователя — от фокусника и специалиста по вопросам дизайнерской этики в Google
    0

    Во-первых, не психопат, а социопат. Во-вторых, это только означает, что у человека проблемы с зеркальными нейронами, что часто бывает, например, в случае расстройств аутического спектра (том же синдроме Аспергера).

  • Разработка игр на Rust. Обзор экосистемы
    0

    Нет, без unsafe не валиден, будет ошибка компиляции:


    <anon>:17:5: 17:9 error: cannot borrow `data` as mutable more than once at a time [E0499]
    <anon>:17     data.clear();
  • Запуск worker'ов сервиса с помощью systemd
    +2

    Ещё есть зависимости вида After и Before, которые в сочетании с Requires позволяют запускать сервисы после и до заданного.

  • Запуск worker'ов сервиса с помощью systemd
    0
  • Создание поиска по библиотеке юным программистом — каково это?
    +3

    ЕГЭ не готовит к реальной жизни, он готовит только для поступления в вуз. Такие проекты — готовят.
    То, что хочется пионерить и писать решения самому в ущерб «best practices» — это нормально и правильно в вашем возрасте.


    Понятно, что «старичок» просто бы настроил Elasticsearch, взял пару готовых библиотек, написал бы обвязку за пару вечеров,
    и писать было бы не о чем. У меня при прочтении тоже возникло много вопросов из серии «чем не угодил эластик?», «почему авторизация своя?» и т. п. Но потом я посмотрел на возраст автора и заплюсовал статью. Да, код неказистый, да, состоит из велосипедов, но каков запал, какая целеустремлённость! Вы даже не поленились потрясти Абби по поводу проприетарной библиотеки, а это много стоит, на самом деле.


    Все с чего-то начинали. И я более чем уверен, что практически все комментаторы, которые выше тыкали в недостатки проекта, далеко не родились такими умными, а когда-то тоже пионерили. Делать ошибки хорошо и правильно, на них учаться. Главное понимать и принимать,
    когда тебе на ошибки указывают, а вы это делаете, так что готовы учиться. Это вызывает уважение, из вас выйдет хороший программист.
    Я рад, что растёт такая смена. Вы вернули мне веру в человечество.

  • Запуск worker'ов сервиса с помощью systemd
    +2

    Системдешные атрибуты сервисов OnFailure, Restart и RestartSec сделают то же самое.

  • Запуск worker'ов сервиса с помощью systemd
    +6

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


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

  • Опыт перехода с Sublime на Vim
    +1

    NerdTree мне тоже оказался не по нраву, простой netrw из коробки для меня удобнее. А вот Syntastic для меня маст хэв.

  • Опыт перехода с Sublime на Vim
    +1

    Бессовестно порекламирую свой конфиг =)

  • Опыт перехода с Sublime на Vim
    +2

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

  • Что такое «Dark web»?
    +9

    WTF?

  • Техники захвата внимания пользователя — от фокусника и специалиста по вопросам дизайнерской этики в Google
    0

    Ну так тебя завставляют, а ты не заставляйся.

  • Rust: От &str к Cow
    +2

    Cow это не типаж, это тип.

  • Фильтруй правильно, или вредные советы по фильтрации в Angular.Js
    +2

    В сети всегда найдётся человек, который воспримет сарказм дословно.

  • Хаордическая организация Visa (Часть 1)
    +1
    Ахматова про программирование

    Когда б вы знали из какого сора
    Растёт весь софт не ведая стыда!
    Как одуванчик вдоль забора
    Как лопухи и лебеда.

  • Хаордическая организация Visa (Часть 1)
    +4

    Статья оборвана на половине. Где продолжение? Когда оно будет?

  • man!(C => D => Rust)
    +1

    Эх, а мне больше unsafe enum были по душе...

  • Модули расширения Python на Rust
    0
    Ну это вкусовщина уже, в принципе оба варианта вполне себе ок.
  • Security Week 07: Apple против ФБР, глобальная уязвимость в glibc, криптолокеры и медицина
    –1
    По поводу glibc, попробовал у себя на арче их proof-of-concept, бага (уже?) не воспроизводится.
    Пакет glibc версии 2.22-4, ядро 4.4.1-2-ARCH.