А ещё для каждого шаблона можно выбрать альтернативную "Expand with" клавишу.
Мой любимый "альтернативный" шаблон: '+' и пробел после него внутри строки превращают "abc+|def" в "abc" + | + "def".
История изменений для файла/папки в IDEA, конечно же, есть.
В последнем EAP — это кнопка в виде часов на главном toolbar. Ну или Ctrl+Shift+A и 'show history'. Или через меню VCS Operations по Alt+`.
Интеграция с баг-трекером (в т.ч. переключение контекста при смене тикета, а также изменение статуса тикета (на In Progress), создание новой ветки в VCS, трекинг потраченного времени) сделана в плагине Task Management: https://www.jetbrains.com/help/idea/managing-tasks-and-context.html
Если вдруг вам понадобится больше 5К определений языка в месяц (или в "Text Analytics API" решат "закрутить гайки"), есть ещё вот такая библиотека: https://github.com/CLD2Owners/cld2
Для сетей с популярными SSID можно использовать готовые таблицы.
Например, на Church of Wifi есть посчитанные хэши для 1000 популярных SSID и миллиона различных паролей. (33 ГБ)
В Chrome встроена поддержка стандарта U2F. Не знаю, правда, является ли этот код частью Chromium.
2FA для менеджера паролей оставит "специально заточенные трояны" без работы.
Зато я могу, например, вставить комментарий, содержащий сегодняшний день и имя автора.
В примере встроенного шаблона, который вы приводили выше, есть более удачный вариант: #parse("File Header.java")
Это гарантирует, что у всех ваших новых классов будет одинаковая "шапка". И отредактировать её можно будет в одном месте, а не в каждом из десятка шаблонов для классов.
у Идеи нет шаблонов классов, содержащих public static void main()
Мне кажется, если создавать новый шаблон под каждое "классы, содержащие...", то в них можно будет заблудиться.
Да и мне лично чаще всего надо добавить метод main() в уже существующий класс (чтобы быстро "на коленке" что-то проверить). Поэтому классы я создаю самые обычные. А метод добавляю с помощью Live Template: psvm + Tab
Ещё интересный взгляд на тему "модальности" Vim: http://www.viemu.com/a-why-vi-vim.html
Если смотреть на 'i' не как на переключение режима, а как на обычную команду, такую же как, например, 'd', то, получается, никаких "режимов" и нет. Вы просто вводите команды:
d10j
G
iHello < Esc >
Дополнительная прелесть в том, что '.' повторяет предыдущую команду редактирования. Т.е. достаточно нажать точку и вы получите ещё одно 'Hello' в позиции курсора. А если вместо 'i' использовать 'A', то перед началом ввода курсор переместится в конец строки.
Статья выше содержит много других подобных примеров. А также разъясняет некоторые другие ошибочные представления о работе с Vim.
Редактор Kakoune предлагает дальнейшее развитие идеи "составляемых команд". Вместо "команда-объект", как в vim, он использует подход "объект-команда". Это позволяет сделать работу более интерактивной (вы будете видеть выделенный текст прежде чем введёте команду на его удаление).
Также разработчики прогнозируют более пологую кривую обучения за счёт интерактивной подсказки о набираемой команде. http://kakoune.org/why-kakoune/why-kakoune.html
Если забыли при вводе команды добавить pv, то для большинства базовых команд (cp, mv, dd, tar, gzip и пр.) поможет progress https://github.com/Xfennec/progress
Нет, не в блокноте. Но как и, наверное, многие просто пользовался стандартной цветовой схемой с мелкими правками под себя. Вон пример есть в начале статьи под спойлером.
Если вам идея раскрасить по-разному классы и методы пришла раньше — отлично. Но это не значит, что статья "ниачём", а те, кто с этим не согласны, только оторвались от блокнота.
Соль статьи не в "одинаковости" темы в разных IDE, а в идее цветового выделения семантики.
Мне, например, она "открыла глаза". И я собираюсь сделать что-то подобное в своей схеме раскраски.
На схожую тему в IDE от JetBrains есть опция Semantic highlighting.
Только она немного о другом: свой цвет (до 5 штук) выбирается для каждого параметра или локальной переменной. Т.е. везде в коде метода параметр foo будет "зелёненьким", а параметр bar — "синеньким".
Да, некоторые из описанных ошибок действительно не получилось бы найти статическим анализатором.
(Откуда ему знать, что для правильного освобождения памяти надо использовать GENERAL_NAMES_free, а не sk_GENERAL_NAME_free?)
Но некоторые выглядят вполне "по зубам" PVS-Studio. Например, отсутствие проверки возвращаемого значения ASN1_STRING_to_UTF8.
Или, скажем, вот это: tib_len = buf2[0x28];. Здесь buf2 имеет тип char. Т.е. значение tib_len может оказаться отрицательным, а оно дальше передаётся в memcpy.
Или PVS-Studio пока ещё не умеет data flow analysis?
Ещё таким образом можно автоматически исправлять некоторые опечатки.
Например, 'retrun' + пробел можно заменять на return $END$.
А ещё для каждого шаблона можно выбрать альтернативную "Expand with" клавишу.
Мой любимый "альтернативный" шаблон: '+' и пробел после него внутри строки превращают "abc+|def" в "abc" + | + "def".
Template text:
" + $END$ + "
История изменений для файла/папки в IDEA, конечно же, есть.
В последнем EAP — это кнопка в виде часов на главном toolbar. Ну или Ctrl+Shift+A и 'show history'. Или через меню VCS Operations по Alt+`.
Интеграция с баг-трекером (в т.ч. переключение контекста при смене тикета, а также изменение статуса тикета (на In Progress), создание новой ветки в VCS, трекинг потраченного времени) сделана в плагине Task Management:
https://www.jetbrains.com/help/idea/managing-tasks-and-context.html
Если вдруг вам понадобится больше 5К определений языка в месяц (или в "Text Analytics API" решат "закрутить гайки"), есть ещё вот такая библиотека: https://github.com/CLD2Owners/cld2
Для сетей с популярными SSID можно использовать готовые таблицы.
Например, на Church of Wifi есть посчитанные хэши для 1000 популярных SSID и миллиона различных паролей. (33 ГБ)
Заинтересовало, что за "новый плагин"?
Поделитесь ссылкой на тот самый пост в Medium? (когда он будет опубликован)
Заблуждения программистов относительно времени
https://habrahabr.ru/post/146109/
Больше заблуждений программистов относительно времени
https://habrahabr.ru/post/313274/
В Chrome встроена поддержка стандарта U2F. Не знаю, правда, является ли этот код частью Chromium.
2FA для менеджера паролей оставит "специально заточенные трояны" без работы.
В примере встроенного шаблона, который вы приводили выше, есть более удачный вариант:
#parse("File Header.java")
Это гарантирует, что у всех ваших новых классов будет одинаковая "шапка". И отредактировать её можно будет в одном месте, а не в каждом из десятка шаблонов для классов.
Пакет
junit.framework
является deprecated уже больше 3 лет. Исправьте свой код. И другим такого больше не советуйте.Мне кажется, если создавать новый шаблон под каждое "классы, содержащие...", то в них можно будет заблудиться.
Да и мне лично чаще всего надо добавить метод
main()
в уже существующий класс (чтобы быстро "на коленке" что-то проверить). Поэтому классы я создаю самые обычные. А метод добавляю с помощью Live Template: psvm + TabЕщё интересный взгляд на тему "модальности" Vim: http://www.viemu.com/a-why-vi-vim.html
Если смотреть на 'i' не как на переключение режима, а как на обычную команду, такую же как, например, 'd', то, получается, никаких "режимов" и нет. Вы просто вводите команды:
d10j
G
iHello < Esc >
Дополнительная прелесть в том, что '.' повторяет предыдущую команду редактирования. Т.е. достаточно нажать точку и вы получите ещё одно 'Hello' в позиции курсора. А если вместо 'i' использовать 'A', то перед началом ввода курсор переместится в конец строки.
Статья выше содержит много других подобных примеров. А также разъясняет некоторые другие ошибочные представления о работе с Vim.
Редактор Kakoune предлагает дальнейшее развитие идеи "составляемых команд". Вместо "команда-объект", как в vim, он использует подход "объект-команда". Это позволяет сделать работу более интерактивной (вы будете видеть выделенный текст прежде чем введёте команду на его удаление).
Также разработчики прогнозируют более пологую кривую обучения за счёт интерактивной подсказки о набираемой команде.
http://kakoune.org/why-kakoune/why-kakoune.html
Если забыли при вводе команды добавить pv, то для большинства базовых команд (cp, mv, dd, tar, gzip и пр.) поможет progress
https://github.com/Xfennec/progress
В одном из комментариев в начале упоминается https://github.com/morhetz/gruvbox
Это не оно?
Нет, не в блокноте. Но как и, наверное, многие просто пользовался стандартной цветовой схемой с мелкими правками под себя. Вон пример есть в начале статьи под спойлером.
Если вам идея раскрасить по-разному классы и методы пришла раньше — отлично. Но это не значит, что статья "ниачём", а те, кто с этим не согласны, только оторвались от блокнота.
После редизайна при обновлении страницы не видно, какие из комментариев автора поста — новые. Они все одинаково раскрашены зелёным.
Соль статьи не в "одинаковости" темы в разных IDE, а в идее цветового выделения семантики.
Мне, например, она "открыла глаза". И я собираюсь сделать что-то подобное в своей схеме раскраски.
На схожую тему в IDE от JetBrains есть опция Semantic highlighting.
Только она немного о другом: свой цвет (до 5 штук) выбирается для каждого параметра или локальной переменной. Т.е. везде в коде метода параметр
foo
будет "зелёненьким", а параметрbar
— "синеньким".Да, некоторые из описанных ошибок действительно не получилось бы найти статическим анализатором.
(Откуда ему знать, что для правильного освобождения памяти надо использовать
GENERAL_NAMES_free
, а неsk_GENERAL_NAME_free
?)Но некоторые выглядят вполне "по зубам" PVS-Studio. Например, отсутствие проверки возвращаемого значения
ASN1_STRING_to_UTF8
.Или, скажем, вот это:
tib_len = buf2[0x28];
. Здесь buf2 имеет типchar
. Т.е. значениеtib_len
может оказаться отрицательным, а оно дальше передаётся вmemcpy
.Или PVS-Studio пока ещё не умеет data flow analysis?