All streams
Search
Write a publication
Pull to refresh
2
0

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

Send message

Почему у всех vim ассоциируется исключительно с чёрно-зеленым чудовищем из которого нельзя выйти, с размером таба 8 и правкой конфигов?
Vim это про редактирование кода как текста, неважно в каком редакторе/IDE — это может быть как и голый вим, так и любая IDE с эмуляцией vim: начиная со всех продуктов семейства Jetbrains до, простите, QtCreator'а (я понимаю, что поддержка в этих плагинах далеко не на высшем уровне, но, например, за последние лет 5 в той же IDEA изменилось с "да блин, это не так работает" каждый час на "что-то вроде не так оно должно себя вести, хотя может и норм" раз в месяц или даже реже)
В таком случае вы получаете И мощь vim'а при редактировании кода как текста, И мощь IDE при редактировании кода. Об этом и пишется большинство статей (как я надеюсь, по крайней мере я так вижу...)


Например, вы написали какой-то if с простым условием, оно разрослось до сложного со всякими скобками. Теперь вы хотите вынести выражение в скобках в константу.
IDE: поставить каким-то образом курсор на открывающую скобку, мышкой или через стрелочки с зажатым шифтом выбрать всё с закрывающей скобкой, С-А-С, <имя переменной>
VIM: поставить каким-то образом курсор внутри скобок, ca)<имя переменной><ESC>Oconst <имя переменной> = <ESC>p, удалить скобки
IDE+VIM: поставить каким-то образом курсор внутри скобок, va)<C-A-C><имя переменной>


Для меня очевидно, что комбинированный вариант самый удобный: я просто не представляю, как можно обходиться без vimовских motion-change/delete комбинаций (dap, di), c2w, v%, ...) не говоря уж о всемогущей точке, так и без обычных IDEшных фич. Даже сейчас, когда пишу этот коммент в браузере мне этого не хватает: всякие плагины типа vimium помогают, но это только для навигации, а не для написания какого-то текста, в такие моменты проще создать временный файл и редактировать его как раз голым вимом (да даже плагинов никаких не надо, разумеется), нежели чем страдать с обычным редактором


Просто я не понимаю, почему люди продолжают есть этот кактус добровольно

Кому-то может быть не нужны все возможности IDE. Я вот понаблюдал за собой, что я использую из всего WebStorm'а и понял, что это в большинстве своём автоимпорт, refactor->rename, refactor->extract и подобное, git view. Не так уж и много фич, которые при желании можно и в голом виме плагинами сделать, но смысл? А вот для спортивного программирования на с++ мне вообще ничего из IDE не нужно, поэтому смысл использовать IDE?


которые не надо настраивать по 4 дня

Мне даже интересно, что это за плагин. У меня более 20 плагинов (из которых обязательных — 0, а из желательных только автокомлит), но я не помню, чтобы установка занимала больше минуты, а настройка различалась по времени с чтением README устанавливаемого плагина
Да в той же IDEA для того чтобы при желании пролистать все настройки уйдёт наверно 4 дня, но смысла в этом никакого нет — пользуешь по дефолту, понимаешь что что-то не нравится, идёшь в конфиг и чинишь. Но это я бы сказал это вообще про любой софт верно

А ведь и gcc (начиная с 4.8.1, 2013 год) и clang (как минимум начиная с 3.0) показывают ошибку сразу и чётко. Я сначала думал, что проблема в "давным-давно", но msvc до сих пор пишет на такой код какую-то ерунду...

Совершенно не понял лайфхака с автозаменой для телефона: клавиатура, которой я пользуюсь, по моим ощущениям в 95%+ случаях самостоятельно заменит все приведённые в списке опечатки и не только, а иногда правильно заменит даже если промазать и написать слово полностью со сдвигом (например, мжатшли->сдвигом). Я думал, что все современные клавиатуры умеют или так же или даже больше.
Понятно, что остаётся случай вида "щас->сейчас" и другие сниппеты, но даже это клавиатура умеет подсказывать на достаточно хорошем уровне и если я однажды напишу Boomburum, то в следующий раз подскажет как минимум по Boo, если уж не по B, я уж не говорю про "и так", по которому гарантированно предложит "далее"

Процесс выбора идеального места немного напомнил процесс выбора правильной перегрузки функции компилятором с++

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

А подскажите, пожалуйста, могут ли граждане РБ въезжать сейчас в РФ?
Я так понимаю, что граждане РФ могут сейчас как въехать в РБ, так и вернуться, ибо "Нет запрета на въезд", но, к сожалению, отношение въезда-выезда не является симметричным.
Я думаю многих интересует подобный вопрос: въезд в РФ для той или иной страны, было бы очень полезно иметь в человеко-читаемом формате эту информацию!

Как уже сказали выше, это Каменногорск. Уже было тут про ласточку в Рускеалу

Аналогично ездил N лет на одной и той же электричке, которая по расписанию приезжает на мою станцию в 10:05 и на вокзал в 10:26. Если время прибытия на мою станцию было примерно 10:05 + rand() % 3, то на вокзал я ни разу не помню, чтобы приехали вовремя, в среднем 10:28-10:30. Таблички не составлял, но смотрел каждый раз — с первого вагона сразу после выхода на платформу видны часы на вокзале
khim, когда ездишь на такой электричке этот феномен не работает: будет "о_О, электричка опоздала всего лишь на одну минуту вместо обычных трёх, О_о", я уж не говорю, какая реакция будет на прибытие вовремя

Но зачем это всё?
Я для своего месседжера (персональный) просто взял access_token kate mobile'а и продолжил пользоваться им как ни в чём не бывало. В переписке с поддержкой на эту тему было сказано


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

Но, честно говоря, мне кажется это совсем бред, особенно если запросы не отличаются от запроса приложения

Я откатывался без рута, рутовал девайс я уже после даунгрейда. Но я не знаю, есть ли у меня Anti Rollback: мне кажется, на любом девайсе (свежем?) запрещено откатываться между мажорными версиями через стандартный менеджер, но никто (вроде) не запрещает накатить хоть первую MIUI через fastboot. Я делал по этой инструкции, пункт "How to Flash Fastboot ROM"
UPD:


% sudo fastboot getvar anti
anti: e7df9635

Я не знаю, что это значит...)

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

Откатитесь на MIUI 9, это не так сложно делается. Я не смог выдержать полнейшего изменения в неудобную сторону всего интерфейса при обновлении на MIUI 10 и откатился, доволен как слон. Думаю, 11 тоже качать не стоит...

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

Точно, после обновления приложения фильтр электричек добавился, спасибо!
Теперь (может и раньше было) заметил что если смотреть электрички на сегодня, дата почему-то переносится на две строчки:


Баг/Фича?

image

При просмотре на «завтра» или на «дату» всё хорошо.
Теперь, кстати, (особенно при просмотре только ласточек) мозолит глаза кнопка «Расписание до 3:00». По статье понятно, зачем она, но на моём направлении она совершенно бессмысленна. Кажется, имеет смысл добавлять её в спорных случаях, когда невозможно однозначно определить когда «начинается завтра». И кстати при нажатии на неё сбрасывается фильтр «ласточка».
Тогда ещё один фиче-реквест, наверняка не первый его пишу: возможность переключаться между «сегодня» / «завтра» / «дата» по свайпу!

Оффлайн это круто и очень удобно, ведь можно с утра загрузить расписание на поездку вечером, мало ли что случится в пути: будь то кончился мобильный интернет или вообще пропала связь. Теперь не надо фотографировать расписание по прибытию и искать его потом где попало!
Пара фиче-реквестов:


  • Возможность свернуть попап "Не удалось обновить расписание" в, например, маленький желтый восклицательный знак где-то слева от кнопки "Обратно". Ведь если интернета нет и не предвидится — ценность попапа пропадает: я и так это знаю, спасибо, предупрежден — вооружен
  • Возможность фильтровать электрички по типу: например, посмотреть "только ласточки", или, наоборот, "только обычные электрички"

но ведь же -Wall (а точнее -Wempty-body) явно скажет, что "warning: if statement has empty body"...

В данном конкретном случае все немного сложнее. Sequelize попадет в рекурсию на моменте создания сущностей. Точнее по какой-то причине они не "создали таблицы, затем alter table'ом добавили foreign key", а по моему личному ощущению примерно так: "создадим таблицы в порядке, обратному топологической сортировки". Это касается исключительно ограничений на foreign key, при выключении которых все замечательно заводится.


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


Book.findAll({
    include: [{
        model: Category,
        as: 'category',
        include: [{
            model: Book,
            as: 'last_added_book',
            include: [{
                model: Category,
                as: 'category'
            }]
        }]
    }]
});

В рекурсию может попасть сериализатор, если сущность хранится как ссылка на объект из базы. Но с этим в sequelize я не встречался, встречался только при использовании кривыми руками java+hibernate+jackson

Оказывается, в sequelize нельзя указывать limit при many-to-many(мне не нужно было), хотя может быть в версии 4.0 уже и можно


Получившийся запрос(без limit: 3 в категориях)
SELECT 
    `Book`.*,
    `categories`.`id` AS `categories.id`,
    `categories`.`name` AS `categories.name`,
    `categories.BookCategories`.`bookId` AS `categories.BookCategories.bookId`,
    `categories.BookCategories`.`categoryId` AS `categories.BookCategories.categoryId`
FROM
    (SELECT 
        `Book`.`id`,
        `Book`.`title`
    FROM
        `Books` AS `Book`
    WHERE
        (SELECT 
                `BookCategories`.`bookId`
            FROM
                `BookCategories` AS `BookCategories`
            INNER JOIN `Categories` AS `Category` ON `BookCategories`.`categoryId` = `Category`.`id`
            WHERE
                (`Book`.`id` = `BookCategories`.`bookId`)
            LIMIT 1) IS NOT NULL
    ORDER BY `Book`.`createdAt` DESC
    LIMIT 10) AS `Book`
        INNER JOIN
    (`BookCategories` AS `categories.BookCategories`
    INNER JOIN `Categories` AS `categories` ON `categories`.`id` = `categories.BookCategories`.`categoryId`) ON `Book`.`id` = `categories.BookCategories`.`bookId`
        AND `categories`.`parentId` IS NULL
ORDER BY `Book`.`createdAt` DESC;

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

Да, именно. В таком случае Вы сможете в промежуточной таблице также хранить какую-нибудь информацию о этой связи. Это, конечно, подбросит Вам еще "парочку" подводных камней ;)

В таком случае не знаю, у меня никогда такая трактовка не вызывала какого-то непонимания. Если указан примитивный тип — поле, хранимое в БД; не примитивный тип T — связь, когда на другом конце один объект; std::vector<T> — связь, когда эта сущность имеет много других объектов. В таком случае даже не надо думать, как это хранится в БД — через третью таблицу или через строку с id через запятую, если утрировать. Мы просто знаем, что это сущность связана с другой, а имя поля должно однозначно говорить как и зачем.

1

Information

Rating
Does not participate
Location
Санкт-Петербург, Санкт-Петербург и область, Россия
Registered
Activity